opengl学习及问题总结
2013-07-17 18:15
447 查看
http://www.yakergong.net/nehe/ nehe中文地址。
http://yarin.blog.51cto.com/1130898/381843 nehe中文翻译的凹凸映射的一片文章。
glLoadIdentity()函数的作用是是视点恢复到画面的中心位置,但是我在使用的时候有时会造成没有办法显示图像。正在思考这个问题。
glTranslatef(x,y,z) 的作用是使视角的原点定位到x,y,z位置上。
glColor3f() 的有效期是再次调用这个函数之前。
1.在看opengl超级宝典的时候入门的初学者总是很疑惑为什么总是出现1>LINK : fatal error LNK1104: 无法打开文件“freeglut_static.lib”这个错误:解决的办法就是去掉gltools.h中的
#define FREEGLUT_STATIC
这个宏定义,改为使用共享库。
2. 无法定位glewInit于glew32.dll。
这是由于glew.lib与glew.dll的版本不同造成的。解决方法就是使版本统一。可能会出现版本统一了,但问题依然出现。我就遇到了这个问题,最后查出问题出现在我在system目录下也放置了一个glew32.dll,windows在加载dll文件的时候不是首先寻找同目录下,而是system下搜寻,没有相应的dll文件再在同目录下搜寻dll文件。解决方法,自然是把system目录下的dll文件删掉。
4.如何使用多贴图。
图1: 图2.
![](https://img-blog.csdn.net/20131209164416187)
![](https://img-blog.csdn.net/20131209164425875)
由上图可以看出应该注释掉上面的代码上的那句话。
5.opengl的屏幕出现黑屏的解决方法:
(1)检查在glBegin()函数和glEnd()函数中间是不是写了在opengl红宝书p30页中列举函数的另外的其他函数。
(2)规定的坐标太大,被opengl窗口截掉了。主要是对glTranslatef(),glRotatef(),gulLookAt()函数不理解造成。
6.opengl的多线程是一个比较复杂的活,与普通的程序调用多线程相比要复杂,尤其在使用贴图功能时候,在调用glGenTextures()函数的时候总是返回一个0值。解决方法:
http://www.cnblogs.com/mazhenyu/archive/2010/04/29/1724190.html
如何消除难看的dos窗口?
很简单,不用很复杂的技术。只要把win32程序的入口函数Winmain函数变为main函数即可,其余的不用改变。
http://yarin.blog.51cto.com/1130898/381843 nehe中文翻译的凹凸映射的一片文章。
glLoadIdentity()函数的作用是是视点恢复到画面的中心位置,但是我在使用的时候有时会造成没有办法显示图像。正在思考这个问题。
glTranslatef(x,y,z) 的作用是使视角的原点定位到x,y,z位置上。
glColor3f() 的有效期是再次调用这个函数之前。
1.在看opengl超级宝典的时候入门的初学者总是很疑惑为什么总是出现1>LINK : fatal error LNK1104: 无法打开文件“freeglut_static.lib”这个错误:解决的办法就是去掉gltools.h中的
#define FREEGLUT_STATIC
这个宏定义,改为使用共享库。
2. 无法定位glewInit于glew32.dll。
这是由于glew.lib与glew.dll的版本不同造成的。解决方法就是使版本统一。可能会出现版本统一了,但问题依然出现。我就遇到了这个问题,最后查出问题出现在我在system目录下也放置了一个glew32.dll,windows在加载dll文件的时候不是首先寻找同目录下,而是system下搜寻,没有相应的dll文件再在同目录下搜寻dll文件。解决方法,自然是把system目录下的dll文件删掉。
4.如何使用多贴图。
#include<glew.h> #include <GL/wglew.h> #include <GL/glut.h> #include <stdlib.h> #include <stdio.h> //虽然下面的代码很简单,写的很烂,但是是我看opengl多日的成果,我很有成就感,对我的项目很有帮助。 /* Create checkerboard texture */ #define checkImageWidth 64 #define checkImageHeight 64 static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; #include<opencv\cv.h> #include<opencv\highgui.h> #ifdef GL_VERSION_1_1 static GLuint texName; #endif //void makeCheckImage(void) //{ // int i, j, c; // // for (i = 0; i < checkImageHeight; i++) { // for (j = 0; j < checkImageWidth; j++) { // c = ((((i&0x8)==0)^((j&0x8))==0))*255; // checkImage[i][j][0] = (GLubyte) c; // checkImage[i][j][1] = (GLubyte) c; // checkImage[i][j][2] = (GLubyte) c; // checkImage[i][j][3] = (GLubyte) 255; // } // } //} // //void init(void) //{ // glClearColor (0.0, 0.0, 0.0, 0.0); // glShadeModel(GL_FLAT); // glEnable(GL_DEPTH_TEST); // // makeCheckImage(); // glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // //#ifdef GL_VERSION_1_1 // glGenTextures(1, &texName); // glBindTexture(GL_TEXTURE_2D, texName); //#endif // // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); //#ifdef GL_VERSION_1_1 // glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, // 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); //#else // glTexImage2D(GL_TEXTURE_2D, 0, 4, checkImageWidth, checkImageHeight, // 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); //#endif //} IplImage *forwardImg =NULL; IplImage *backgroundImg = NULL; GLuint forwardTex; GLuint backgroundTex ; void makeCheckImages(void) { forwardImg = cvLoadImage("hello.png",-1); if(forwardImg == NULL) exit(-1); backgroundImg = cvLoadImage("background.jpg"); if(backgroundImg == NULL) exit(-2); glGenTextures(1,&forwardTex); glBindTexture(GL_TEXTURE_2D,forwardTex); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,forwardImg->width,forwardImg->height,0,GL_RGBA, GL_UNSIGNED_BYTE,forwardImg->imageData); //backgroud; glGenTextures(1,&backgroundTex); glBindTexture(GL_TEXTURE_2D, backgroundTex); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexImage2D(GL_TEXTURE_2D,0,GL_RGB8,backgroundImg->width,backgroundImg->height,0, GL_RGB,GL_UNSIGNED_BYTE,backgroundImg->imageData ); } int maxTextureNum= 0; void init(void) { glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB,&maxTextureNum); glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC) wglGetProcAddress("glMultiTexCoord1fARB"); glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC) wglGetProcAddress("glMultiTexCoord2fARB"); glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC) wglGetProcAddress("glMultiTexCoord3fARB"); glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC) wglGetProcAddress("glMultiTexCoord4fARB"); glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB"); glClientActiveTextureARB= (PFNGLCLIENTACTIVETEXTUREARBPROC) wglGetProcAddress("glClientActiveTextureARB"); makeCheckImages(); glEnable(GL_TEXTURE_2D); // Enable Texture Mapping glShadeModel(GL_SMOOTH); // Enable Smooth Shading glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background glClearDepth(1.0f); // Depth Buffer Setup glEnable(GL_DEPTH_TEST); // Enables Depth Testing glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glActiveTextureARB(GL_TEXTURE0_ARB); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);//这句话起到了至关重要的作用。不注释这句话见图1.,注释掉这句话见图2. glBindTexture(GL_TEXTURE_2D, backgroundTex); //glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT); //glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_REPLACE); glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); glEnd(); glDepthFunc(GL_ALWAYS); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glDisable(GL_LIGHTING); glLoadIdentity(); glBindTexture(GL_TEXTURE_2D,forwardTex); glBegin(GL_QUADS); glTexCoord2f(0.0f,0.0f); glVertex3f(0.23f, -0.0f,-1.0f); glTexCoord2f(1.0f,0.0f); glVertex3f(0.53f, -0.4f,-1.0f); glTexCoord2f(1.0f,1.0f); glVertex3f(0.53f, -0.25f,-1.0f); glTexCoord2f(0.0f,1.0f); glVertex3f(0.23f, -0.25f,-1.0f); glEnd(); glFlush(); glDepthFunc(GL_LEQUAL); glDisable(GL_TEXTURE_2D); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -3.6); } void keyboard (unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; default: break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); GLenum err = glewInit(); if(err != GLEW_OK) { exit(-2); } init(); glutReshapeFunc(reshape); glutDisplayFunc(display); glutKeyboardFunc (keyboard); glutMainLoop(); return 0; }
图1: 图2.
由上图可以看出应该注释掉上面的代码上的那句话。
5.opengl的屏幕出现黑屏的解决方法:
(1)检查在glBegin()函数和glEnd()函数中间是不是写了在opengl红宝书p30页中列举函数的另外的其他函数。
(2)规定的坐标太大,被opengl窗口截掉了。主要是对glTranslatef(),glRotatef(),gulLookAt()函数不理解造成。
6.opengl的多线程是一个比较复杂的活,与普通的程序调用多线程相比要复杂,尤其在使用贴图功能时候,在调用glGenTextures()函数的时候总是返回一个0值。解决方法:
http://www.cnblogs.com/mazhenyu/archive/2010/04/29/1724190.html
如何消除难看的dos窗口?
很简单,不用很复杂的技术。只要把win32程序的入口函数Winmain函数变为main函数即可,其余的不用改变。
相关文章推荐
- Maven学习总结(10)——使用Maven编译项目gbk的不可映射问题
- 多线程实现资源共享的问题学习与总结
- 记录学习的点滴(Eclipse+Spring+Mybatis搭建问题总结)
- Android基础学习总结(八)——Toast应用与分线程弹Toast问题
- Jmeter学习问题总结
- Mysql学习总结(34)——Mysql 彻底解决中文乱码的问题
- 预热篇- 总结Delphi Xe4 做App的的可行性分析. ios平台的问题还需要自行学习
- 机器学习实战-KNN算法实现及遇到的问题总结
- 深度学习(卷积神经网络)一些问题总结
- VC++6.0&&VS2008&MFC&API学习问题总结(一)(多线程CreateThread及小问题汇总)
- 工作中遇到的问题总结和其他学习计划
- OpenGL 学习总结
- GDI+学习及代码总结之——GDI+双缓冲等问题总结
- OpenGL学习总结
- 学习OpenGL总结一
- 每日学习总结:DropDownList是否已选择验证、存储过程参数为sql字符串问题、将截断字符串或二进制数据。\r\n语句已终止
- 工作学习问题总结:
- Mybatis学习总结之表的一对多关联查询问题
- 2018/3/4-3/6个人android客户端和服务器通信学习总结--主要是网上聊天局域网通信例子及环境搭配遇到的问题
- 近期学习javascript和jquery遇到一些问题的技巧知识总结