Растяжение текстуры 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)
точка смежной грани. Дублируйте вершины, чтобы решить эту проблему.