2012-12-01 2 views
0

나는 RenderMonkey로 나온 파티클 시스템 예제를 시도하고 있으며 파티클 ​​효과를 위해 쿼드를 빌보드하기 위해 "뷰 역행렬"을 사용합니다."뷰 역행렬"을 계산하는 방법

RenderMonkey에서 모든 값을 볼 수는 있지만 "뷰 역행렬"을 계산하는 방법을 이해할 수 없습니다. 뷰 매트릭스의 역수 또는 뷰 투영법의 반대가 아닙니다. 여기

내가 아는 것입니다, 이름은 "변수 의미는"다음과 같습니다

ViewPosition: 
25.044189 105.753433 240.177200 1.0 

ViewProjection: 
1.663676 0.483806 -.351623 -8.377671 
-.790789 2.134270 -.804967 -12.567072 
-.084668 -.379295 -.922480 262.789917 
-.084583 -.378916 -.921558 263.527130 

View: 
1 0 0 0 
0 1 0 0 
0 0 1 -200 
0 0 0 1 

ViewTranspose: 
.913838 .148949 -.377775 0 
-.257723 .931662 -.256095 0 
.313814 .331391 .889776 0 
-.000004 -.000081 -200 1 

ViewInverse: <-This is what I want to calculate 
.941038 -.327556 .084583 25.044195 
.273659 .884044 .378917 105.753433 
-.198891 -.333427 .921557 240.177200 
0  0  0  1 

편집 정품 인증을하지 않는 내가, 이동할 때 Viewmatrix가 업데이트되지 않기 때문에, 나는 렌더에 버그가 있다고 생각 또 다른 효과와 원래로 돌아갑니다. 이 문서에서

:

가 V는 뷰 매트릭스와 X, Y 단지 회전부의 역수를 나타내는
V.a V.e V.i x 
V.b V.f V.j y 
V.c V.g V.k z 
0 0 0 1 

는, Z는 뷰 위치를 나타낸다 : http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/

는 I는 것을 믿는다 . 하지만 렌더링 원숭이 버그 때문에 내가 그것을 시도하기 전에는 확인할 수 없습니다.

답변

0

확인 됨, 게시판이 작동합니다. 여기 자바가 있습니다 :

/** 
* 
* @param viewMatrix 
*   4x4 (16 floats) 
* @param viewPosition 
*   3x1 (3 floats) 
* @param resultMatrix 
*   4x4 (16 floats) 
*/ 
public static void calculateViewInverse(float[] viewMatrix, 
     float[] viewPosition, float[] resultMatrix) { 
    // derived from: 
    // http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/ 
    // A rotation matrix is a 
    // "real special orthogonal matrix", which for our purposes means that 
    // its transpose is also its inverse. 
    resultMatrix[0] = viewMatrix[0]; 

    resultMatrix[1] = viewMatrix[4]; 
    resultMatrix[4] = viewMatrix[1]; 

    resultMatrix[2] = viewMatrix[8]; 
    resultMatrix[8] = viewMatrix[2]; 

    resultMatrix[5] = viewMatrix[5]; 

    resultMatrix[6] = viewMatrix[9]; 
    resultMatrix[9] = viewMatrix[6]; 

    resultMatrix[10] = viewMatrix[10]; 

    resultMatrix[3] = viewPosition[0]; 
    resultMatrix[7] = viewPosition[1]; 
    resultMatrix[11] = viewPosition[2]; 

    resultMatrix[12] = 0; 
    resultMatrix[13] = 0; 
    resultMatrix[14] = 0; 

    resultMatrix[15] = 1; 
} 
관련 문제