1
45 단일 지점에서 OpenGL 투영을 이해하려고합니다. 컨텍스트 렌더링에 QGLWidget을 사용하고 프로젝션 매트릭스에 QMatrix4x4를 사용하고 있습니다. 여기서 연신 기능을OpenGL ortho, 원근 투영 및 절두체 투영
attribute vec4 vPosition;
uniform mat4 projection;
uniform mat4 modelView;
void main()
{
gl_Position = projection* vPosition;
}
void OpenGLView::Draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(programObject);
glViewport(0, 0, width(), height());
qreal aspect = (qreal)800/((qreal)600);
const qreal zNear = 3.0f, zFar = 7.0f, fov = 45.0f;
QMatrix4x4 projection;
projection.setToIdentity();
projection.ortho(-1.0f,1.0f,-1.0f,1.0f,-20.0f,20.0f);
// projection.frustum(-1.0f,1.0f,-1.0f,1.0f,-20.0f,20.0f);
// projection.perspective(fov,aspect,zNear, zFar);
position.setToIdentity();
position.translate(0.0f, 0.0f, -5.0f);
position.rotate(0,0,0, 0);
QMatrix4x4 mvpMatrix = projection * position;
for (int r=0; r<4; r++)
for (int c=0; c<4; c++)
tempMat[r][c] = mvpMatrix.constData()[ r*4 + c ];
glUniformMatrix4fv(projection, 1, GL_FALSE, (float*)&tempMat[0][0]);
//Draw point at 0,0
GLfloat f_RefPoint[2];
glUniform4f(color,1, 0,1,1);
glPointSize(15);
f_RefPoint[0] = 0;
f_RefPoint[1] = 0;
glEnableVertexAttribArray(vertexLoc);
glVertexAttribPointer(vertexLoc, 2, GL_FLOAT, 0, 0, f_RefPoint);
glDrawArrays (GL_POINTS, 0, 1);
}
관측이다
1) projection.ortho: 윈도우 상이한 z- 축 값을 가지는 점을 번역에 렌더링 포인트 효과
2) 돌기가없는 .frustum : 요점은 단지 포인트가 translate (0.0f, 0.0f, -20.0f)로 변환됩니다.
3) projection.perspective : 포인트가 화면에 나타나지 않습니다.
누군가가 나를 이해하는 데 도움이 될 수 있습니까?
Matic에 감사드립니다. –