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

Я создаю прямоугольный параллелепипед в OpenGL, используя массивы вершин, но моя текстура, похоже, немного неверна.

Вот мой код:

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
};

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

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

Где я ошибаюсь?


person Split    schedule 20.04.2013    source источник
comment
Старый OpenGL или новый (шейдерный) OpenGL? А что такое halfW?   -  person Some programmer dude    schedule 21.04.2013
comment
Извините, не знаю, новый это или старый, я новичок в OpenGL, как я могу проверить?   -  person Split    schedule 21.04.2013


Ответы (1)


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

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

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

person Victor Sand    schedule 20.04.2013