【问题标题】:Change texture of POD object更改 POD 对象的纹理
【发布时间】:2014-07-18 05:47:59
【问题描述】:

我刚刚开始使用 cocos3d,我正在制作一个基本的纸牌游戏。我已经有了带有纹理的模型,但我不知道如何指定给定对象或节点使用的纹理。我已经使用基本的 cocos3d 模板加载和渲染纹理模型。这是我的设置代码:

//Init
for ( int i = 0; i < 5; ++i )
{
    cardNodes[i] = [CC3PODResourceNode nodeFromFile: @"Card.pod"];
    [self addChild:cardNodes[i]];
    cardNodes[i].location = cc3v ( ( i - 2)*7.5, 0, 0);
    cardNodes[i].rotation = cc3v ( 0,-90,180);
}

-(void) startGame
{
    srand(0);

    //Draw 5 random cards
    unsigned int cards[5] = {0};
    for ( unsigned int i = 0; i < 5; ++i )
    {
        unsigned int card = ( rand() % 52 ) + 1;
        for ( int other = i-1; other >= 0; --other )
        {
            if ( cards[other] == card )
            {
                card = ( rand() % 52 ) + 1;
                other = i-1;
            }
        }
        cards[i] = card;
        //Set texture of card node[i] somehow here?
    }
}

那么如何更改正在使用的纹理,这样我就不必为每张卡创建新的 pod 文件了?

【问题讨论】:

    标签: objective-c cocos3d


    【解决方案1】:

    重复加载 POD 文件不会在内存中创建多个副本。这是因为底层CC3PODResource 被缓存(故意),因此您最终将在每个数组元素中引用相同的模型。

    相反,您应该加载卡 POD 一次,然后使用标准 copy 方法创建它的副本。这是一个有效的副本。它复制可配置的属性,但重用相同的底层网格顶点。然后,您可以单独定位、着色和纹理卡片副本。

    要将纹理分配给单个卡,只需使用texture 属性。

    CC3DemoMashUp 包含许多将纹理分配给模型以及制作单个网格节点的多个副本的示例。例如,在运行演示时尝试按下网格按钮。

    【讨论】:

    • CC3PODResourceNode 上似乎没有 texture 属性
    • 同样,一旦我可以找到texture 属性,如何将实际图像加载到纹理对象中并分配它?
    • texture 属性在 CC3Node 类上,它是 CC3PODResourceNode 的父类。但是,除非您想为 POD 中的所有节点设置相同的纹理,否则您应该使用 getMeshNodeNamed: 从您的 CC3PODResourceNode 检索单个 CC3MeshNodes 并在那里设置 texture 属性。您可以使用CC3Texture textureFromFile: 方法或其他方法加载纹理。正如我所提到的,请查看CC3DemoMashUpScene 实现。它包含几乎所有 Cocos3D 功能的代码示例,包括我在这里提到的所有功能。
    • 为了进一步澄清,texture属性在CC3MeshNode上,否则这个答案是正确的
    • 只是为了澄清你的澄清:^),正如我所提到的,texture 属性是在父类CC3Node 上定义和实现的,它传播到所有后代节点,设置相同的纹理在他们所有人身上。它定义在CC3MeshNode 子类上,因为纹理实际上是在CC3MeshNodes 上生效的。许多节点属性(例如纹理、颜色、切换等)都以这种方式运行。虽然它们对CC3MeshNode 实例生效,但它们是在CC3Node 上定义的,因此它们可用于更改后代节点的整个程序集的特性。
    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多