本文记录了笔者在基于Visual Studio MFC使用OpenGL时所遇到的问题及解决办法。
目录
glLoadIdentity()函数相关:OpenGL多次使用glLoadIdentity()后面的图形不显示
视角设置相关:gluLookAt和gluPerspective函数解析
问题:fatal error C1189: #error : gl.h included before glew.h
问题:解决VS在进行OpenGL编程中出现“无法启动此程序,因为计算机中丢失OPENGL.dll”
在VC++的MFC中为基于对话框的工程加入OpenGL窗体
参考网址:
https://www.cnblogs.com/wiener-zyj/p/4159310.html
注:实际调试时,该网址中的“步骤一”替换为在工程的stdafx.h中添加include:
#include<gl\gl.h>//OpenGL基本库
#include<gl\glu.h>//OpenGL实用库
#include<gl\glaux.h>//OpenGL辅助库
(↑要替换的“步骤一”)
问题:无法打开包括文件:“gl\glaux.h”
参考以下网址:
http://blog.csdn.net/mydangdang2/article/details/47361133
和
http://download.csdn.net/download/wyq1153/9646632
↑(第二个网址是gl\glaux.h文件的下载)
glLoadIdentity()函数相关:OpenGL多次使用glLoadIdentity()后面的图形不显示
参考网址:
http://blog.sina.com.cn/s/blog_15bb06c270102ydsl.html
→网址重点摘录:
看了一段关于glLoadIdentity()的介绍,恍然大悟。原来glLoadIdentity()既将模型世界坐标恢复,又将视野也恢复到(0,0,0),朝向是-z,方向向上。那么OK,使用glLoadIdentity()后,再来一个gluLookAt(),就没问题了。
视角设置相关:gluLookAt和gluPerspective函数解析
参考网址:
https://www.2cto.com/kf/201611/565522.html
→网址重点摘录:
在调用gluLookAt和gluPerspective函数之前一般要先调用一下glLoadIdentity函数, (参考以下代码 20171117YC)
//【设置视点和方向】
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();//初始化矩阵【这行代码在设置视点、视角的时候不可或缺!】
gluPerspective(60.0, 1, 4, 10.0);//。
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();//初始化矩阵【这行代码在设置视点、视角的时候不可或缺!】
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//。
Opengl---gluLookAt函数详解参考以下网址:
http://blog.csdn.net/ivan_ljf/article/details/8764737
为什么调用glPushMatrix和glPopMatrix
参考网址:
https://zhidao.baidu.com/question/1797166351991328427.html
OpenGL怎么设置坐标系
https://zhidao.baidu.com/question/169062940.html
→x 向右 y 向上,z 向外, 这是你看的坐标系,是不会变的, 但是可以通过 transfer , rotate ,scale 来控制内部坐标系的平移,旋转和 放大缩小, 可以理解为坐标系的变化或者镜头的变化
glRotated(-90.0, 1.0, 0.0, 0.0); //绕x顺时针旋转90,Z轴竖直
glRotated(-45.0, 0.0, 0.0, 1.0); //XY平面绕Z顺时针45。
glRotated(45.0, 1.0, 1.0, 0.0); //绕XY的角平分线逆时针45,旋转可以看到效果
问题:fatal error C1189: #error : gl.h included before glew.h
解决办法:
将“#include<gl\gl.h>//OpenGL基本库”移动到“#include"OpenGL_Interact/include/GL/glew.h"//(要包含.h文件的路径)”之后即可。
问题:解决VS在进行OpenGL编程中出现“无法启动此程序,因为计算机中丢失OPENGL.dll”
这主要是因为同时引用了静态库“glut.lib”和"glut32.lib"。
即在项目->属性->配置属性->链接器->附加依赖项中增加了glut.lib和glut32.lib,而且顺序为glut.dll在前,glut32.dll在后,所以,链接器首先寻找OPENGL.dll而没有寻找opengl32.dll。
→经测试,去掉glut.dll可以解决问题。20171121YC
刚体在三维空间的旋转计算
→上述参考网址:
http://blog.csdn.net/mulinb/article/details/51227597