Opengl es 搅拌机&x2B;OpenGL&x2B;Cocos2d

Opengl es 搅拌机&x2B;OpenGL&x2B;Cocos2d,opengl-es,cocos2d-iphone,blender,Opengl Es,Cocos2d Iphone,Blender,我有一个奇怪的问题,我无法解决,不知道是否有人见过这个问题。基本上,我可以让我的搅拌机模型显示一个纹理,但它没有映射纹理正确。我已经做了我能做的最简单的模型,这就是我得到的: 我不能发布图片,这里有一个通过picasaweb的链接, 我正在使用cocos2d并在CCSprite绘制方法中绘制纹理,如下所示: glBindTexture(GL_TEXTURE_2D, self.texture.name); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE

我有一个奇怪的问题,我无法解决,不知道是否有人见过这个问题。基本上,我可以让我的搅拌机模型显示一个纹理,但它没有映射纹理正确。我已经做了我能做的最简单的模型,这就是我得到的:

我不能发布图片,这里有一个通过picasaweb的链接,

我正在使用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);
纹理在init方法中作为CCTexture2D加载

有人有什么想法吗?很确定这是纹理坐标,但无法计算出来,它们看起来不错,请参见此处获取数据:

{/*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参数的问题……

你的问题是负面的。纹理坐标在0-1范围内,大于1的数字会导致纹理在多边形上平铺,小于1表示仅使用纹理的一部分

使用
glTexCoordPointer(2,GL_FLOAT,0,&MeshVertexData[0].texCoord2)表示在检索纹理坐标时不跳过顶点数据,因此使用一些顶点数据作为纹理坐标。0应该是到达数据中下一组纹理坐标所需的步幅


由于这个答案被标记为已接受,我对其进行了编辑以确保其完整性,但如果@PeterT将其评论作为答案发布,则应将其标记为解决方案

你的问题是消极的。纹理坐标在0-1范围内,大于1的数字会导致纹理在多边形上平铺,小于1表示仅使用纹理的一部分

使用
glTexCoordPointer(2,GL_FLOAT,0,&MeshVertexData[0].texCoord2)表示在检索纹理坐标时不跳过顶点数据,因此使用一些顶点数据作为纹理坐标。0应该是到达数据中下一组纹理坐标所需的步幅


由于这个答案被标记为已接受,我对其进行了编辑以确保其完整性,但如果@PeterT将其评论作为答案发布,则应将其标记为解决方案

谢谢莱西,-1是顶点的一部分,纹理坐标在块的末尾,re/*t:/谢谢莱西,-1是顶点的一部分,纹理坐标在块的末尾,re/*t:/如果我正确理解了你的结构,那么它应该是
glTexCoordPointer(2,GL_FLOAT,sizeof(vertexDataTextured),&MeshVertexData[0].texCoord2)因为每个顶点之间的空间与每个tex坐标值之间的空间相同。。。。这很简单:),谢谢,显然太累了……如果我正确理解了你的结构,它应该是
glTexCoordPointer(2,GL_FLOAT,sizeof(vertexDataTextured),&MeshVertexData[0].texCoord2)因为每个顶点之间的空间与每个tex坐标值之间的空间相同。。。。很简单:),谢谢,显然太累了。。。。。。