繁体   English   中英

在Cocos2d图形上直接绘制OpenGL ES 2.0图形

[英]Direct OpenGL ES 2.0 drawing over Cocos2d drawing

我有一层。 它使孩子具有特定的“ 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绘图调用实现适当的绘图行为?

PS这是代码

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

LearnCocos2D ,谢谢! 我发现了ccDraw *,发现没有z值的gl *。 我的错误是我将glDrawArrays与z值一起使用。 我为什么 因为我想要两个不同的纹理,其中一个与另一个重叠,但是它们都应该在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];

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM