2012-12-26 5 views
0

나는 회전 행렬에 대한 좋은 기사 발견 : 나는 예상대로회전 행렬을 결합 하시겠습니까?

http://db-in.com/blog/2011/04/cameras-on-opengl-es-2-x/

모든 작품을하지만, :

세 행렬을 생성
void matrixRotateX(float degrees, mat4 matrix) 
void matrixRotateY(float degrees, mat4 matrix) 
void matrixRotateZ(float degrees, mat4 matrix) 

기사는 내가 둘을 곱해야 말한다, I 이 C++라면 matx * maty * matz을 사용할 수 있습니까? 하지만이 mat4은 단지 float[16]이며 결합 방법을 모르겠습니다.

+0

제공하신 링크가 작동하지 않습니다. – Femaref

+0

캐시 된 버전을 열 수 있습니까? http://webcache.googleusercontent.com/search?q=cache:db-in.com/blog/2011/04/cameras-on-opengl-es-2-x/ – steave

+0

나도 건너오고 싶지 않아. 무딘, 그러나 : 당신은 기본적인 선형 대수학의 단단한 이해, 즉 벡터와 행렬로 작업하는 방법없이 3D 프로그래밍을 고집해서는 안됩니다. 선형 대수학에 대한 일부 학부 수학 교과서는 컴퓨터 그래픽 수학 입문서뿐만 아니라 읽는 목록에 있어야합니다. – datenwolf

답변

1

Matrices 기사에서 참조하는 장에는 행렬 곱셈에 대한 공식이 있습니다. 또한 행렬 곱셈 (및 기타 멋진 항목)에 연산자 *을 사용하려면 glm을 확인할 수 있습니다. 내 의견

0

, 당신은이 artical을 읽어야 할 사람 :

OpenGL transformation

철저하게 이해하는 것은 복잡한 작업을 위해 중요하다.

0

기능 "matrixMultiply는()"를 참조 문서에서, 당신을 위해 행렬 곱셈을 수행하고 사용중인 특수 1 차원 매트릭스 형 mat4을 담당 : 2 차원 배열을 사용하여

void matrixMultiply(mat4 m1, mat4 m2, mat4 result) 
{ 
    // First Column 
    result[0] = m1[0]*m2[0] + m1[4]*m2[1] + m1[8]*m2[2] + m1[12]*m2[3]; 
    result[1] = m1[1]*m2[0] + m1[5]*m2[1] + m1[9]*m2[2] + m1[13]*m2[3]; 
    result[2] = m1[2]*m2[0] + m1[6]*m2[1] + m1[10]*m2[2] + m1[14]*m2[3]; 
    result[3] = m1[3]*m2[0] + m1[7]*m2[1] + m1[11]*m2[2] + m1[15]*m2[3]; 
  
    // Second Column 
    result[4] = m1[0]*m2[4] + m1[4]*m2[5] + m1[8]*m2[6] + m1[12]*m2[7]; 
    result[5] = m1[1]*m2[4] + m1[5]*m2[5] + m1[9]*m2[6] + m1[13]*m2[7]; 
    result[6] = m1[2]*m2[4] + m1[6]*m2[5] + m1[10]*m2[6] + m1[14]*m2[7]; 
    result[7] = m1[3]*m2[4] + m1[7]*m2[5] + m1[11]*m2[6] + m1[15]*m2[7]; 
  
    // Third Column 
    result[8] = m1[0]*m2[8] + m1[4]*m2[9] + m1[8]*m2[10] + m1[12]*m2[11]; 
    result[9] = m1[1]*m2[8] + m1[5]*m2[9] + m1[9]*m2[10] + m1[13]*m2[11]; 
    result[10] = m1[2]*m2[8] + m1[6]*m2[9] + m1[10]*m2[10] + m1[14]*m2[11]; 
    result[11] = m1[3]*m2[8] + m1[7]*m2[9] + m1[11]*m2[10] + m1[15]*m2[11]; 
  
    // Fourth Column 
    result[12] = m1[0]*m2[12] + m1[4]*m2[13] + m1[8]*m2[14] + m1[12]*m2[15]; 
    result[13] = m1[1]*m2[12] + m1[5]*m2[13] + m1[9]*m2[14] + m1[13]*m2[15]; 
    result[14] = m1[2]*m2[12] + m1[6]*m2[13] + m1[10]*m2[14] + m1[14]*m2[15]; 
    result[15] = m1[3]*m2[12] + m1[7]*m2[13] + m1[11]*m2[14] + m1[15]*m2[15]; 
} 

행렬 곱셈을 수행 할 수 있습니다 세 개의 중첩 된 for-loops에서. mat4 유형에 대한 비슷한 해결책이 연습 문제로 남아 있습니다. 승인?

관련 문제