将纹理设置为彩色CC3MeshNode

时间:2015-07-10 10:43:28

标签: ios textures cocos3d

首先,我将材质的颜色设置为节点:

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 个答案:

答案 0 :(得分:1)

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

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

Cocos3D 在显式调用selectShaders方法或第一次呈现节点时选择着色器。一旦最初选择了着色器,如果节点上的某些内容发生更改,则不会自动重新选择这些着色器。

您可以通过在节点上调用removeShaders,然后再次调用selectShaders或等到节点呈现为止,使 Cocos3D 为您的节点选择新的着色器试。

另一种方法是专门分配您自己的着色器,这些着色器可以容纳您将对节点进行的所有更改。