Opengl, черные линии между плиткамиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Opengl, черные линии между плитками

Сообщение Anonymous »

Когда оно преобразуется в целое значение (1,2,3 и т. д.), между плитками нет черных линий, все выглядит нормально. Но при переводе в нецелое число (1,1, 1,5, 1,67) между каждым тайлом появляются небольшие черноватые линии (я так понимаю, это из-за субпиксельного рендеринга, да?)... и выглядит это некрасиво =P
Итак... что мне делать?
Кстати, это мой код загрузки изображений:

Код: Выделить всё

bool Image::load_opengl() {
this->id = 0;

glGenTextures(1, &this->id);

this->bind();

// Parameters... TODO: Should we change this?
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, this->size.x, this->size.y,
0, GL_BGRA, GL_UNSIGNED_BYTE, (void*) FreeImage_GetBits(this->data));

this->unbind();

return true;
}
Я также пробовал использовать:

Код: Выделить всё

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
и:

Код: Выделить всё

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Вот мой код рисования изображений:

Код: Выделить всё

void Image::draw(Pos pos, CROP crop, SCALE scale) {
if (!this->loaded || this->id == 0) {
return;
}

// Start position & size
Pos s_p;
Pos s_s;

// End size
Pos e_s;

if (crop.active) {
s_p = crop.pos / this->size;
s_s = crop.size / this->size;
//debug("%f %f", s_s.x, s_s.y);
s_s = s_s + s_p;
s_s.clamp(1);
//debug("%f %f", s_s.x, s_s.y);
} else {
s_s = 1;
}

if (scale.active) {
e_s = scale.size;
} else if (crop.active) {
e_s = crop.size;
} else {
e_s = this->size;
}

// FIXME: Is this okay?
s_p.y = 1 - s_p.y;
s_s.y = 1 - s_s.y;

// TODO: Make this use VAO/VBO's!!
glPushMatrix();

glTranslate(pos.x, pos.y, 0);

this->bind();

glBegin(GL_QUADS);

glTexCoord2(s_p.x, s_p.y);
glVertex2(0, 0);

glTexCoord2(s_s.x, s_p.y);
glVertex2(e_s.x, 0);

glTexCoord2(s_s.x, s_s.y);
glVertex2(e_s.x, e_s.y);

glTexCoord2(s_p.x, s_s.y);
glVertex2(0, e_s.y);

glEnd();

this->unbind();

glPopMatrix();
}
Код инициализации OpenGL:

Код: Выделить всё

void game__gl_init() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, config.window.size.x, config.window.size.y, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
Скриншоты проблемы:
Изображение

Изображение


Подробнее здесь: https://stackoverflow.com/questions/196 ... ween-tiles
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • OpenGL рисует черные линии между плитками?
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • OpenGL - сияющие зазоры между плитками при рисунке в рамку Bramebuffer
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Крамы текстур OpenGL черные
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Сортировка слоев Unity Tilemap [Игрок перед и за плитками] Спрайт дерева, состоящий из 4 отдельных плиток
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Найти количество возможных k неатакующих ладей на шахматной доске NxM с запрещенными плитками?
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»