Блендер + OpenGL + Cocos2d - PullRequest
       15

Блендер + OpenGL + Cocos2d

1 голос
/ 19 января 2012

У меня странная проблема, с которой я не могу разобраться, и удивляюсь, видел ли кто-нибудь эту проблему раньше.По сути, я могу заставить мою модель блендера отображаться с текстурой, но она не отображает текстуру должным образом.Я сделал самую простую модель, какую только смогу, и вот что я получаю:

Я не могу публиковать изображения, поэтому вот ссылка через picasaweb, https://picasaweb.google.com/112176813871298741669/January192012?authuser=0&feat=directlink

Я используюcocos2d и рисование текстуры в методе рисования CCSprite следующим образом:

glBindTexture(GL_TEXTURE_2D, self.texture.name);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glVertexPointer(3, GL_FLOAT, sizeof(vertexDataTextured), &MeshVertexData[0].vertex);
glTexCoordPointer(2, GL_FLOAT, 0, &MeshVertexData[0].texCoord2);

Текстура загружается как CCTexture2D в методе init.

У кого-нибудь есть идеи?Почти уверен, что это текстурные координаты, но не может сработать, они выглядят правильно, посмотрите здесь данные:

{/*v:*/{1.000000, -0.000000, -1.000000}, /*n:*/{0.000000, 0.999969, 0.000000}, /*t:*/{0.000000, 0.000000}},
{/*v:*/{-1.000000, -0.000000, -1.000000}, /*n:*/{0.000000, 1.000000, 0.000000}, /*t:*/{1.000000, 0.000000}},
{/*v:*/{-1.000000, 0.000000, 1.000000}, /*n:*/{0.000000, 1.000000, 0.000000}, /*t:*/{1.000000, 1.000000}},
{/*v:*/{1.000000, -0.000000, -1.000000}, /*n:*/{0.000000, 0.999969, 0.000000}, /*t:*/{0.000000, 0.000000}},
{/*v:*/{-1.000000, 0.000000, 1.000000}, /*n:*/{0.000000, 1.000000, 0.000000}, /*t:*/{1.000000, 1.000000}},
{/*v:*/{1.000000, 0.000000, 1.000000}, /*n:*/{0.000000, 1.000000, 0.000000}, /*t:*/{0.000000, 1.000000}},

Итак, координаты текстуры:

 0.000000, 0.000000
 1.000000, 0.000000
 1.000000, 1.000000
 0.000000, 0.000000
 1.000000, 1.000000
 0.000000, 1.000000

НоПрисмотревшись к изображениям, я не уверен на 100%, что это координаты, может быть что-то с параметром openGL ....

1 Ответ

1 голос
/ 19 января 2012

Ваша проблема отрицательная. Координаты текстуры находятся в диапазоне 0-1, с числами, превышающими 1, что приводит к наложению текстуры на поли, и меньше, чем один, что означает использование только части текстуры.

Использование glTexCoordPointer(2, GL_FLOAT, 0, &MeshVertexData[0].texCoord2); означает, что вы не пропускаете данные вершин при получении координат текстуры, и поэтому используете некоторые данные вершин для координат текстуры. 0 должен быть шагом, необходимым для достижения следующего набора координат текстуры в данных.

Поскольку этот ответ был помечен как принятый, я отредактировал его для полноты, хотя, если @PeterT публикует свой комментарий в качестве ответа, его следует пометить как решение!

...