2012-04-27 8 views
1

나는 C의 OpenGL을에서 현재 행렬을 가지고 있고, 나는 다음과 같은 코드를 적용하는 경우 :OpenGL은 행렬 곱셈

glMultMatrixf(M); 
    glMultMatrixf(M2); 

무엇 현재 변환 행렬이 생겼를? 빨간 책에서는 glMultMatrix * (M)를 사용하면 다음과 같이 설명합니다 : CM. M (M2v) 여기서 M은 M보다 먼저 적용됩니다.이 경우 M은 왼쪽 피연산자이지만 이전 M에서는 오른쪽 피연산자입니다.

답변

4

glLoadIdentity(); 
glMultMatrixf(M1); 
glMultMatrixf(M2); 
glMultMatrixf(M3); 

그러면 결과 행렬은 M = M1 * M2 * M3;

당신이 정점이에 v을 적용하면, 그것은과 같이 곱 : v' = M*v = M1*M2*M3*v

내가 정말 혼란을하지만 이해가 안 돼요, 당신이 언급하고있는 '전자의 경우는'무엇인가?

+0

수학 게시와 컴퓨터 과학 매트릭스 계산 사이에 약간의 혼란이있는 것처럼 질문을 게시하는 OP가 들립니다. – ksming

+0

그래서 M2가 곱 해지기 전에 M3 * v가 발생한다고 가정합니다. 내가 왜 매트릭스 곱셈이 적용될 때마다 설명 할 때 Multymatrix * f (M)에 M (CM)을 곱하면 현재 매트릭스 C에 M이 곱 해져서 오른쪽 피연산자가 아닌 오른쪽 피연산자로 적용되는 이유를 알 수 없다. , (CM) –

+3

에서와 같이 @SamAdams : 오른쪽에 * 적용됩니다. 모든 * 이전 * 행렬의 오른쪽에 적용됩니다. 이전의 모든 행렬 명령으로 구성된 현재 행렬에 주어진 행렬이 곱해지고 주어진 행렬이 오른쪽에 있습니다. –