У меня есть следующий код, чтобы попытаться нарисовать прямоугольник с помощью вершинных массивов:OpenGL координаты текстуры быть искажены при использовании вершинных массивов
glEnableClientState(GL_NORMAL_ARRAY);
glNormalPointer(GL_FLOAT, 0, &mNorms[ 0 ]);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, &mTexCrds[ 0 ]);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, &mVtxs[ 0 ]);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
Цель состоит в том, чтобы нарисовать простой прямоугольник с помощью треугольника полосы, используя угловой шаблон Far Left, Near Left, Far Right, Near Right. Переменные значения следующие:
/* far left near left far right near right */ mNorms { 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0 } mTexCrds { 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0 } mVtxs { -25.0, 0.0, -100.0, -25.0, 0.0, -50.0, 25.0, 0.0, -100.0, 25.0, 0.0, -50.0 }
Моя текстура - это черная плитка с тонкой синей рамкой вокруг всех краев. Когда прямоугольник рисуется с помощью вышеуказанных инструкций, он полностью синий:
bad.jpg http://www.graemecentralstation.com/img/bad.jpg
Очевидно, что с учетом приведенных выше текстурные координаты Я ожидаю моего 2D текстуры, чтобы быть полностью видимым.
Если я заменяю glDrawArrays() с вручную вызова, используя одни и те же данные массива, как это ...
glBegin(GL_TRIANGLE_STRIP);
{
for(int i = 0; i < 4; ++i)
{
glNormal3fv(&mNorms[ i * 3 ]);
glTexCoord2fv(&mTexCrds[ i * 2 ]);
glVertex3fv(&mVtxs[ i * 3 ]);
}
}
glEnd();
... то прямоугольник рисуется с картой полная текстура изображения видимого, как я ожидал:
good.jpg http://www.graemecentralstation.com/img/good.jpg
Любая идея, почему glDrawArrays() будет искажать мою текстуру так плохо?
IMO, если вы столкнулись со всей проблемой настройки 'glVertexPointer' и т. Д., Вы можете просто использовать объекты буфера вершин. Скорее всего, это будет лучше. –