2012-12-07 1 views
1

가 나는 것처럼 간단 할 거라 생각 했어요.월드 매트릭스를 사용하여 Vector3s를 올바르게 변환하려면 어떻게해야합니까?</p> <pre><code>Vector3 point = Vector3.Transform(originalPoint, worldMatrix); </code></pre> <p>그러나 분명히하지 ... 그것은 지점의 숫자가 수천에 촬영되어 있는지 확인하세요 :

기본적으로, 내가하려고하는 것은 충돌 시스템을 만드는 것입니다.이 시스템의 모든 두 점은 선이므로 기본적으로 선을 충돌시키고 싶습니다. 나는 선들이 월드 행렬에 따라 스케일, 회전, 번역 할 수 있기를 원한다. (충돌 선이 물체의 크기, 회전 및 평행선과 일치하도록)

나는 지금 몇 시간 씩 노력해 왔지만 그걸 알아낼 수 없습니다. 나는 View Matrix를 곱해 보았습니다. 그리고 그것이 내가 원하는 것에 가장 가깝다면, 두 세트의 숫자 사이를 전환하는 것처럼 보입니다! 그것은 하나의 세트와 함께 머물면 완벽 할 것입니다, 나는 그것이 계속 변화하는 이유를 모르겠다 ...

어떤 도움, 제발? :(

편집 :의 포인트 =의 originalpoints 먼저 어느 쪽이든 내가 지속적으로 업데이트 호출에 포인트를 업데이트하고있어, 조금을 추가하려면하지만 그건 아무것도 바꿀 것 나도 몰라

스티브.. H : 한 줄 그래서이 점 것 : 처음에는

originalPoint[0] = new Vector3(-42.5f, 0f, 0f); 
originalPoint[1] = new Vector3(42.5f, 0f, 0f); 
point[0] = Vector3.Transform(originalPoint[0], worldMatrix); 
point[1] = Vector3.Transform(originalPoint[1], worldMatrix);` 

point[0] & [1], 나는 내 선수도 몇 픽셀을 이동하는 순간을 ... originalPoint[0] & [1] 같은 동일하지만

point[0] = (-5782.5f, 0f, 0f) 
point[1] = (-5697.5, 0f, 0f) 
,617.

플레이어의 포지션은 -56.0f입니다. 객체가 그래픽 제대로 표시

_world = Matrix.Identity // ISROT 
     * Matrix.CreateScale(_scale) // This object's scale 
     * Matrix.CreateFromQuaternion(_rotation) // It's rotation 
     * Matrix.CreateTranslation(_offset) // The offset from the centre 
     * Matrix.CreateFromQuaternion(_orbitRotation) // It's orbit around an object 
     * _orbitObjectWorld // The object to base this world from 
     * Matrix.CreateTranslation(_position); // This object's position 

:로

worldMatrix 간다. 크기를 조정하고, 회전하고, 완벽하게 변환합니다. 그들은 궤도의 크기, 회전 및 변환도 따르지만 나는 아직 많이 궤도를 테스트하지 않았습니다. 더 연구하면, 원래의 포인트도 변경되는 ... :

나는

편집 ...이 충분한 정보를 바란다 | 왜 그런 일이 일어나는지 모르겠다. 그들은 ...

+2

정상 작동합니다. 당신의 세계 매트릭스가 맞습니까? – Donnie

+0

내가 사용하는 월드 매트릭스는 게임의 오브젝트 그래픽과 완전히 동일하며 모두 완벽하게 잘 표시됩니다. 크기 조정 및 회전은 모두 함께 작동합니다. 그것들은 제대로 작동하지 않는 것 같습니다. – VRock

+0

우리가 도울 수 있도록, 'point'&'originalPoint'와'worldMatrix'의 앞뒤의 구성 요소 값을 게시하십시오. –

답변

0

나는 내 문제를 알아 냈어 ... 새로운 점과 동일한있어 -_- 내가 선 포인트를 만든 후

그래서, 내가 마지막에 이렇게 :

originalLines = collisionLines; 

collisionLines & originalLines 모두 Vector3[] 배열입니다.

다른 사람과 똑같이 만들면 똑같아지고 변화하는 사람이 다른 사람과 바뀌는 것 같아요. 그건 내가 모르는 뭔가입니다.

그래서 나는이 기능을 만든 :

void CreateOriginalPoints() 
{ 
    _originalPoints = new Vector3[_collisionPoints.Length]; 

    for (int i = 0; i < _collisionPoints.Length; i++) 
     _originalPoints[i] = _collisionPoints[i]; 
} 

을 그리고 이것은 완전히 문제를 해결합니다.처음에는 왜이 문제가 발생했는지 지금 내게는 완전히 이해가됩니다.

고마워요 Donnie & 스티브 H. 두 분이 내 질문에 대답하지 않았지만 대답을 찾을 때까지 주위를 찌를 수 밖에 없었습니다.