1

私は Cocos3D の初心者で、3D モデルのパーツに関して 2 つの質問があります。

私が理解したように、.POD ファイルはいくつかの部分で構成されています。私の例では、パーツを持つ 3D 車があります: - ホイール - タイヤ - クラス (など) で、これらのパーツにはサブメッシュがあります。PVRShaman でポッド ファイルを開くと、これが表示されます。

今私の質問:

  1. これらの部品にアクセスすることは可能ですか? たとえば、ホイールの色を変更したい。プログラムでこれを行うことはできますか?

  2. パーツをタップするとき、どこのパーツをタップしたか知りたい。たとえば、ホイールをタップしたいのですが、ホイールが選択されていることがわかっています。これどうやってするの?

どうもありがとうございました!

更新: 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); 
}
4

2 に答える 2

1

はい、これは間違いなく可能です。

ドア、タイヤ、ハンドルなどを備えた車の POD ファイルがあると
します。cocos3d で車のタイヤにアクセスする場合は、タイヤ ノードの名前が必要です。これは、 3D エディタ (マヤ、ブレンダーなど)。Maya を使用し、4 つのタイヤ ノード名すべてを、、、 に

設定したとします。
L_back_tireL_front_tireR_back_tireR_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  
于 2013-09-15T11:19:03.913 に答える
0
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.mCocos3dDemoMashUp から開いて、メソッドを確認することをお勧めします-(void) markTouchPoint: (CGPoint) touchPoint on: (CC3Node*) aNode
ファイルの一番下にあります。

于 2013-09-15T15:10:11.593 に答える