2010-03-07 2 views
0

변형 (메시)에 대해서는 이해할 수없는 내용입니다. 첫 번째 (에서 (렌더링) 함수) 내 코드에서 봐 주시기 바랍니다 :활성 객체 간 전환 - 변환 /보기 이해

  foreach (GeometricObject obj in this.objects) 
      { 
       if (obj != this.activeObject) 
       { 
        obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Yellow, device); 
       } 
       else 
       { 
        obj.Mesh = MeshUtils.ChangeMeshColor(obj.Mesh, Color.Green, device); 
        obj.GeometryMatrix.Translate(this.move); 
       } 
       device.Transform.World = obj.GeometryMatrix; 
       obj.Mesh.DrawSubset(0); 
      } 

설명 : 나는 약간 노란색 gometriObjects (메쉬)와 하나의 녹색에 activeObject (나는으로 전환 할 수 있습니다 가지고 키보드 1-4). '이동'은 키보드에서 모든 화살표를 선택한 후에 변경되는 벡터입니다 (따라서 활성 객체를 이동할 수 있음).

그러나 내가 원하는대로 작동하지 않습니다. ... 내 객체 중 하나의 위치를 ​​변경하면 ... 다른 객체 (활성 객체 변경)로 전환 한 후 화면의 다른 뷰가 나타납니다 (모든 스위치가 끝난 후 모든 객체가 같은 위치에 있습니다). 화면;/). 왜 항상 같은 시각이 아닌가? 내 생각에 ... 같은 전망을 가지고 있기 때문에해야한다 :

  device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f, 2.0f, -25.0f), // Camera position 
        new Vector3(0.0f, 0.0f, 0.0f), // Look-at point 
        new Vector3(0.0f, 1.0f, 0.0f)); // Up vector 

그래서 내 문제는 무엇입니까? 어떤 아이디어 :)? 아하 ... 문제가 해당 changingMeshColor 함수와 연결되어 있지 않습니다 ... 확인했습니다.

obj.GeometryMatrix.Translate(this.move); 

에 :

obj.GeometryMatrix *= Matrix.Translation(this.move); 

...하지만 이유가

+0

나는 이것을 여러 번 읽었지만 여전히 당신의 질문이 무엇인지 모른다. 사실보기 매트릭스가 변경되지 않지만 오브젝트 위치를 변경할 수 있다는 것은 카메라가 주어진 오브젝트를보고 있지 않다는 것을 의미합니다. – Goz

답변

0

ECH는 .... 그것은 변경 한 후 작업을 시작? 나는 정말로 모른다 ... Translate()는 행렬을 바꿔야한다. (그랬던 것처럼)

+0

후자의 코드에서는 "이동"으로 정의 된 변환 행렬을 사용하여 행렬을 변환합니다. 전자에서는 번역 매트릭스를 작성하고 있습니다. 전자는 이미 매트릭스에 있던 것을 덮어 씁니다. – Goz