OpenGL之路(一)OpenGL、gl、glu、glut的區別 + glut環境的搭建


OpenGL中的gl庫是核心庫,glu是實用庫,glut是實用工具庫,gl是核心,glu是對gl的部分封裝,glut是OpenGL的跨平台工具庫,gl中包含了最基本的3D函數,而glu似乎對gl的輔助,如果算數好,不用glu的情況下,也是可以做出同樣的效果。glut是基本的窗口界面,是獨立於gl和glu的,如果不喜歡用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,這就保證了我們編出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系統上使用。選擇OpenGL的一個很大原因就是因為它的跨平台性,所以我們可以盡量的使用glut庫。


glut的搭建:

1.glut的下載:

(1).到 http://www.ibiblio.org/pub/packages/development/graphics/glut/  下載 glut3.7

(2).到 http://www.opengl.org/resources/libraries/glut/glut_downloads.php  下載glut35.zip進行編譯(注意編譯前執行glutmake.bat),或直接下載glutdlls.zip

2.glut的配置

(1).將glut.h 放到Microsoft Visual Studio\VC\include\gl 目錄下。(具體位置視自己編譯器和安裝位置而定, 可能的位置有Microsoft SDKs\Windows\v7.1A\Include\gl 或 Windows Kits\8.1\Include\um\gl ,路徑中可能會有數字的改變,如果一直示例編譯不過可以在這三個位置都放上)

(2).將glut.lib 和 glut32.lib 放到VC\bin 目錄下(具體位置視自己編譯器和安裝位置而定)

(3).  32位系統: 將glut.dll 和 glut32.dll 放到c:\Windows\System32\

64位系統: 將glut.dll 和 glut32.dll 放到c:\Windows\SysWOW64\

3.編譯器設置

在項目屬性的連接項中添加 glut32.lib 和 glut.lib


4.第一個程序實例

工程選項中應確保是windows 而不是console

#include <GL/glut.h>

#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//去掉控制台

void renderScene(void)  //渲染函數
{
	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_TRIANGLES);
	glVertex3f(0.0, 0.0, 0.0);
	glVertex3f(0.5, 0.0, 0.0);
	glVertex3f(0.0, 0.5, 0.0);
	glEnd();
	glFlush();
}
int main(int argc, char **argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(300, 300);
	glutCreateWindow("GLUT");
	glutDisplayFunc(renderScene);  //設置渲染函數
	glutMainLoop();
}

如果仍舊無法解決問題,可以試試以下代碼

#include <gl/glut.h>
#include <gl/GLU.h>
#include <gl/GL.h>
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glut32.lib")  //如果未找到這幾個文件可以使用絕對路徑,注意路徑中'\'要改成 '\\'
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glut.lib")
void renderScene(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	glBegin(GL_TRIANGLES);
	glVertex3f(6.0f, 2.0f, 0.0f);
	glVertex3f(-1.0f, -1.0f, 0.0f);
	glVertex3f(1.0f, -1.0f, 0.0f);
	glEnd();
	glTranslatef(3.0f, 0.0f, -1.0f);

	glutSwapBuffers();
}
int main(int argc, char * argv[])
{
	glutInit(&argc, (char**)argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
	glutInitWindowPosition(100, 100);
	glutInitWindowSize(320, 320);
	glutCreateWindow("Hello OpenGL");
	glutDisplayFunc(renderScene);
	glutIdleFunc(renderScene);

	glEnable(GL_DEPTH_TEST);
	glutMainLoop();
	return 0;
}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM