OpenGL 원점을 화면 왼쪽 상단으로 변경할 때 무엇을 걱정해야합니까?


11

자체 교육을 위해 SDL / OpenGL을 사용하여 C ++로 2D 플랫 포머 엔진을 작성하고 있습니다. 처음에는 sdltutorials.com 및 lazyfoo.net의 자습서를 사용하여 순수한 SDL로 시작했지만 이제는 SDL을 사용하여 OpenGL 렌더링 컨텍스트를 만든 다음 OpenGL 함수로 렌더링합니다 (특히 즉각적인 모드이지만 VAO / VBO에 대해 배우고 있습니다) ). 인터페이스, 오디오 등에 대해서만 SDL을 사용하고 있습니다.

SDL은 화면 왼쪽 상단에 원점이 있고 양의 y 축이 아래쪽을 가리키는 좌표계를 사용합니다. 이를 반영하기 위해 OpenGL에서 직교 투영을 쉽게 설정할 수 있습니다.

텍스처 좌표는 0에서 1 사이의 값을 가진 오른쪽 시스템이라는 것을 알고 있습니다-렌더링하기 전에 텍스처를 세로로 뒤집기 (로드하기 전에 파일을 뒤집기)하면 올바르게 렌더링되는 텍스처가 생성됩니다 ... 그리면 괜찮습니다. 전체 텍스처이지만 궁극적으로 타일셋을 사용하고 문제를 상상할 수 있습니다.

이 작업을 수행 할 때 렌더링 측면에서 고려해야 할 사항은 무엇입니까?

누구든지 조언이 있거나 스스로 해본 적이 있고 미래의 함정을 지적 할 수 있다면 좋을 것입니다. 그러나 실제로 어떤 생각이라도 감사 할 것입니다.


1
SDL을 사용하여 렌더링하고 있습니까 (SDL의 블리 팅 함수에서와 같이) SDL을 사용하여 OpenGL 렌더링 컨텍스트를 작성한 다음 OpenGL 함수를 사용하여 렌더링합니까?
Nicol Bolas

1
SDL을 사용하여 OpenGL 렌더링 컨텍스트를 만들고 OpenGL 함수를 사용하여 렌더링하고 있습니다. 나는 이것을 질문에서 명확히 할 것이다.
파생물

1
물리 시스템을 사용하려는 경우 사용중인 좌표계 (손 또는 왼손, Y-UP 또는 Y-DOWN)를 더 잘보고 동일하게 사용하십시오. 물론 당신은 중력을 뒤집는 것과 같은 일을 할 수는 있지만, 텅을 더 쉽게 만들기 위해 같은 것을 사용하려고합니다.
구스타보 메이 엘

답변:


8

"이 작업을 수행 할 때 렌더링 측면에서 무엇을 고려해야합니까?" -별로 요 좌표계는 단단하고 빠른 규칙이 아니라 관습 일 뿐이며, 이는 완벽하게 합법적이고 유효한 일입니다. 당신이 당신의 자신의 사용법에 일관성이 있고 모든 것이 잘 작동하는지 확인하십시오.


큰! 직감 자기 일관성은 내가 걱정해야 할 유일한 것이었지만 이것은 새로운 영역입니다.
파생 상품

1
1996 년에이 오래된 퀘이크가이 작업을 다시 한 번 해냈으며 제대로 작동했습니다.
Maximus Minimus

5

OpenGL을 사용하여 2D로 작업 할 때 종종 왼쪽 상단을 원점으로 사용합니다. 이것은 다음과 같이 할 수 있습니다 :

glOrtho(0,      // left
        width,  // right
        height, // bottom
        0,      // top
        0,      // zNear
        1       // zFar
        );

그러나 원점을 왼쪽 상단으로 변경할 때 약간의 함정이 있습니다.

glScissor()클리핑에 사용되는 한 가지 함정 은 항상 왼쪽 아래 좌표를 사용합니다.

서명은 다음과 같습니다.

void glScissor( GLint x, GLint y, GLsizei width, GLsizei height )

위치를 x, y지정 왼쪽 가위 상자의 모서리를.

보다 일반적으로, 창 좌표 에서 작동하는 모든 함수는 모두 왼쪽 아래를 원점으로 사용합니다. 이 같은 기능을 포함하는 gluProject, gluUnProject, glCopyPixels

그러나 일부 함수 는 포지셔닝에 glDrawPixels사용 glRasterPos하는 것과 같은 객체 이며 (즉, 변형 된) 좌표를glRasterPos 사용 합니다 .

당신이 리눅스에서 실행하고 사용하는 방법을 알고 있다면 man, 당신은 여기에 OpenGL을 맨 페이지의 사본을 잡아 할 수 있습니다 : ftp://ftp.sgi.com/sgi/opengl/doc/ 내가 그들에게 실제 시간 -을 찾아 절약기.

또한 텍스처를 "로드하기 전에 파일 뒤집기"라고 말합니다. 필요하지 않습니다. 이미지를로드 할 때 뒤집지 않고 렌더링 할 때 텍스처 좌표를 뒤집어 1.0에서 0.0으로 이동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.