Могу ли я получить доступ к частям файла.pod?

Я новичок в Cocos3D и у меня есть два вопроса, касающиеся частей 3D-модели.

Как я понял, файл.POD состоит из нескольких частей. В моем примере у меня есть 3D-автомобиль, в котором есть детали: - колесо - шина - класс (и т. Д.), И эти детали имеют подрешетки. Я вижу это, когда открываю файл pod с помощью PVRShaman.

Теперь мои вопросы:

  1. Могу ли я получить доступ к этим частям? Например, я хочу изменить цвет колеса. Могу ли я сделать это программно?

  2. Когда я нажимаю на деталь, я хочу знать, на какую часть я нажал. Например, я хочу нажать на колесо, и я знаю, что колесо было выбрано. Как я могу это сделать?

Большое спасибо!

Обновление: после второго предложения мой метод выглядит так:

-(void) nodeSelected: (CC3Node*) aNode byTouchEvent: (uint) touchType at: (CGPoint) touchPoint {
     NSLog(@"Node selected: %@", aNode.name);
     CC3Ray touchRay = [camera unprojectPoint: touchPoint];
     CC3NodePuncturingVisitor* puncturedNodes = [self nodesIntersectedByGlobalRay: touchRay];

     // The reported touched node may be a parent. We want to find the descendant node that
     // was actually pierced by the touch ray, so that we can attached a descriptor to it.
     CC3Node* localNode = puncturedNodes.closestPuncturedNode;

     NSLog(@"Node local: %@", localNode.name); 
}

2 ответа

Решение

Да, это определенно возможно.

Допустим, у вас есть файл POD автомобиля с дверями, шинами, рулем и т. Д.
Если вы хотите получить доступ к шине автомобиля в cocos3d, вам потребуется имя узла шины, это должно было быть установлено в вашем 3d-редакторе (maya, blender и т. Д.).

Допустим, вы использовали Maya и что вы установили имена всех четырех узлов шин:
L_back_tire, L_front_tire, R_back_tire, R_front_tire,

Тогда вы бы сделали это

//load car and all the child nodes of the car 
CC3PODResourceNode *car = [CC3PODResourceNode nodeFromFile:@"Car.pod"];
[self addChild:car];

//the car and all its child node (tires,doors,etc.) have been loaded into the scene
//so this is how you would fetch the left tire
CC3Node *leftTire = [car getNodeNamed:@"L_back_tire"];

//do more stuff with that tire her  
CC3Ray touchRay = [self.activeCamera unprojectPoint: touchPoint];
CC3NodePuncturingVisitor* puncturedNodes = [self nodesIntersectedByGlobalRay: touchRay];

// The reported touched node may be a parent. We want to find the descendant node that
// was actually pierced by the touch ray, so that we can attached a descriptor to it.
CC3Node* localNode = puncturedNodes.closestPuncturedNode;`

localNode будет узел, который был ближе всего к касанию.

Я получил это из проекта cocos3d DemoMashUp.

Я рекомендую вам открыть CC3DemoMashUpScene.m от Cocos3dDemoMashUp и посмотрите на метод -(void) markTouchPoint: (CGPoint) touchPoint on: (CC3Node*) aNode,
Это внизу файла.

Другие вопросы по тегам