2012-03-16 4 views
3

iOS에서 GLKView를 사용하여 렌더링되는 OpenGL ES 게임을 만들었습니다. 또한 GLKView 위에 위치하는 몇 가지 사용자 지정 UIButton을 추가했습니다. 렌더링에서 나는 GL_POINTS 렌더링 모드를 사용하여 몇 개의 별을 그립니다. 시뮬레이터에서는 모든 것이 잘 렌더링되지만 장치는 끔찍한 것처럼 보입니다.iPhone/iPad 기기에서 OpenGL 렌더링 GL_POINTS가 끔찍합니다 (하지만 시뮬레이터에서는 완벽하게 보입니다).

올바른 렌더링 된 이미지를 얻으려면 설정해야 할 수도있는 장치를 찾아 구성해야하는 사람에 대한 조언이 있는지 궁금합니다. 여기

결과의 이미지의 커플 :

시뮬레이터

Screenshot of game running on iPhone simulator.

장치

enter image description here

(사용자 정의 버튼의 배율 차이점을 무시하십시오. 장치 스크린 샷은 iPad에서 찍은 것입니다.)

+0

렌더링하기 전에'glClearColor()'와'glClear()'를 사용하여 드로잉 공간을 초기화하고 있습니까? 그렇지 않은 경우 이전에 있던 이슈를 가져올 수 있습니다. –

+0

헤이 브래드, 이걸 두 번 확인해 봤는데 내 glClearColor/glClear가 호출되고 올바른 일을하는 것처럼 보입니다. 나는이 문제가 이것과 관련이 있다면 시뮬레이터에서도 같은 결과를 보았을 것이라고 생각하지만, 제안에 감사드립니다. - 확인해야 할 것이 었습니다! –

답변

3

OpenGL ES의 쉐이더에서 gl_PointSize을 설정하지 않으면 문제가 발생하는 것으로 나타났습니다. 이 스크린 샷은 사실이 솔루션으로 나를 이끌었습니다. 별 (렌더링 모드로 GL_POINTS을 사용하여 그려 짐)이 시뮬레이터보다 장치에서 너무 근본적으로 잘못되어 있기 때문입니다.

아마도 OpenGL의 데스크톱 버전의 경우 포인트 크기는 glPointSize 기능을 사용하여 기본값으로 설정됩니다 (GL_VERTEX_PROGRAM_POINT_SIZE이 활성화되어 있지 않은 경우). OpenGL ES에서는 glPointSize 함수가 없으므로 포인트 크기 값은 항상 버텍스 셰이더에 내장 된 gl_PointSize 변수를 사용하여 지정해야합니다.

+0

GLKit에서 GLKBaseEffect를 사용하는 경우 어떻게해야합니까? – Magnus

+0

나는 할 수 있다고 생각지 않는다 - 당신은 셰이더를 써야만한다. –

+1

'GLKBaseEffect'를 피하십시오. 고정 함수 파이프 라인을 모방하려고합니다. 셰이더가 어떻게 작동하는지 직접 배우고 직접 사용합니다. 솔직하게 왜 그들이'GLKBaseEffect' 또는 그 파생 클래스를 만들 었는지 모르겠습니다. – bobobobo

관련 문제