2011-11-07 2 views
-1

나는 좀 더 익숙해지기 위해 다른 OpenGL 3+ 코드를보고 돌아 다니고 있습니다. 또한 튜토리얼을 따르고 OpenGL로 코드를 작성해 봅니다.누군가 나를 위해이 코드를 명확히 할 수 있습니까

그래서 구를 그리는 코드를 발견했습니다. 일부 정점은 아래의 발견, 그리고 여기 결과입니다됩니다

. 
.. 
... 
Sphere vertices are: >> Vertice 10281: X>0.000747, Y>-0.000275, Z>1.000000! 
Sphere vertices are: >> Vertice 10282: X>0.000769, Y>-0.000208, Z>1.000000! 
Sphere vertices are: >> Vertice 10283: X>0.084840, Y>-0.023011, Z>0.996129! 
Sphere vertices are: >> Vertice 10284: X>0.084840, Y>-0.023011, Z>0.996129! 
Sphere vertices are: >> Vertice 10285: X>0.000769, Y>-0.000208, Z>1.000000! 
Sphere vertices are: >> Vertice 10286: X>0.000784, Y>-0.000141, Z>1.000000! 
Sphere vertices are: >> Vertice 10287: X>0.086522, Y>-0.015533, Z>0.996129! 
Sphere vertices are: >> Vertice 10288: X>0.086522, Y>-0.015533, Z>0.996129! 
Sphere vertices are: >> Vertice 10289: X>0.000784, Y>-0.000141, Z>1.000000! 
Sphere vertices are: >> Vertice 10290: X>0.000793, Y>-0.000072, Z>1.000000! 
Sphere vertices are: >> Vertice 10291: X>0.087546, Y>-0.007936, Z>0.996129! 
... 
.. 
. 

는 이제 다운로드 한 코드가 화면의 중앙에 구형을 그립니다. 그것은 glm 패키지를 사용합니다. 내가 얻지 못하는 것은 "X = 0.087546"또는 "Z = 0.996129"가 픽셀로 변환되어 화면 축에 그려지는 방법입니다.

//PROJECTION 
glm::mat4 Projection = glm::perspective(45.0f, 1.0f, 0.1f, 100.0f); 
angle = (GLfloat) (i/50 % 360); //to dia gia nan pio argo 
//printf("Angle: >>>> %f, \n", angle); 

//VIEW 
glm::mat4 View = glm::mat4(1.); 
View = glm::translate(View, glm::vec3(0.f, 0.f, -5.0f)); // x, y, z position ? 
//View = glm::rotate(View, angle * -1.0f, glm::vec3(1.f, 0.f, 0.f)); 
View = glm::rotate(View, angle * 0.5f, glm::vec3(0.f, 1.f, 0.f)); 
//View = glm::rotate(View, angle * 0.5f, glm::vec3(0.f, 0.f, 1.f)); 

//MODEL 
glm::mat4 Model = glm::mat4(1.0); 
glm::mat4 MVP = Projection * View * Model; 
glUniformMatrix4fv(glGetUniformLocation(shaderprogram, "mvpmatrix"), 1, GL_FALSE, glm::value_ptr(MVP)); 

가 생성되는 창은 600 개 * 600 픽셀의 윈도우이다 : 여기

는 GLM 코드이다. 그러면 X와 Z는 어떻게 그 좌표로 매핑됩니까?

+1

"X, Z가 어떻게 좌표로 매핑 되나요?" 기본적으로 "OpenGL에서 버텍스를 렌더링하는 방법"을 묻습니다. 이것이 어떻게 작동하는지에 대한 답변을 작성할 수는 있지만, [나는 이미 그것을 훨씬 더 자세하게 해냈다.] (http://www.arcsynthesis.org/gltut/Basics/Intro%20Graphics%20and%20Rendering.html) –

답변

1

픽셀로 변환되어 화면의 축에 그려집니다.

변환 파이프 라인을 거침으로써. 정점 좌표에 Modelview 행렬을 곱하고 그 결과 눈 위치 좌표에 투영 행렬을 곱하고 프리미티브를 클리핑 한 다음 원근감 나누기를 적용하여 NDC를 산출합니다. 그것들은 뷰포트에 매핑됩니다.

http://www.opengl.org/wiki/Vertex_Transformation

0

그냥 (-1, -1, -1)을 (1,1,1)으로 경계 큐브에 일을지도 보여 주었다 변형에. 이것은 "정규화 된 장치 좌표"입니다. 정규화 된 장치 좌표에서 X와 Y는 픽셀에 매핑되며 뷰포트의 한쪽 모서리는 (-1, -1)이고 반대쪽 모서리는 (1,1)입니다. Z는 깊이 버퍼의 값으로 매핑합니다. -1은 가까운 클립 평면이고 1은 먼 클립 평면입니다.

그러면 glViewport는 정규화 된 장치 좌표 인 (X, Y) = (-1, -1) .. (1,1)을 뷰포트의 실제 픽셀 좌표 인 (0,0) .. (599,599)에 매핑합니다. 너의 경우.

관련 문제