【问题标题】:Blender + OpenGL + Cocos2dBlender + OpenGL + Cocos2d
【发布时间】:2012-02-14 01:34:55
【问题描述】:

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

我无法发布图片,所以这里有一个来自 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);

纹理在 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 参数有关....

【问题讨论】:

  • 如果我正确理解你的结构而不是glTexCoordPointer(2, GL_FLOAT, sizeof(vertexDataTextured), &MeshVertexData[0].texCoord2);,因为每个顶点之间的空间与每个 tex-coord 值之间的空间相同
  • 该死的......这很容易:),谢谢,显然太累了......

标签: opengl-es cocos2d-iphone blender


【解决方案1】:

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

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

因为这个答案被标记为接受,我已经编辑它的完整性,但如果@PeterT 将他的评论作为答案发布,那么他的应该被标记为解决方案!

【讨论】:

  • 谢谢 Lacey,-1 是顶点的一部分,纹理坐标在块的末尾,re /*t:*/
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2012-04-03
  • 2011-03-17
相关资源
最近更新 更多