出错原因是:glBlendEquation是OpenGL扩展部分的函数。解决方法是安装OpenGL的glew扩展库。
我的编译环境:VS2008。
首先下载glew库:http://glew.sourceforge.net/
然后进行安装:
拷贝glew32.dll至system32文件夹下,拷贝glew32.lib至VC目录下lib文件夹,拷贝glew.h和wglew.h至VC目录下include/GL目录下。
在程序开始要导入头文件:#include 。
其次还要导入库文件glew32.lib:
初始化glew:
可以在init函数开始处初始化(注意:这一步是非常必要的,不然会出现奇怪的错误!):
glewInit();
不加这句代码的话,应用程序会出现下列错误:
还可以加入错误处理代码。
编译运行,成功。
完整代码:
- #include
- #include
- #include
#pragma comment(lib, "glew32.lib") //加上此句就不用去属性页进行设置了
-
- void
init() - {
-
glewInit(); -
glClearColor(1.0,1.0,0.0,0.0); -
glBlendFunc(GL_ONE,GL_ONE); -
glEnable(GL_BLEND); - }
-
- void
display() - {
-
glClear(GL_COLOR_BUFFER_BIT); - glLoadIdentity();
- //glTranslate(0.0, 0.0, -5.0); //不加此句你可能看不到四边形
-
glColor3f(0.0,0.0,1.0); -
glRectf(-0.5,-0.5,0.5,0.5); -
glFlush(); - }
-
- void
keyboard(unsigned char key,int x,int y) - {
-
switch(key) -
{ -
case 'a':case 'A': -
glBlendEquation(GL_FUNC_ADD); -
break; -
case 's':case 'S': -
glBlendEquation(GL_FUNC_SUBTRACT); -
break; -
case 'r':case 'R': -
glBlendEquation(GL_FUNC_REVERSE_SUBTRACT); -
break; -
case 'm':case 'M': -
glBlendEquation(GL_MIN); -
break; -
case 'x':case 'X': -
glBlendEquation(GL_MAX); -
break; -
case 27: -
exit(0); -
break; -
} -
glutPostRedisplay(); - }
-
- int
main(int argc,char** argv) - {
-
glutInit(&argc,argv); -
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); -
glutInitWindowSize(500,500); -
glutInitWindowPosition(100,100); -
glutCreateWindow(argv[0]); -
init(); -
glutDisplayFunc(display); -
glutKeyboardFunc(keyboard); -
glutMainLoop(); -
return 0; - }
运行结果:
此文转载自 http://blog.csdn.net/xiajun07061225/article/details/6938740。