2012-09-15 3 views
0

Qt Creator에서 OpenGL을 처음 사용하기 때문에 다양한 튜토리얼에서 얻은 정보를 가지고 놀고 있습니다. 그러나 OpenGL 함수 정의가 실제로 어디에 있는지 알 수 없었습니다!Qt를 사용할 때 OpenGL 모듈의 위치

나는이 같은 qmake를 파일에 OpenGL을 모듈을 연결하면 생각했다 :

QT += core gui opengl 

는 OpenGL 물건이 포함되었지만, 나는 내가 QGLWidget에 대해 읽고 있던 때 다시 생각했다.

그럼 OpenGL API는 내 코드에 어디에 포함됩니까?

P. 내 OS는 Windows 7이고 내 그래픽 카드는 AMD Radeon HD 6250 그래픽입니다.

+0

귀하의 OS 및 GPU에 대한 정보를 추가하십시오. 관련성이있다. –

+0

자동 완성을위한 선언이나 Qt에서 사용할 수있는 OpenGL을 배우기위한 선언이 필요합니까? –

답변

3

QT 변수는 프로젝트에 Qt 모듈을 포함시키는 데 사용됩니다. OpenGL을 추가하면 OpenGL을 사용하는 Qt 코드가 포함 된 Qt OpenGL 모듈이 추가됩니다 (링크도 포함). Qt의 OpenGL 모듈 (libQtOpenGL.so)이 다양한 OpenGL 라이브러리를 링크하는 것보다 링크를 의미하는 "include"를 사용하는 경우. 또한 Qt 모듈에는 OpenGL 헤더가 포함 된 Qt OpenGL 모듈의 헤더가 포함되어 있습니다.

OpenGL 헤더와 OpenGL 라이브러리는 OS에서 해당 위치를 유지하는 모든 위치에 있습니다. 플랫폼에 맞는 Qt mkspec으로 인해 프로젝트의 위치를 ​​알 수 있습니다. mkspec에는 포함 경로와 링크 경로가 이미 포함되어 있습니다.

예를 들어 지금은 Mac OS X이고 Qt mkspecs는 /usr/local/Qt4.8/mkspecs에 설치되어 있습니다. 여기에 모든 플랫폼 설명이 있으며 일반적으로 내 플랫폼에 대한 설명의 일부인 mac.conf를 찾을 수 있습니다. 그 안에 당신이 볼 수 Qt는 창조주 (qmake를가) 모든 응용 프로그램에 대한 Makefile을 생성하도록 요청하는 경우

QMAKE_INCDIR_OPENGL = /System/Library/Frameworks/OpenGL.framework/Headers \ 
    /System/Library/Frameworks/AGL.framework/Headers/ 

이 정보가 사용됩니다. 이 방법으로 애플리케이션은 OpenGL의 헤더를 어디에서 찾을 수 있는지 알고 있습니다. 프로젝트는 자동으로 OpenGL 모듈을 추가 할 때만 포함 경로에 추가합니다.

... 
QMAKE_INCDIR   = 
QMAKE_LIBDIR   = 
QMAKE_INCDIR_X11  = /usr/X11R6/include 
QMAKE_LIBDIR_X11  = /usr/X11R6/lib 
QMAKE_INCDIR_QT  = $$[QT_INSTALL_HEADERS] 
QMAKE_LIBDIR_QT  = $$[QT_INSTALL_LIBS] 
QMAKE_INCDIR_OPENGL = /usr/X11R6/include 
QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib 
QMAKE_INCDIR_OPENGL_ES1 = $$QMAKE_INCDIR_OPENGL 
QMAKE_LIBDIR_OPENGL_ES1 = $$QMAKE_LIBDIR_OPENGL 
QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL 
QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL 
QMAKE_INCDIR_EGL  = 
QMAKE_LIBDIR_EGL  = 
QMAKE_INCDIR_OPENVG = 
QMAKE_LIBDIR_OPENVG = 
... 

난 당신이 ;-)

그래서 귀하의 질문에 대답하기 위해 무엇을 의미하는지 스스로 이해할 수 있다고 생각 : 또 다른 예로서

, 이것은 리눅스 플랫폼에 대한 정의의 일부입니다 : OpenGL 라이브러리에 대한 include 경로와 링크 경로가 시스템의 어딘가에있는 mkspec 파일에 저장된 정보를 취하는 응용 프로그램 용으로 생성되는 Makefile qmake에 포함됩니다. 실제 OpenGL 헤더와 라이브러리는 시스템의 기본 위치에 있으며 이는 Qt 자체와는 아무런 관련이 없습니다. OpenGL 라이브러리를 직접 사용하거나 (필요하지 않을 수도 있음) 소스 코드에 헤더를 포함해야 할 수도 있지만 포함 경로는 mkspec 파일에서 이미 제공되어야합니다.

편집 : OpenGL을 모듈을 추가 할 때 자동으로 일어나는 봐 :

g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Qt4.8/mkspecs/macx-g++ -I../TextEdit -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/usr/include -I. -I. -I../TextEdit -I. -F/Library/Frameworks -o main.o ../TextEdit/main.cpp 

지금은 이런 것입니다 : 이것은 Qt는 창조주 (Mac에서) OpenGL을 모듈없이 C++ 파일을 컴파일하는 데 사용하는 명령 줄입니다 추가 후 :

g++ -c -pipe -g -gdwarf-2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Qt4.8/mkspecs/macx-g++ -I../TextEdit -I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -I/Library/Frameworks/QtOpenGL.framework/Versions/4/Headers -I/usr/include/QtOpenGL -I/usr/include -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/System/Library/Frameworks/AGL.framework/Headers -I. -I. -I../TextEdit -I. -F/Library/Frameworks -o main.o ../TextEdit/main.cpp 

프로젝트가 OpenGL 헤더를 찾을 위치를 알려줍니다.

+0

멋지다, QT + = OpenGL과 연결하는 것과 libQtOpenGL을 포함하는 것의 차이점은 무엇입니까? QtOpenGL 또는 QGLWidget 헤더와 동일합니까? – ZERO

+0

"여기"가 의미하는 것을 이해하지 못합니다. 당신은 도서관을 "포함"하지 않습니다. QGLWidget은 Qt OpenGL 모듈에있는 클래스입니다. QT + = opengl로 추가 된 OpenGL 모듈 없이는이 프로그램을 사용할 수 없습니다. –

+0

훨씬 더 의미가 있습니다. QGLWidget에 있기 때문에 'glShadeModel()'과'glHint()'와 같은 OpenGL 파일의 함수는 일단'QT + = opengl'을 링크하면 사용할 수 있습니까? – ZERO

1

Qt에는 OpenGL API 정의가 포함되어 있지 않습니다. 이미 OS에 있어야합니다 (일반적으로 GPU 드라이버와 함께 제공됨).

gpu 드라이버 또는 OS 문서의 문서를 찾으십시오.

+0

그렇다면 .pro 파일에'QT + = opengl'을 추가하면 Qt 프로젝트가 OpenGL과 연결되어 모든 함수와 기타 좋은 것을 호출 할 수 있습니다. – ZERO

+0

아니요. 단지 운영 체제에있는 OpenGL 호출을 호출 할 수 있다는 의미입니다. 이 코드는 프로젝트에서 Qt에서 사용하고있는 것을 나타냅니다 (Qt는 biiiigggggg 임). –

+0

당신이 무슨 말을하는지 잘 모르겠습니다. 그렇다면 QT + = OpenGL은 OpenGL 기능과 다른 것들과 프로젝트를 연결합니까? – ZERO

-1

"opengl"대신 "GLEW", "glut", "GLU"및 "GL"을 사용해보십시오. Qt Creator와는 어떻게 작동하는지 모르지만 opengl 용 링커 플래그입니다.

+0

glut이고 GLU는 OpenGL이 아닙니다. –

+0

그래, 기술적으로는 그렇지 않다. 그러나 아무도 glut이나 GLU가 OpenGL없이 사용되었다는 소식을 듣지 못했다. ;-) –

+0

그래도 여전히 Qt는 glut/GLU를 번들링 할 수 있지만 OpenGL을 번들링 할 수는 없다. 해당 정보로 답변을 업데이트하십시오. –

관련 문제