Могу ли я получить доступ к частям файла.pod?
Я новичок в Cocos3D и у меня есть два вопроса, касающиеся частей 3D-модели.
Как я понял, файл.POD состоит из нескольких частей. В моем примере у меня есть 3D-автомобиль, в котором есть детали: - колесо - шина - класс (и т. Д.), И эти детали имеют подрешетки. Я вижу это, когда открываю файл pod с помощью PVRShaman.
Теперь мои вопросы:
Могу ли я получить доступ к этим частям? Например, я хочу изменить цвет колеса. Могу ли я сделать это программно?
Когда я нажимаю на деталь, я хочу знать, на какую часть я нажал. Например, я хочу нажать на колесо, и я знаю, что колесо было выбрано. Как я могу это сделать?
Большое спасибо!
Обновление: после второго предложения мой метод выглядит так:
-(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
,
Это внизу файла.