2017-12-30 56 views
1

현대 OpenGL에서 QOpenGLFunctions를 사용하고 있습니다. 내 창문에 GL_POINTS를 그려야하지만 포인트 크기가 너무 작은 것 같습니다. 일반적으로, 당신은 그러나,이 코드는 QOpenGLFunctions 래퍼에 존재하지 않는Qt OpenGL 포인트 크기

glPointSize(4); 

과 점의 크기를 변경할 수 있습니다, 그래서 그들을 변경하는 방법을 모르겠습니다.

드로잉 GL_TRIANGLES는 나를 위해 완벽하게 작동합니다.

실세계 오브젝트의 점 구름을 표시하기 위해 점을 그려야합니다.

답변

2

QOpenGLFunctions을 사용하는 경우 실제로는 glPointSize()을 사용할 수 없습니다. 왜?

QOpenGLFunctions 클래스는 OpenGL ES 2.0 API에 대한 플랫폼 간 액세스를 제공합니다.

khronos.org에 교차 검사 :

+--------------+-----------------------------------------------------------------------+ 
| Function/ |        OpenGL Version       | 
| Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5 | 
+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ 
| glPointSize | v | v | v | v | v | v | v | v | v | v | v | v | 
+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ 

그래서, 그것의 OpenGL ES를위한 OpenGL을 지원하지만되지 않습니다.

옵션 1 : gl_PointSize

에서 OpenGL ES에서, 당신은 GLSL 셰이더 변수 gl_PointSize 대신 사용할 수 있습니다

은 두 가지 옵션이 있습니다.

는 (해당 문서를 검색하는 동안 나는이 "실수로"발견했다. –이 전에 알고도 이제까지 그것을 사용하지 않은 연결합니다.)

derhass이 OpenGL을 사용 될 수있는 추가 힌트를 제공 (비 ES)도 가능합니다 (glEnable(GL_PROGRAM_POINT_SIZE)). 활성화 정점 또는 기하 셰이더 활성화되면

GL_PROGRAM_POINT_SIZE

는 그 유래 포인트 크기 gl_PointSize를 내장 제 (잠재적으로 잘린) 셰이더에서 촬영 및 구현 종속 포인트 크기 범위에 클램프한다.

옵션 2 : 사용의 대안 QOpenGLFunctions_??? 클래스

대신 QOpenGLFunctions, 당신은 명시 적으로 비 휴대용 대안을 사용할 수있다 (전화를 지원하지 않아도 당신을 가정, embeddeds 또는이 같은) .

Qt doc의 개요. 나는 찾을 수 있었다 : QAbstractOpenGLFunctions.

+0

옵션 1에 추가 : 데스크톱 GL에서'gl_PointSize' 버텍스 쉐이더 출력을 사용하려면'glEnable (GL_PROGRAM_POINT_SIZE)'해야합니다. 그렇지 않으면 그 값은 무시되고'glPointSize'의 현재 설정된 포인트 크기 사용. – derhass

+0

@derhass 감사합니다. 나는 내 대답에이 힌트를 추가했다. – Scheff

+0

글쎄, 당신의 업데이트가 조금 혼란 스럽다고 생각합니다. 명시 적으로 OpenGL ES에 대해 먼저 이야기합니다.이 비트는 활성화 비트가없고 항상 활성화되어있는 것처럼 동작하므로 ES에서는 필요하지 않습니다. 바탕 화면 GL otoh에서 사용하도록 설정해야합니다. – derhass