1

我有一层。它具有特定的“z”值的孩子。例如

  • Child_1 z==-10.0f (CCSprite)
  • Child_2 z==-5.0f(我的自定义节点)
  • Child_3 z==-1.0f (CCSprite)

我的自定义节点(Child_2)在“draw”方法中直接调用 Opengl es,以通过着色器绘制纹理。

我坚持的问题:

如果我在这样的步骤中添加孩子,一切都很好:

[self addChild:Child_1 z:-10.0f tag:1];
[self addChild:Child_2 z:-5.0f tag:2];
[self addChild:Child_3 z:-1.0f tag:3];

如果我以这种方式添加它们:

[self addChild:Child_1 z:-10.0f tag:1];
[self addChild:Child_3 z:-1.0f tag:3];
[self addChild:Child_2 z:-5.0f tag:2];

Child_3 不可见,但必须可见。

如何使用 opengl es draw 调用来进行正确的绘图行为?

PS这是代码

[hm2 use];
glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices2 );
glEnableVertexAttribArray ( 0 );
glDrawArrays ( GL_TRIANGLES, 0, 3 );
4

1 回答 1

0

学习Cocos2D,谢谢!我发现了 ccDraw* 并发现没有带有 z 值的 gl*。我的错误是我使用了带有 z 值的 glDrawArrays。我为什么?因为我想要两个不同的纹理,其中一个与另一个重叠,但它们都应该在 Child_1 上方和 Child_3 后面。为了避免我坚持使用 glDrawArrays 的问题不应该使用 z 值。

为了避免这个问题并在 Child_2 内部制作具有不同深度的纹理,我想解决方案是创建新的两个节点,然后将它们作为子节点添加到 Child_2。

例如

@implementation Child_2

...

-(id) init
{
[self addChild:Child_2_1 z:-1.0f tag:0];
[self addChild:Child_2_2 z:-2.0f tag:1];

祝你好运!

于 2013-05-14T06:46:25.277 回答