2013-04-24 2 views
0

투시 분할 현상에 새로운 점.OpenGL의 투시 투영 행렬

void MatrixPersp(Mat4& matrix,const float fovy, const float aspect, const float zNear, const float zFar) 
    { 
     float sine, cotangent, deltaZ; 
     float radians; 

     for(int i=0;i<4;i++) 
      for(int j=0;j<4;j++) 
      { 
       if(i==j) 
        matrix[i][j]=1.0; 
       else 
        matrix[i][j]=0.0; 
      } 

     radians = fovy/2 * GLES_Pi/180; 

     deltaZ = zFar - zNear; 
     sine = (float) sin(radians); 

     cotangent = (float) cos(radians)/sine; 

     matrix[0][0] = cotangent/aspect; 
     matrix[1][1] = cotangent; 
     matrix[2][2] = -(zFar + zNear)/deltaZ; 
     matrix[2][3] = -1; 
     matrix[3][2] = -2 * zNear * zFar/deltaZ; 
     matrix[3][3] = 0; 

     return;  
    } 

void Render() 
{ 
    GLfloat vertices[] = 
    { 
     -0.8,0.6,1.0,1.0, 
     -0.8,0.2,1.0,1.0, 
     0.2,0.2,1.0,1.0, 
     0.2,0.6,1.0,1.0 
    }; 

    MatrixPersp(perspective,90.0,aspect,2.0,100.0); 

    glUniformMatrix4fv(glGetUniformLocation(program_object,"MVPMatrix"), 1, GL_FALSE, (GLfloat*)perspective); 

    glClearDepth(1.0f); 
    glClear(GL_DEPTH_BUFFER_BIT); 

    glEnable(GL_DEPTH_TEST); 
    glDepthFunc(GL_LEQUAL); 


glDrawElements(); 

}

버텍스 쉐이더는 다음과 같습니다 : 나는 다음과 같은 코드를 사용하여 3D 공간에서 간단한 사각형을 렌더링하고

#version 150 

in vec4 position; 

uniform mat4 MVPMatrix; 

void main() 
{ 
     gl_Position = position*MVPMatrix; 

} 

문제는 여기에, 모든 네 개의 꼭지점이 같은 Z가있을 때 -value 아무것도 렌더링되지 않습니다. 반면에 두 개의 꼭지점이 z 좌표로 -1을 갖는다면 투영 행렬은 잘 동작합니다. 여기에 무슨 문제가 있는지 잘 모르겠습니다.

답변

2
glUniformMatrix4fv(glGetUniformLocation(program_object,"MVPMatrix"), 1, GL_FALSE, (GLfloat*)perspective); 

이 줄은 행렬이 열 우선 순위에 있음을 나타냅니다. 이것은 정확히 Mat4 정의 방법에 따라 MatrixPersp 함수가 행렬을 계산하는 방식으로 확인됩니다. MVPMatrix가 제대로 열 중요한 경우

gl_Position = position*MVPMatrix; 

,이 곱셈 거꾸로 입니다. 위치가 오른쪽으로 이동합니다.

+0

: 오른쪽의 시도 위치. 성공하지 못했습니다. – maverick9888

+2

@ maverick9888 뭔가가 바뀌어야합니다. * 같은 오류가 발생 했습니까? 아니면 새로운 것이 발생 했습니까? – Hydronium

+0

@Hydronium : 불행히도 셰이더 컴파일에 오류가 없습니다. 새로운 것은 없었습니다 :-( – maverick9888