2017-11-11 2 views
-1

수식을 줄 수 있습니까? 로컬 좌표에서 정점의 위치를 ​​나타내는 vector3d가 있습니다.이 정점이 지오메트리의 일부인 객체의 회전 및 위치를 나타내는 Matrix3d가 있습니다. 어떻게이 정점의 로컬 위치를 세계의 좌표?로컬 좌표를 세계 좌표로 변환하는 수식

+0

여러분이 필요하다고 생각하는 것은 ** 꼭지점 변환을 나타내는 Matrix3D **입니다. 그러면 컨테이너의 ** Matrix3D **에 https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/를 곱하면됩니다. geom/Matrix3D.html # append() 어느 것이 append이고 어느 것이 appendee인지는 중요하다고 생각하지만, 단지 2 가지 옵션 만 가지고 있으므로 여러분이 해보지 않아도됩니다. – Organis

+0

그 행렬이 전역 좌표에 있다면, 그 정점의 전역 좌표를 얻으려면 행렬을 뒤집을 필요가 있습니다. 그 결과를 여러분의 vector2d에 곱하십시오. 'matrix3D :: invert()'결과가 틀렸다면, 당신이 망쳤다는 것을 확인하십시오. – Vesper

+0

"꼭지점 변환을 나타내는 Matrix3D가 필요하다고 생각합니다."-이 matrix3d를 어떻게 만듭니 까? 이렇게 : m = new matrix3d; m..prependTranslation (v.x, v.y, v.z); 또는 이와 유사하게 m.position.x = v.x; m.position.y = v.y; m.position.z = v.z; ? – danielkotzer

답변

0

이제는 작동 중입니다. 원래의 vertex3d를 유지하는 데 문제가있었습니다. 그리고이 순서로 작업했는데 작동합니다. 대단히 감사합니다. 여기 코드가 있습니다. m2.invert()를 사용해야했습니다. 내가 처음에했던 것처럼

var m3d:Matrix3D = new Matrix3D();  
obj.Transform.copyToMatrix3D(m3d); 
var m2:Matrix3D = new Matrix3D(); 
m2.append(m3d); 
m2.invert(); 
m2.prependTranslation(obj.BoundingBox[i].x,obj.BoundingBox[i].y,obj.BoundingBox[i].z); 
obj.BoundingBox[i] = new Vector3D(m2.position.x,m2.position.y,m2.position.z); 

사실 확인도했다 : 여기에 코드입니다 (I 누락 ​​된

var m3d:Matrix3D = new Matrix3D();  
obj.Transform.copyToMatrix3D(m3d); 
m3d.invert(); 
obj.BoundingBox[i] = m3d.transformVector(obj.BoundingBox[i]); 

있는 유일한 방법은 반전되었다); 그리고 나는 그것이 무엇인지 알았 으면 좋겠다. 어떤 사람들은 객체 행렬과 다음에 세계 행렬을 추가하거나 추가해야한다고 말했다. 그러나 세계 행렬을 추가하면 문제가 발생하는 반면, 거꾸로 하다(); 좋았지 만, 왜?

베스퍼, 당신은 그것을 제안 하나, 감사합니다,하지만 왜?

왜 나는 경험이 많은 사람이 내게 답을 주었다 : 카메라가 모든 것을 보여 주며, 왼쪽으로 갈 때 세상이 올바르게 움직이는 것처럼 보이므로 반전해야합니다.

관련 문제