Растяжение текстуры OpenGL

Я пытаюсь прикрепить текстуру к кубу. В настоящее время текстура растягивается.

Я знаю, что это проблема с моими текстурными координатами, но я не могу понять, что именно.

Для всех позиций вершин (x,y,z), Я сделал текстуру координаты (x,y).

float [] texCoords = new float [2*allPoints.size()];
int index= 0;
for(int i = 0; index< allPoints.size()-1; i=i+2){
           texCoords[i] = (float)allPoints.get(index).getX();
           texCoords[i+1] = (float)allPoints.get(index).getY();
           index++;
}

glTexParameters:

gl2.glTexParameteri( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER,GL.GL_NEAREST);
gl2.glTexParameteri( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,GL.GL_NEAREST);
gl2.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_WRAP_S,GL.GL_REPEAT);
gl2.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_WRAP_T,GL.GL_REPEAT);

Токовый выход:

1 ответ

Решение

Координаты текстуры в OpenGL масштабируются 0-1, если вы идете за эту границу, в соответствии с вашим параметром GL_REPEAT за GL_TEXTURE_WRAP_S а также GL_TEXTURE_WRAP_T,

Я не знаю об организации вашего allPoints список, но для куба у вас будет несколько уникальных текстурных координат для каждой вершины, поэтому вам нужно будет дублировать свои вершины. Если вы рисуете это вручную или думаете об этом, координата текстуры 1 на вершине также должно быть 0 для смежного лица.

Каждое лицо должно иметь следующие текстурные координаты:

(0, 1)--(1, 1)
|            |
|            |
|            |
(0, 0)--(1, 0)

Теперь подумайте о лицах на кубе, (1, 1) Дело в том, (0, 1) точка смежной грани. Дублируйте вершины, чтобы решить эту проблему.

Другие вопросы по тегам