OpenGL 4.0에서 날씨 시뮬레이션을 만들고 백그라운드에서 전체 화면 쿼드를 만들어 하늘을 만들려고합니다. 나는 꼭지점 셰이더가 4 개의 꼭지점을 생성하고 삼각형 줄무늬를 그려서 그렇게하려고합니다. 모든 것이 잘 컴파일되고 이전에 만든 모든 다른 객체를 볼 수 있지만 하늘은 볼 수 없습니다. 내가 도대체 뭘 잘못하고있는 겁니까?OpenGL에서 3D에서 2D로 전환
MAIN.CPP
GLint stage = glGetUniformLocation(myShader.Program, "stage");
//...
glBindVertexArray(FS); //has four coordinates (-1,-1,1) to (1,1,1) in buffer object
glUniform1i(stage, 1);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindVertexArray(0);
버텍스 쉐이더
uniform int stage;
void main()
{
if (stage==1)
{
gl_Position = vec4(position, 1.0f);
}
else
{
//...
}
}
조각 쉐이더
uniform int stage;
void main()
{
if (stage==1)
{ //placeholder gray colour so I can see the sky
color = vec4(0.5f, 0.5f, 0.5f, 1.0f);
}
else
{
//...
}
}
나는 나 또한해야 OpenGL에서 초보자이며 실제로 은이되어야하며 OpenGL 4.0 이상이어야합니다.
편집 : 문제가 무엇인지 알아 냈지만 해결 방법을 아직 모릅니다. 사각형이 존재하지만보기 및 투영 행렬을 곱하면 표시됩니다 (그러나 화면에 붙어 있지 않고 나머지 장면과 함께 회전합니다. 원하지 않습니다). 본질적으로, 필자는 어떻게 든 2D 또는 화면 공간으로 전환해야하지만 그렇지 않으면 사각형을 그리고 3D로 다시 전환하여 다른 모든 객체가 올바르게 작동하도록해야합니다. 방법?
정점 배열에서 'z'좌표를 '0'으로 설정해보십시오. 그 '1'은 원거리 클리핑 플레인에 정확히 나타나며 문제 일 수 있습니다. 또한 얼굴 도려 기능이 활성화 된 경우 평면 점이 반 시계 방향인지 확인하십시오. (깊이 버퍼 쓰기를 비활성화하고 * first *를 그릴 수도 있습니다!). –
쉐이더가 유니폼을 기반으로 두 가지 완전히 다른 작업을 한 번 수행하면, 실제로 가지고있는 것은 두 개의 쉐이더입니다. Ubershaders는 훌륭하지만 모든 종류의 렌더링 작업을 위해 극단적으로 갈 이유가 없습니다. –
@ NicolBolas 이미 'if'를 완전히 없애는 방법에 대한 아이디어가 이미 있지만, 작동시킬 때까지 추적하기가 쉽습니다. – Gweddry