2015-07-10 57 views
0

首先我把材料颜色的节点:设置纹理有色CC3MeshNode

CC3MeshNode *node = [self.modelNode getMeshNodeNamed:nodeName]; 
CC3Material *material = [CC3Material material]; 
material.color = [CCColor colorWithUIColor:[UIColor colorWithHexString:color]]; 
node.material = material; 
node.visible = YES; 

后来我需要填写纹理这个节点。我不能

CC3Texture *texture = [CC3Texture textureFromFile:@"texture.png"]; 
material.texture = texture; 
node.material = material; 

CC3Texture *texture = [CC3Texture textureFromFile:@"texture.png"]; 
[node.material addTexture:texture] 

CC3Texture *texture = [CC3Texture textureFromFile:@"texture.png"]; 
node.material.color = [CCColor colorWithRed:1 green:1 blue:1 alpha:0]; 
[node.material addTexture:texture]; 

node.material = nil; 
CC3Material *material = [CC3Material material]; 
node.material = material; 
[node.material addTexture:texture]; 

回报白色节点,没有质感。

但在开始时设置纹理节点工程:

CC3MeshNode *node = [self.modelNode getMeshNodeNamed:nodeName]; 
CC3Texture *texture = [CC3Texture textureFromFile:@"texture.png"]; 
[node.material addTexture:texture]; 
node.visible = YES; 

任何想法,设置它的颜色后如何申请纹理节点?

回答

1

您可能正在使用不支持纹理的着色器。

如果您允许Cocos3D为您自动选择着色器,选择着色器时将考虑节点的某些方面。决定使用哪个着色器的一个主要方面是节点是否具有纹理。

Cocos3D在明确调用selectShaders方法或第一次渲染节点时选择着色器。一旦最初选择着色器,如果节点上的某些内容发生更改,则不会自动重新选择它们。

可以引起Cocos3D通过您的节点上调用removeShaders,然后要么再调用selectShaders,或等待,直到节点再次渲染选择适合您的节点的新的着色器。

一个替代方案是专门分配您自己的着色器,它可以容纳您将对节点进行的所有更改。

+0

谢谢比尔!删除和选择着色器正在工作。 – AlexanderZ

+0

可以请你举例指定自己的着色器,或者有创建着色器的方法,可以同时支持颜色和纹理以便稍后切换它们(显示一个或另一个)? – AlexanderZ

+0

'CC3DemoMashUp addFog'方法包含加载一对特定顶点和片段着色器并将其应用于特定节点的示例。 –