首先,我将材质的颜色设置为节点:
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;
知道如何在设置颜色之后将纹理应用于节点吗?
答案 0 :(得分:1)
您可能正在使用不支持纹理的着色器。
如果您允许 Cocos3D 为您自动选择着色器,则在选择着色器时会考虑节点的某些方面。决定使用哪些着色器的主要方面之一是节点是否具有纹理。
Cocos3D 在显式调用selectShaders
方法或第一次呈现节点时选择着色器。一旦最初选择了着色器,如果节点上的某些内容发生更改,则不会自动重新选择这些着色器。
您可以通过在节点上调用removeShaders
,然后再次调用selectShaders
或等到节点呈现为止,使 Cocos3D 为您的节点选择新的着色器试。
另一种方法是专门分配您自己的着色器,这些着色器可以容纳您将对节点进行的所有更改。