2013-02-14 3 views
0

XNA에서 모델의 내부 메쉬 벡터 3 위치 (글로벌 좌표)를 어떻게 찾을 수 있습니까?XNA에서 모델 메쉬의 위치

나는 블렌더에이라는 간단한 램프 게시물 의 모델을 만들었습니다. 빛이 있어야하는 곳에서 단일 버티스을 자체 개체로 지정하고 "Light"라는 이름으로 위치에 일반적인 조명이 램프 게시물에 있어야합니다.

내 XNA 프로그램에서 모델의 위치에 부동 소수점 광원을 배치하고 싶습니다. 이름으로 메쉬를 찾을 수 있습니다. 그러나 "Light"메쉬의 Vector3 위치이 필요합니다.

답변

1

모델이 메쉬/본 계층 구조로 설정되는 방법에 따라 다릅니다. 궁극적으로, 라이트 (전구) 행렬에 모체를 곱한 후 모체로 곱한 다음 모눈에 루트로 곱한 다음 결과의 번역 속성을 취합니다. 이는이 sence하게 Model.CopyAbsoluteBoneTransformsTo (매트릭스 [])

Matrix[] transforms = new Matrix[SimpleLampPostModel.Bones.Count]; 
SimpleLampPostModel.CopyAbsoluteBoneTransformsTo(transforms); 

Vector3 lightPosition = transforms[SimpleLampPostModel.Meshes["light"].parentBone.Index].Translation; 
lightPosition += modelWorld.Translation;// if the model is located in some arbitrary location in your 3d 
             // world as represented by a world matrix (modelWorld) 
+0

좋아을,라고 할 방법 내장, 난 그냥 그것을 확실히 [영상 LINK] (HTTP 사랑 받고 시도했다있다 : //s12.postimage.org/wm3fqi1i5/close.png). 메쉬의 위치를 ​​확인했으며 올바른 위치에 있습니다. 차이점에 대한 특별한 이유가 있습니까?/내 코드를 게시 /받은 편지함에 대한 어떤 방법이 있습니까? – JoshuaaM

+0

당신은 pastebin에 그것을 붙여 넣을 수 있습니다. 거기서 볼 수 있습니다. 가능하면 ASCII 형식으로 fbx를 내 보낸 다음 붙여 넣으십시오. http://pastebin.com/ –

+0

좋아요, 모델은 7MB이므로 pastebit (500kb의 모자)에 맞지 않았습니다. 그래서 그것의 첫 번째 섹션에 던져 드리겠습니다 [Pastebin Model] (http://pastebin.com/tMjNdLFA) 여기 제가 특히 사용하는 두 가지 클래스가 있습니다. [CModel] (http://pastebin.com/YXWeCCCL) 및 일반 [Game1] (http://pastebin.com/nDRqQLi6). 당신이 알게 되듯이, 내 빛은 "Light_down_255_255_255"라고 불리우는 데, 이것은 내가 빛을 만들기 위해 프로그램에서 파싱 할 것이기 때문입니다 (아래로 향하게하고, 흰색이됩니다) 지금까지 도와 줘서 고맙습니다. – JoshuaaM