學習OpenGL超級寶典(OpenGL superbible)的第一個程序

1.cpp

#include <GL/glut.h> //glut.h中包含頭文件gl.h和glu.h

void RenderScene(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glFlush();
}

void SetupRC(void)
{
	glClearColor(0.0f,1.0f,1.0f,1.0f);
}

int main(int argc, char* argv[])
	{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
	glutCreateWindow("Simple");
	glutDisplayFunc(RenderScene);

	SetupRC();
	glutMainLoop();

	return 0;
	}

在Linux下學習的好處是不用受MS的束縛,在學習之初並沒有複雜的調試錯誤,只需在終端中輸入幾行命令,就可看到效果,很方便。在終端中輸入如下命令,-glut是用到glut庫,glut在之前已經安裝。

$ g++ 1.cpp -o 1 -lglut

結果得到錯誤如下:
/usr/bin/ld: /tmp/ccZJJ3dA.o: undefined reference to symbol 'glClear'
/usr/bin/ld: note: 'glClear' is defined in DSO /usr/lib/libGL.so.1 so try adding it to the linker command line
/usr/lib/libGL.so.1: could not read symbols: Invalid operation
collect2: ld returned 1 exit status

沒有找到libGL.so.1, 所以定位libGL:

$ locate libGL

得到:
/usr/lib/i386-linux-gnu/libGL.so
/usr/lib/i386-linux-gnu/libGLEW.so.1.6
/usr/lib/i386-linux-gnu/libGLEW.so.1.6.0
/usr/lib/i386-linux-gnu/libGLEWmx.so.1.6
/usr/lib/i386-linux-gnu/libGLEWmx.so.1.6.0
/usr/lib/i386-linux-gnu/libGLU.a
/usr/lib/i386-linux-gnu/libGLU.so
/usr/lib/i386-linux-gnu/libGLU.so.1
/usr/lib/i386-linux-gnu/libGLU.so.1.3.08004
/usr/lib/i386-linux-gnu/mesa/libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0

再嘗試加上庫lGL:

$ g++ 1.cpp -o 1 -lglut -lGL

OK~ 編譯通過,得到結果如下:


下面,在這個窗口內畫一個長方形:

#include <GL/glut.h> //glut.h中包含頭文件gl.h和glu.h

void RenderScene(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(1.0f, 0.0f, 0.0f);
	glRectf(-25.0f,25.0f,25.0f,-25.0f);
	glFlush();
}

void SetupRC(void)
{
	glClearColor(0.0f,0.0f,1.0f,1.0f);
}

void ChangeSize(GLsizei w, GLsizei h)
	{
	GLfloat aspectRatio;
	
	if(h == 0)
		h = 1;
	glViewport(0,0,w,h);
	
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	
	aspectRatio = (GLfloat)w / (GLfloat)h;
	if(w <= h)
		glOrtho(-100.0, 100.0, -100 / aspectRatio, 100.0 / aspectRatio, 1.0, -1.0);
	else
		glOrtho(-100 / aspectRatio, 100.0 / aspectRatio, -100.0, 100.0, 1.0, -1.0);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();	
	}

int main(int argc, char* argv[])
	{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
	glutCreateWindow("Simple");
	glutDisplayFunc(RenderScene);
	glutReshapeFunc(ChangeSize); //Control viewport to draw rectangle

	SetupRC();
	glutMainLoop();

	return 0;
	}
重新用g++編譯:
$ g++ 1.cpp -o 1 -lglut -lGL



發佈了29 篇原創文章 · 獲贊 16 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章