2010-05-21 4 views
0

Я собираю текстуру из моего текстурного атласа в квадрат на кубе. По какой-то причине ось t инвертирована, а 0 находится сверху, а 1 - внизу. Есть идеи, почему это происходит?OpenGL-ES Texture Atlas. t axis инвертируется

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

float vertices[] = { 
    // Front face 
    -width, -height, depth, // 0 
    width, -height, depth, // 1 
    width, height, depth, // 2 
    -width, height, depth, // 3 

      // Back Face 
      width, -height, -depth, // 4 
      -width, -height, -depth, // 5 
      -width, height, -depth, // 6 
      width, height, -depth, // 7 

      // Left face 
      -width, -height, -depth, // 8 
      -width, -height, depth, // 9 
      -width, height, depth, // 10 
      -width, height, -depth, // 11 

      // Right face 
      width, -height, depth, // 12 
      width, -height, -depth, // 13 
      width, height, -depth, // 14 
      width, height, depth, // 15 

      // Top face 
      -width, height, depth, // 16 
      width, height, depth, // 17 
      width, height, -depth, // 18 
      -width, height, -depth, // 19 

      // Bottom face 
      -width, -height, -depth, // 20 
      width, -height, -depth, // 21 
      width, -height, depth, // 22 
      -width, -height, depth, // 23 
    }; 

    short indices[] = { 
     // Front // Back 
     0,1,2, 0,2,3, 4,5,6, 4,6,7, 
     // Left // Right 
     8,9,10, 8,10,11, 12,13,14, 12,14,15, 
     // Top // Bottom 
     16,17,18, 16,18,19, 20,21,22, 20,22,23, 
    }; 


    float textures[] = { 
    // Front 
    0.0f, 0.0f, 0.25f, 0.0f, 0.25f, 0.25f, 0.0f, 0.25f, 
     // Back 
    0.25f, 0.0f, 0.50f, 0.0f, 0.50f, 0.25f, 0.25f, 0.25f, 
     // Left 
    0.50f, 0.0f, 0.75f, 0.0f, 0.75f, 0.25f, 0.50f, 0.25f, 
     // Right 
    0.75f, 0.0f, 1f, 0.0f, 1f, 0.25f, 0.75f, 0.25f, 
     // Top 
    0.0f, 0.25f, 0.25f, 0.25f, 0.25f, 0.50f, 0.0f, 0.50f, 
     // Bottom 
    0.25f, 0.25f, 0.50f, 0.25f, 0.50f, 0.50f, 0.25f, 0.50f, 
    }; 

My texture - файл размером 256x256 .png, созданный в mspaint.

alt text http://www.freeimagehosting.net/uploads/9a87120b99.png

+0

Итак, что конкретно возникает у вас на вопрос? В вашем посте нет никаких вопросительных знаков. Ниже приведены общие советы OpenGL (я не работаю с opengl-es): Если вы используете индексированные примитивы, вам нужно всего 8 (не 24) вершин для создания куба. Использование более 8 сделает вещи излишне сложными. Если текстура перевернута, проблема может быть в коде загрузки текстуры (в том, что вызывает glBindTexture2D) - возможно, сначала загружается нижняя строка пикселя. Render/blit texture для отображения в 2D, чтобы убедиться, что это правильно. Убедитесь, что вы где-то не перевернули проекционное преобразование. – SigTerm

+0

Я использую 24 вершины по рекомендации этого вопроса. http://stackoverflow.com/questions/2854237/opengl-es-texture-map-all-faces-of-an-8-vertex-cube/2854444#2854444. Кроме того, я не совсем уверен, что вы подразумеваете под эффектом render/blit texture? – Feet

ответ

0

Таким образом, после еще больше поиска в Интернете, кажется, что OpenGL предполагает изображение начинается в нижней части строки развертки, а это означает, что вам нужно, чтобы инвертировать у/т координаты. Или используйте верхнее левое начало при просмотре исходного изображения.

Смежные вопросы