나는 잠시 동안 인터넷에서 일부 알고리즘을 사용 해왔다. 나는 그 알고리즘을 작동시키지 못했기 때문에 여기서 질문을 던지고있다.방향 벡터에 대한 회전 행렬
점에서 속도 벡터 선을 렌더링하려고합니다. 선 그리기는 어렵지 않습니다. 길이가 velocity.length
인 선을 그래프에 삽입하기 만하면됩니다. 그러면 y 축 방향으로 점의 중심에 선이 놓입니다. 우리는 지금 이것을 적절한 회전과 번역으로 얻어야합니다.
번역 벡터를 계산하는 것이 어렵지 않습니다. 속도 벡터의 절반입니다. 그러나 회전 매트릭스는 나에게 너무도 모호합니다. 방향성 벡터 <x, y, z>
이 주어진다면 필요한 행렬은 무엇입니까?
편집 1 :보기; 당신이 그 질문을 이해하지 못한다면 아마 나에게 대답을 줄 수 없을 것입니다.
Vector3f translation = new Vector3f(); translation.scale(1f/2f, body.velocity); Vector3f vec_z = (Vector3f) body.velocity.clone(); vec_z.normalize(); Vector3f vec_y; // reference vector, will correct later if (vec_z.x == 0 && vec_z.z == 0) { vec_y = new Vector3f(-vec_z.y, 0f, 0f); // could be optimized } else { vec_y = new Vector3f(0f, 1f, 0f); } Vector3f vec_x = new Vector3f(); vec_x.cross(vec_y, vec_z); vec_z.normalize(); vec_y.cross(vec_x, vec_z); vec_y.normalize(); vec_y.negate(); Matrix3f rotation = new Matrix3f( vec_z.z, vec_z.x, vec_z.y, vec_x.z, vec_x.x, vec_x.y, vec_y.z, vec_y.x, vec_y.y ); arrowTransform3D.set(rotation, translation, 1f);
this article의 기반으로 : 여기
내가 현재 가지고있는 것입니다. 그리고 예, 표준 회전 행렬 (vec_x.x, vec_y.x 등)을 시도했지만 작동하지 않았습니다. 나는 효과가 있는지보기 위해 기둥과 행을 회전했습니다.편집 2 : 내 의견의 무례한 표현에 대한
죄송합니다.
그래서 두 가지 오류가 조합 된 것처럼 보입니다. 그 중 하나는 House MD가 지적했는데 (정말 나쁜 이름 지정 : vec_z
은 실제로 vec_y
입니다.) 다른 하나는 렌더링 엔진에 전달하기 전에 행렬을 뒤집을 필요가 있다는 것입니다. 그래서 수정 된 코드는 다음과 같습니다
Vector3f vec_y = (Vector3f) body.velocity.clone(); vec_y.normalize(); Vector3f vec_x; // reference vector, will correct later if (vec_y.x == 0 && vec_y.z == 0) { vec_x = new Vector3f(-vec_y.y, 0f, 0f); // could be optimized } else { vec_x = new Vector3f(0f, 1f, 0f); } Vector3f vec_z = new Vector3f(); vec_z.cross(vec_x, vec_y); vec_z.normalize(); vec_x.cross(vec_z, vec_y); vec_x.normalize(); vec_x.negate(); Matrix3f rotation = new Matrix3f( vec_x.x, vec_x.y, vec_x.z, vec_y.x, vec_y.y, vec_y.z, vec_z.x, vec_z.y, vec_z.z ); rotation.invert();
귀하의 질문은 거의 이해할 수 없으며, 특히 "속도 벡터의 절반"에 관한 부분입니다. –
왜 vec_z.normalize를 두 번 호출하고은 무엇입니까? –
원래 코드의 오타였습니다.실제로 최종 솔루션에 차이를 만들지는 않았지만 y 스케일링을 다소 펑키하게 만들었을 것입니다. :-) –