2012-01-19 11 views
1

私は奇妙な問題を抱えています。基本的には、ブレンダーモデルをテクスチャで表示することはできますが、テクスチャを適切にマッピングすることはできません。私はcocos2dを使用してテクスチャを描いてるBlender + OpenGL + Cocos2d

私は画像を投稿することはできませんので、ここでPicasaウェブ経由のリンクです、 https://picasaweb.google.com/112176813871298741669/January192012?authuser=0&feat=directlink

:私は私ができる最も簡単なモデルを作りました、これは私が得るものです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); 

テクスチャがinitメソッド内CCTexture2Dとしてロードされます。

他のアイデアはありますか?そのテクスチャcoordsのかなり確信して、それをうまくすることはできません、彼らは右見て、データについてはこちらを参照してください。

{/*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 

しかしに密接に見ています画像私はそれが座標です、多分何かには、OpenGLのパラメータと確かではないよ....

+1

あなたの構造を正しく理解していれば、各頂点間のスペースは各tex-coordの値と同じであるため、 'glTexCoordPointer(2、GL_FLOAT、sizeof(vertexDataTextured)、&MeshVertexData [0] .texCoord2) – PeterT

+0

くそ....それは簡単でした:)、ありがとう、明らかにあまりにも疲れて...... – Darren

答えて

1

あなたの問題は否定的なものです。テクスチャ座標は0〜1の範囲にあり、1より大きい数字はポリゴン間のテクスチャのタイル化をもたらし、テクスチャの割合のみが使用されることを意味する1未満のテクスチャをもたらす。

を使用するglTexCoordPointer(2, GL_FLOAT, 0, &MeshVertexData[0].texCoord2);を使用すると、テクスチャ座標を取得するときに頂点データをスキップしないので、テクスチャ座標の一部の頂点データを使用することを意味します。 0は、データの次のテクスチャ座標セットに到達するために必要なストライドである必要があります。

@PeterTが答えとしてコメントを投稿した場合、解決策としてマークする必要がありますが、この回答には受け入れ済みとマークされています。

+0

ありがとう、1は頂点の一部です、テクスチャ座標はブロックの最後にあります。 t:* / – Darren

関連する問題