改变POD对象的纹理



我刚刚开始使用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文件?

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

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

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

CC3DemoMashUp包含了许多将纹理分配给模型的例子,以及对单个网格节点进行多次复制的例子。例如,在运行演示时尝试按grid按钮。

最新更新