将纹理设置为彩色 CC3MeshNode

Set texture to colored CC3MeshNode

首先我将 material 的颜色设置为节点:

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];

returns没有纹理的白色节点。

但是在开始时将纹理设置为节点有效:

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

知道如何在设置颜色后将纹理应用到节点吗?

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

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

Cocos3D selects 着色器,当你显式调用 selectShaders 方法时,或者第一次渲染节点时。一旦着色器最初被 selected,如果节点上的某些内容发生变化,它们不会自动重新selected。

您可以通过在您的节点上调用 removeShaders 然后调用 selectShaders 为您的节点创建 Cocos3D 到 select 新着色器再次,或者等到节点再次呈现。

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