2013-10-21 3 views
1

일부 기존 코드를 다시 작성하는 Qt5로 OpenGL을 배우고 있습니다. glSecondaryColorPointerEXT()를 사용합니다. 일반적으로 사용 가능한 비디오 카드에서 OpenGL에 대한 현재 지원을 확인한 후 OpenGL 기능에 액세스하기 위해 Qt5의 클래스 QOpenGLFunctions_3_2_Core을 선택했습니다.Qt5 OpenGL 3.3을 사용한 glSecondaryColorPointerEXT 대체

이 기능에 대한 OpenGL 3.2 버전 또는 대체 방법이 있습니까?

답변

2

OpenGL 3.2에서는 쉐이더를 사용하고 있어야하며,이 시점에서는 gl_SecondaryColor과 같은 레거시 기능을 피해야합니다. 셰이더 기반 엔진에서 2 차 색상을 적절하게 대체하는 것은 단순히 추가 일반 정점 속성입니다. OpenGL ES 2.0과 관련된 very similar question을 설명했는데, 제 대답이 도움이 될 수 있습니다.

즉, glVertexPointer (...), glColorPointer (...), glSecondaryColorPointer{EXT} (...)은 모두 OpenGL 3.0에서 사용되지 않습니다. 3.2 핵심 컨텍스트에서는이를 전혀 사용할 수 없습니다. 따라서 셰이더와 glVertexAttribPointer (...)을 배워야합니다.

같은 것을 보일 것이다 코어 GL 3.2에서 "차"와 "보조"버텍스 컬러를 사용하는 버텍스 쉐이더 : 당신은 사용 glVertexAttribPointer (...)를 사용하여 vtx_pos, vtx_color1 및 vtx_color2에 데이터를 제공 할

#version 150 core 

uniform mat4 mvp; 

in  vec4 vtx_pos; 
in  vec4 vtx_color1; 
in  vec4 vtx_color2; 

out  vec4 color; 

void main (void) { 
    gl_Position = mvp * vtx_pos; 
    color  = vtx_color1 * vtx_color2; // It is up to you to decide what to do 
             // with the primary and secondary 
             //  colors, this is just for show... 
} 

을 GLSL 버텍스 쉐이더에서 쿼리 된 속성 위치 (링크 후). 그리고이 모든 것이 완전히 glSecondaryColorPointerEXT (...)에 대한 필요성을 없애줍니다.

+0

즉, 레거시 코드를 번역하고 몇 가지 레거시 기능을 수정하는 대신 전체 내용을 다시 작성해야합니다. 대부분의 비디오 카드가 지원하지만 버전 4는 지원하지 않기 때문에 3.2 코어를 선택했습니다. 스릴 넘치는 대답은 아닙니다 ( – Jay

+0

@Jay : 3.2 코어 사용 안 함 :) 3.2 호환성 프로파일에서 대부분의 3.2 기능에 액세스 할 수 있습니다. 이렇게하면 쉐이더를 사용할 필요가 없습니다. 그것은 현대 OpenGL에 접근하는 가장 좋은 방법은 아닙니다.하지만 기존 코드베이스를 다루는 경우 이것이 유일한 전환 옵션 일 수 있습니다. 이것이 호환성 프로파일이 디자인 한 것이며 업그레이드 프로세스가 쉬워집니다. –

+0

@ 제이 : 저는 Qt 전문가가 아니지만 [QOpenGLFunctions_3_2_Compatibility'] (http://qt-project.org/doc/qt-5.1/qtgui/qopenglfunctions-3-3)를 찾으려면 몇 초 밖에 걸리지 않았습니다. 2-compatibility.html)을 참조하십시오. 이것은 당신이 사용하기를 원하는 것입니다. 이것을 사용하면 EXT 접미어가없는'glSecondaryColorPointer (...) '에 액세스 할 수 있습니다. OpenGL 3.2와 호환되며 확장이 필요 없기 때문입니다. –

관련 문제