Где я ошибся с моим кубоидом?

Я создаю кубоид в 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
};

Вот проблема:
введите описание изображения здесь

Передняя и задняя часть отрисовываются нормально, но верхняя, нижняя, левая и правая стороны перекошены.

Куда я иду не так?

0

Решение

Ваши координаты текстуры и внешний вид индексов вершин отключены. Поскольку вершина # 2 (с координатами halfW, halfH, -halfW) имеет текстурную координату (0, 0), вершина # 6 (с координатами halfW, halfH, halfW) не должна иметь текстурную координату (1, 1). То, что он делает, это помещает вершины с текстурными координатами (0, 0) и (1, 1) вдоль одного и того же ребра, что приводит к проблемам.

Проблема с кубом заключается в том, что одной 2D-координаты текстуры на вершину недостаточно для отображения текстуры на куб, как это (как бы вы ни пытались их поставить, у вас будут странные стороны).

Решение состоит в том, чтобы либо добавить дополнительные треугольники, чтобы ни одна сторона не разделяла вершины с другой стороной, либо заглянуть в Кубические карты где вы указываете координаты текстуры в 3D (так же, как вершины). Я бы предложил использовать Cube Maps, так как это позволяет избежать добавления избыточных вершин.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]