2012-07-19 4 views
1

lwjgl Matrix4f 클래스를 사용하여 정점을 회전하려고합니다.변환 행렬을 사용하여 정점 회전

float rotY = (float) Math.toRadians(180); 

    Matrix4f transMat = new Matrix4f(); 
    transMat.rotate(rotY, new Vector3f(0.0f, 1.0f, 0.0f)); 
    transMat.translate(new Vector3f(1.0f, 0.0f, 0.0f)); 

    Vector4f vecPosMod = new Vector4f(1.0f, 0.0f, 0.0f, 1.0f); 
    Matrix4f.transform(transMat, vecPosMod, vecPosMod); 

는 그것은 Vector3f(1.0f, 0.0f, 0.0f) 180도 회전해야하지만 불행히도 모든 계산 후 vecPosMod가 (-2.0, 0.0, 1.7484555E-7, 1.0)이다 : 나는이 코드를 시도했다. 나는 그것이 (-1.0, 0.0, 0.0, 1.0)이되기를 원한다. 방법?

답변

1

회전 후에 X 축을 따라 행렬에 평행 이동을 적용합니다. 이것은 회전이 수행 된 후 X 축을 따라 위치 단위를 변환하여 -1.0 대신 -2.0을 생성합니다.

이 시도 :

(-1.0 0.0 8.742278E-8 1.0) 

은 8.742278E-8은 아마 회전이의 수레 변환을 적용한 후 당신이 얻을 수있는 0.0에 가까운입니다 :

float rotY = (float) Math.toRadians(180); 

    Matrix4f transMat = new Matrix4f(); 
    transMat.rotate(rotY, new Vector3f(0.0f, 1.0f, 0.0f)); 

    Vector4f vecPosMod = new Vector4f(1.0f, 0.0f, 0.0f, 1.0f); 
    Matrix4f.transform(transMat, vecPosMod, vecPosMod); 

그것은 다음과 같은 결과를 제공 자바.

관련 문제