glut

用OpenGL进行立方体表面纹理贴图

孤者浪人 提交于 2020-08-13 03:34:16
一、目的 掌握OpenGL中纹理对象的创建、绑定与使用方法。 二、简单介绍 1,连接静态库 #pragma comment(lib, "glut32.lib") #pragma comment(lib, "glaux.lib") 2,载入位图图像到内存(这是固定用法) AUX_RGBImageRec *LoadBMP(CHAR * Filename) { FILE *File = NULL; // 文件句柄 if (!Filename) // 确保文件名已提供 { return NULL; // 如果没提供,返回 NULL } File = fopen(Filename, " r " ); // 尝试打开文件 if (File) // 判断文件存在与否 { fclose(File); // 关闭句柄 return auxDIBImageLoadA(Filename); // 载入位图并返回指针 } return NULL; // 如果载入失败,返回 NULL } 3,载入位图并转换成纹理(固定用法) int LoadGLTextures(GLuint *texture, char *bmp_file_name, int texture_id) { int Status = FALSE; // 状态指示器 // 创建纹理的存储空间 AUX_RGBImageRec

GLUT Tutorials 8: GLUT高级键盘控制

与世无争的帅哥 提交于 2020-08-13 02:09:45
博客转自: https://www.cnblogs.com/yangxi/archive/2011/09/16/2178497.html 这一节里,我们再来看看上次的例子,这次我们讲使用高级的键盘控制。在初始化那部分,我们有两个变量:deltaAngle和deltaMode。这些变量控制旋转和移动照相机。当为非0时,照相机执行一些动作,当为0时,照相机就不动,这两个变量的初始值是0,也就是说,照相机初始状态是不动的。 #include <math.h> #include <GL/glut.h> float angle= 0.0 ,deltaAngle = 0.0 ,ratio; float x= 0.0f ,y= 1.75f ,z= 5.0f ; float lx= 0.0f ,ly= 0.0f ,lz=- 1.0f ; GLint snowman_display_list; int deltaMove = 0 ; void reShape( int w, int h) { // Prevent a divide by zero, when window is too short // (you cant make a window of zero width). if (h == 0 ) h = 1 ; ratio = 1.0f * w / h; // 重置投影矩阵

GLUT Tutorials 6: GLUT场景漫游

佐手、 提交于 2020-08-12 17:07:30
博客转自:http://blog.csdn.net/xie_zi/article/details/1911997 让我们看一个比较好的使用键盘控制的例子。这一章我们将建立一个应用程序。这个程序绘制了一个小的居住着雪人的世界。并且我们将用方向键来移动照相机(即移动视点在场景中漫游)。左右方向键,将照相机绕y轴旋转,上下方向键,将前后方向移动照相机。 这个例子的代码放在下面。首先我们处理初始状态。 #include <math.h> #include <GL/glut.h> #include <stdlib.h> static float angle= 0.0 ,ratio; static float x= 0.0f ,y= 1.75f ,z= 5.0f ; static float lx= 0.0f ,ly= 0.0f ,lz=- 1.0f ; static GLint snowman_display_list; 注意我们包含了math.h头文件。我们需要计算旋转角。上面变量的含义到后面你就会清楚了,但我们还是简单的描述下: 1:angle:绕y轴的旋转角,这个变量允许我们旋转照相机。 2:x,y,z:照相机位置。 3:lx,ly,lz:一个向量用来指示我们的视线方向。 4:ratio:窗口宽高比(width/height)。 5:snowman_display_list

GLUT Tutorials 1: GLUT简介,体系

孤人 提交于 2020-08-11 23:48:00
博客参考:http://blog.csdn.net/xie_zi/article/details/1911406 GLUT 代表 OpenGL Utility Tookit。 Mark J.Kilgard 为了使 OpenGL应用程序结构能够真正独立于窗口系统构思了 GLUT库。感谢 GLUT,使我们可以写程序而不必去学关于 X windows或者微软自己的窗口系统。 Kilgard在 X windows上应用这个库,后来 Nate Robins把它扩展到微软的窗口系统。感谢他们,他们做的太棒了。 在这个教程里,我将给你介绍基本的使用 GLUT建立一个应用程序。这个教程将不介绍如何去渲染那些比较精美的视觉场景。这是为了保持代码尽可能的简洁。 需要的库: GLUT,此处我是通过vcpkg直接安装 vcpkg.exe install glut 这个网站里有很多 GLUT库里函数的原型定义: GLUT原型定义 为了用GLUT写一个C++语言程序你需要有三个文件: 1:glut.h -- 头文件。 2. glut.lib和glut32.lib(glut.lib是SGI的, glut32.lib是Microsoft 的。好像就是看你用的什么操作系统了。一般down的这两个文件都有)库文件。 3: glut32.dll(windows)和glut.dll(SGI)-- 运行时的动态库。

GLUT Tutorials 2: GLUT初始化

江枫思渺然 提交于 2020-08-11 10:19:54
博客转自:http://blog.csdn.net/xie_zi/article/details/1911452 在这个部分我们将在我们的程序里建立一个 main函数,这个 main函数将完成必须的初始化和开启事件处理循环。所有的 GLUT函数都有 glut前缀并且那些完成一些初始化的函数有 glutInit前缀。你首先要做的是调用函数 glutInit()。 Void glutInit( int *argc, char **argv); 参数: Argc:一个指针,指向从main()函数传递过来的没更改的argc变量。 Argv:一个指针,指向从main()函数传递过来的没更改的argv变量。 在初始化 GLUT后,我们开始定义我们的窗口。首先确定窗口位置(它默认的是屏幕左上角),我们使用函数 glutInitWindowPosition() Void glutInitWindowPositon( int x, int y); 参数: X: 距离屏幕左边的像素数。-1是默认值,意思就是由窗口管理程序决定窗口出现在哪里。如果不使用默认值,那你就自己设置一个值。 Y:距离屏幕上边的像素数。和X一样。 注意,参数仅仅是对窗口管理程序的一个建议。尽管你精心的设置了窗口位置, window返回的可能是不同的位置。如果你设置了,一般会得到你想要的结果。接下来我们设置窗口大小,使用函数

GLUT Tutorials 4: GLUT动画

风流意气都作罢 提交于 2020-08-11 08:49:55
博客转自:http://blog.csdn.net/xie_zi/article/details/1911793 到现在为止,我们有了一个画着一个白色三角形的 OpenGL窗口,但一点也不激动人心。现在让我们在这节教程里,让这个三角形自己旋转起来。 让我们回到 main()函数,增加些额外的设置。首先告诉 GLUT我们想要一个双缓冲区。双缓冲区通过在后一个缓冲区里绘画,并不停交换前后缓冲区(可见缓冲区),来产生平滑的动画。使用双缓冲区可以预防闪烁。 glutInitDisplayMode(GL_DEPTH|GLUT_DOUBLE|GLUT_RGBA); 接着我们要做的是告诉 GLUT,当应用程序空闲的时候渲染函数应该被调用。这导致 GLUT一直调用渲染函数而产生动画。 GLUT提供了一个函数: glutIdleFunc.这个函数使另一个函数在程序空闲的时候就会被调用。 void glutIdleFunc( void (*func)( void )); 参数: func:在程序空闲的时候就会被调用的函数的函数名。 按照我们的想法,当程序空闲时应该调用的函数是我们先前定义的渲染函数 : renderScene。由于 OpenGL默认没有开启深度测试,我们还要开启它,这样我们才能知道哪个物体在前面,哪个物体在后面。深度测试的开启在 main()函数里,下面看看现在的 main函数。

GLUT Tutorials 3: GLUT窗口设置

℡╲_俬逩灬. 提交于 2020-08-11 07:10:16
博客转自:http://blog.csdn.net/xie_zi/article/details/1911777 下载下面的 VC工程并运行它( glut0.zip )(这个就是上一节的工程)。你将看到两个窗口:一个控制台窗口,一个 OpenGL窗口。现在改变窗口大小使高度与宽度不再相等,这时三角形发生变形。这会发生是因为你没有正确设置投影矩阵。默认的是透视投影矩阵且高宽比为 1.因此高宽比改变了,投影就会变形。因此只要高宽比改变了,投影就应该重新计算。 GLUT定义了当窗口大小改变时哪一个函数应该被调用。此外,这个函数还会在窗口初次被创建时调用,保证初始化窗口不是正方形的时候渲染也不会变形出错。 void glutReshapeFunc( void (*func)( int width, int height)); 参数: func: 指负责设置正确投影的函数的名称。 因此我们必须做的第一件事是回到 main()函数。在上一章的代码里加入对 glutReshapeFunc()的调用,让我们把负责窗口尺寸的函数叫做 changeSize。现在的代码如下。 int main( int argc, char ** argv) { glutInit( & argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT

git push rejected

梦想与她 提交于 2020-08-10 03:38:19
在ideal里面突然无法提交代码了 于是使用命令行: git push; 报错: 写入对象中: 100 % ( 30 / 30 ), 3.62 KiB | 928.00 KiB/ s, 完成. 总共 30 (差异 13 ),复用 0 (差异 0 ) remote: ====================================================================== remote: git log 中发现 yinfuqing@ 163 .com 邮箱不符合要求,请务必使用公司邮箱。 remote: 请再项目下面设置正确 Git 提交信息: remote: remote: git config user.name ' fuqing.yfq ' remote: git config user.email ' fuqing.yfq@alibaba-inc.com ' remote: git - m remote: remote: 后面一个指令使用了 git -m 命令自动修改 log 信息,获得 git- m 方法: remote: remote: Redhat: remote: sudo yum install git -m -b test - y remote: Windows: remote: 在 msysgit 的命令行中运行: remote

图形学_opengl纹理映射

我们两清 提交于 2020-08-09 21:12:50
学了半学期的图形学,除了几个用python或是matlab比较方便的实验外,用的大多数是opengl,在这总结一下纹理贴图实验中opengl的用法。 1、编译器连接静态库 有用到glaux.h的程序,在加入相应的.h、.lib文件后,需要加入两行代码强行连接静态库: #pragma comment(lib, "glaux") #pragma comment(lib, "legacy_stdio_definitions") 另外关于glaux.h,我想吐槽的是在csdn卖下载的人是有多想赚钱?……这里我把找到的glaux.h的下载链接贴出来,需要自取: 链接:https://pan.baidu.com/s/1-P44eWXlehmd9jPYuXNiHw 提取码:hbi6 2、画一个简单立方体 最终目的是要把贴图映射到一个立方体上,首先我们需要构建一个不存在任何纹理的立方体。首先构建绘制函数: void Draw( void ){ glClear(GL_COLOR_BUFFER_BIT ); glLoadIdentity(); glTranslatef( 0.0f , 0.0f , - 5.0f ); glBegin(GL_QUADS); glVertex3f( - 1.0f , - 1.0f , 1.0f ); glVertex3f( 1.0f , - 1.0f , 1.0f );

glutCloseFunc without terminating application [closed]

帅比萌擦擦* 提交于 2020-08-05 02:02:06
问题 Closed. This question needs debugging details. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 4 years ago . Improve this question I have created a window with glutCreateWindow and started a loop using glutMainLoop . I want to end that loop and close the window so I use glutLeaveMainLoop and glutCloseFunc to destroy it. Automatically, my application terminates. I would like the application to persist after