У меня проблема с текстурным отображением с Open-GL.Open-GL Изменение координат текстуры путем изменения размера треугольника
(1) - это текстура. Я хочу использовать треугольник из этого
(2) только для описания текстуры расщепляется в треугольниках
(3) отображаются текстуры треугольников 16x16 (высота х ширины)
(4) НЕПРАВИЛЬНЫХ отображений для деформированных треугольников (в случае размера треугольника не 16х16)
для (4) только переменных H1, H2, H3, H4 установлены (см второй кодовой коробки)
Setup
//- setup cam/OpenGL
int width = 1024;
int height = 800;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.f, width, 0.f, height, 1.f, -1.f);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
...
//- texture position in texture [Value range: 0..1]
float textX1 = 0.f;
float textY1 = 0.f;
//- size of texture triangle
const float textSizeWidth = 16.0f/getTextureWidth(); //- getTextureWidth()=2^N !
const float textSizeHeight = 16.0f/getTextureHeight();//- getTextureHeight()=2^M !
const float textSizeWidthHalf = textSizeWidth * 0.5f;
//- output screen coordinates [Value range: 0.. N !!]
int outX = 0;
int outY = 0;
//- the heigh of one "line"
static const int YSTEP = 9;
нарисовать треугольники
//-> cal: outX, outY, textX1, textY1, textX2, textY2
//- deformation values
unsigned int H1 = l->AraeHeight1;
unsigned int H2 = l->AraeHeight2;
unsigned int H3 = l->AraeHeight3;
unsigned int H4 = l->AraeHeight4;
//- disable the Height/deformation
if (!m_useHeight) H1 = H2 = H3 = H4 = 0;
//-- 1 --- 4^
//-- /\ B/ |
//-- /A \/ |YSTEP
//-- 2 --- 3 v
////// A /////
//-- ->1
glTexCoord2f(textX1 + textSizeWidthHalf, textY1 + textSizeHeight);
glVertex3i(outX + 8, outY + YSTEP + H1, 0);
//-- ->2
glTexCoord2f(textX1, textY1);
glVertex3i(outX, outY + H2, 0);
//-- ->3
glTexCoord2f(textX1 + textSizeWidth, textY1);
glVertex3i(outX + 16, outY + H3, 0);
////// B /////
//-- ->1
glTexCoord2f(textX2, textY2 + textSizeHeight);
glVertex3i(outX + 8, outY + YSTEP + H1, 0);
//-- ->3
glTexCoord2f(textX2 + textSizeWidthHalf, textY2);
glVertex3i(outX + 16, outY + H3, 0);
//-- ->4
glTexCoord2f(textX2 + textSizeWidth, textY2 + textSizeHeight);
glVertex3i(outX + 8 + 16, outY + YSTEP + H4, 0);
Если Н1 = Н2 = Н3 = Н4 = 0; то все выглядит нормально (изображение (3)). Если нет, то я получил проблемы с рендерингом (изображение (4)), как проблема «округления», но я не знаю, где/почему. Или проблема в том, что текстура смещается на один пиксель вправо, но почему? Или мне нужно установить еще один параметр Open-Gl. Спасибо за подсказку.
В чем проблема? Появляются синие линии? В противном случае отображение текстур выглядит хорошо для меня. Или как вы хотите, чтобы это выглядело? – vesan
yes ... синие линии (это пиксели за пределами текстуры) на краю треугольников появляются только когда я деформирую треугольники. – Thomas