OpenGL을 사용하여 개체를 그리는 방법을 이해하려고합니다. 질문은 간단하지만 여전히 어디서나 명확한 대답을 찾을 수 없습니다 (또는 완전히 바보입니다 :)). 이 문제를 설명하겠습니다.예기치 않은 z 축 방향 (보기가없고 투영 행렬이 없음)
1) 화면에 2 개의 삼각형을 넣기 만하면됩니다. 삼각형 '는 다음과 같이 좌표 (x, y, z, w)이다 :
Triag1 = { {0, 0, -0.5, 1} , {1, 0, -0.5, 1}, {0, 1, -0.5, 1} } // a bigger one
Triag2 = { {0, 0, 0.5, 1} , {0.5, 0, 0.5, 1}, {0, 0.5, 0.5, 1} } // a smaller one
2) 사용이나 뷰 있지 않다 없으며 투영
3) I가 통과하고있어 변형'디폴트 '색상 각 삼각형을 꼭지점 속성 중 하나로서 선택하고, 다양한 삼각형을 사용하여 프래그먼트 쉐이더로 간단하게 건너 뛸 수 있습니다. Triag1이 파란색이고 Triag2가 빨간색입니다
그물을 다루는 모든 자습서에서는 OpenGL에서 오른손 좌표계를 사용하고 Z 축은 '화면 밖'을 가리킨다 고합니다. 그래서, 내 개체의 각 z 좌표를 고려할 때, 그 뒤에 작은 빨간 삼각형과 큰 파란색 삼각형이 보일 것으로 기대합니다. 어떻게 그런 일이 일어나지 않는지. 큰 굵은 파란색 삼각형 만 볼 수 있습니다.
내 삼각형의 각 z 좌표를 바꿔 넣으면 (Triag1은 양의 z 좌표를 얻습니다. Triag2는 음의 z 좌표를 얻음) 예상 한 것을 봅니다. 그러나. 즉, 어떻게 든 Z 축은 화면 밖으로 빠져 나오지 않는다는 것을 의미합니다.
더 많은 경험이있는 사람이 내가 놓친 기본면을 설명해주세요.
P. GLUT, GLM 없음, 다양한 OpenGL 행렬 설정을 요구하지 않음. 전용 "GPU에 정점을 통과 - 쉐이더 프로그램을 활성화 - 것은 그리"그물 주위
derhass, 답장을 보내 주셔서 감사합니다! –
GLUT, GLM 및 기타 확장 기능을 사용하지 않는다는 점을 잊어 버렸습니다 (GLX는 제외하지만 3d와 아무런 관련이 없음). 좀 더 깊은 이해를 위해 모든 것을 '손으로'하려고 노력하고 싶습니다. glOrtho()와 glFrustum()에 대한 호출도 없었습니다. 그냥 원시 "GPU에 버텍스를 전달 - 쉐이더 프로그램을 가능하게 - 그립니다". 그래서 내가 제대로 설정했다면 아무것도 설정하지 않으면 NDC 공간이 기본적으로 왼손잡이입니까? –
@PeterGlushkov : 예. NDC 공간에서 z = -1은 근거리 평면이고 z = 1은 원거리 평면입니다. – derhass