을 렌더링하는 동안 :예기치 않은 비행 상자 사진에서 빠른 샘플 그래서
이 정상입니다 :
이는 X 또는 Y 축 중 하나에 180도 회전 이후
왜 이런 일이 발생하는지 전혀 알 수 없습니다. 간단한 Bullet 물리 장면을 렌더링하기 위해 OpenTK를 사용하고 있습니다. 코드는 직설적이며 매트릭스가 처리되는 방식에 문제가있는 것처럼 보입니다. 내가 그것을 분해 시도했습니다
GL.PushMatrix();
GL.MultMatrix(Body.MotionState.WorldTransform.ToArray());
GL.Scale(HalfX * 2, HalfY * 2, HalfZ * 2);
GL.Color4(Color4.Blue);
GL.Begin(PrimitiveType.Lines);
GL.Vertex3(0, 0, 0);
GL.Vertex3(0, 0, 10);
GL.End();
GL.Color4(Color4.Yellow);
GL.Begin(PrimitiveType.Lines);
GL.Vertex3(0, 0, 0);
GL.Vertex3(0, 10, 0);
GL.End();
GL.Color4(Color4.Green);
GL.Begin(PrimitiveType.Lines);
GL.Vertex3(0, 0, 0);
GL.Vertex3(10, 0, 0);
GL.End();
if (Body.ActivationState == ActivationState.ActiveTag)
{
GL.Color4(Color4.Blue);
}
else if (Mass == 0)
{
GL.Color4(Color4.Red);
}
else
{
GL.Color4(Color4.Green);
}
model.Draw();
GL.PopMatrix();
구성 요소이다 : 그것은 렌더링 솔직 코드의 당신이 회전을 추가 할 때 변환 벡터 괜찮, 스케일링은 Z 축에 회전, 괜찮 잘 나타납니다 ... 그건 X 또는 Y 축에서 비행을 시작합니다. 나는 콘솔 아웃풋을 가지고있다. 박스는 두 이미지의 Z 축에 정확히 6.9999에있다.
어디로 잘못 가고 있습니까? 내가 뭘 놓치고 있니? 어떻게 해결할 수 있습니까?!
WorldTransform을 계산하는 코드를 표시 할 수 있습니까? (버그와는 무관하지만'GL.Begin()','GL.End()'를 한 번만 호출하면됩니다.) –
글 머리 기호 물리 엔진에서 계산할 수 없습니다. 나는 그것이 정확하다는 것을 추측 할 것이고, 그것은 중요한 엔진이다. 분해 된 매트릭스 코드를 보여 주면 도움이 될까요? (IE, 벡터의 각 구성 요소를 가져 와서 별도로 적용한 코드)? – mcmonkey4eva
그래서 Bullet은 행렬을 계산하고 그것을 GL을 통해 OpenGL에 직접 전달합니다. GL.MultMatrix()가 맞습니까? 이 경우 OpenTK는 행렬을 수정하지 않고 드라이버에 직접 전달하기 만하므로 Bullet과 OpenGL 간의 불일치가 될 수 있습니다. 분해 된 행렬 조작을 표시하면 잘못된 점을 이해하는 데 도움이 될 수 있습니다. –