Я создаю кубоид в OpenGL, используя массивы Vertex, но моя текстура, кажется, немного ошиблась.
Вот мой код:
float halfW = getW() / 2;
float halfH = getH() / 2;
GLubyte myIndices[]={
1, 0, 2, //front
2, 0, 3,
4, 5, 7, //back
7, 5, 6,
0, 4, 3, //left
3, 4, 7,
5, 1, 6, //right
6, 1, 2,
7, 6, 3, //up
3, 6, 2,
1, 0, 5, //down
5, 0, 4
};
float myVertices[] = {
-halfW, -halfH, -halfW, // Vertex #0
halfW, -halfH, -halfW, // Vertex #1
halfW, halfH, -halfW, // Vertex #2
-halfW, halfH, -halfW, // Vertex #3
-halfW, -halfH, halfW, // Vertex #4
halfW, -halfH, halfW, // Vertex #5
halfW, halfH, halfW, // Vertex #6
-halfW, halfH, halfW // Vertex #7
};
float myTexCoords[]= {
1.0, 1.0, //0
0.0, 1.0, //1
0.0, 0.0, //2
1.0, 0.0, //3
0.0, 0.0, //4
1.0, 0.0, //5
1.0, 1.0, //6
0.0, 1.0 //7
};
Вот проблема:
Передняя и задняя часть отрисовываются нормально, но верхняя, нижняя, левая и правая стороны перекошены.
Куда я иду не так?
Ваши координаты текстуры и внешний вид индексов вершин отключены. Поскольку вершина # 2 (с координатами halfW, halfH, -halfW) имеет текстурную координату (0, 0), вершина # 6 (с координатами halfW, halfH, halfW) не должна иметь текстурную координату (1, 1). То, что он делает, это помещает вершины с текстурными координатами (0, 0) и (1, 1) вдоль одного и того же ребра, что приводит к проблемам.
Проблема с кубом заключается в том, что одной 2D-координаты текстуры на вершину недостаточно для отображения текстуры на куб, как это (как бы вы ни пытались их поставить, у вас будут странные стороны).
Решение состоит в том, чтобы либо добавить дополнительные треугольники, чтобы ни одна сторона не разделяла вершины с другой стороной, либо заглянуть в Кубические карты где вы указываете координаты текстуры в 3D (так же, как вершины). Я бы предложил использовать Cube Maps, так как это позволяет избежать добавления избыточных вершин.
Других решений пока нет …