OpenGL旋转立方体的实现
来源:互联网 发布:mysql yum 编辑:程序博客网 时间:2024/05/17 06:25
计算机图形学大作业
题目要求
使用openGL实现旋转的正方体。
过程步骤
主要分为搭建环境和完成代码编写两部分。
搭建环境
- 首先下载并安装Dev C++,我使用的版本是:
Dev-Cpp 5.11
自带的编译器版本是:TDM GCC 4.9.2
安装完成后,我们可以创建OpenGL的demo过程如下:
文件 -> 新建 -> 项目 -> Multimedia -> OpenGL
直接编译运行Demo,将会展示一个旋转的三角形如下图所示:
另外如需使用其他OpenGL库,需要自行配置:
将相关.dll文件拷贝到C:\windows\system32目录下
将相关.lib文件拷贝到D:\Program Files\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib32 目录下
将相关.h文件拷贝到D:\Program Files\Dev-Cpp\MinGW64\include\GL目录下
最后在编译选项中添加相应的链接,在Linux下及在Makefile中设置相应的编译选项。
绘制立方体
编写void cube()
函数,函数体中配合使用glBegin()
和glEnd()
,绘制正方体,一共有6个面,每个面需要使用glColor3f()
和glVertex3f()
来进行点的描述及颜色的填充。
void cube(){ glBegin(GL_QUADS); glColor3f(1.0,1.0,0.0); glVertex3f( 1.0, 1.0,-1.0); glColor3f(0.0,1.0,0.0); glVertex3f(-1.0, 1.0,-1.0); glColor3f(0.0,1.0,1.0); glVertex3f(-1.0, 1.0, 1.0); glColor3f(1.0,1.0,1.0); glVertex3f( 1.0, 1.0, 1.0); glColor3f(1.0,0.0,1.0); glVertex3f( 1.0,-1.0, 1.0); glColor3f(0.0,0.0,1.0); glVertex3f(-1.0,-1.0, 1.0); glColor3f(0.0,0.0,0.0); glVertex3f(-1.0,-1.0,-1.0); glColor3f(1.0,0.0,0.0); glVertex3f( 1.0,-1.0,-1.0); glColor3f(1.0,1.0,1.0); glVertex3f( 1.0, 1.0, 1.0); glColor3f(0.0,1.0,1.0); glVertex3f(-1.0, 1.0, 1.0); glColor3f(0.0,0.0,1.0); glVertex3f(-1.0,-1.0, 1.0); glColor3f(1.0,0.0,1.0); glVertex3f( 1.0,-1.0, 1.0); glColor3f(1.0,0.0,0.0); glVertex3f( 1.0,-1.0,-1.0); glColor3f(0.0,0.0,0.0); glVertex3f(-1.0,-1.0,-1.0); glColor3f(0.0,1.0,0.0); glVertex3f(-1.0, 1.0,-1.0); glColor3f(1.0,1.0,0.0); glVertex3f( 1.0, 1.0,-1.0); glColor3f(0.0,1.0,1.0); glVertex3f(-1.0, 1.0, 1.0); glColor3f(0.0,1.0,0.0); glVertex3f(-1.0, 1.0,-1.0); glColor3f(0.0,0.0,0.0); glVertex3f(-1.0,-1.0,-1.0); glColor3f(0.0,0.0,1.0); glVertex3f(-1.0,-1.0, 1.0); glColor3f(1.0,1.0,0.0); glVertex3f( 1.0, 1.0,-1.0); glColor3f(1.0,1.0,1.0); glVertex3f( 1.0, 1.0, 1.0); glColor3f(1.0,0.0,1.0); glVertex3f( 1.0,-1.0, 1.0); glColor3f(1.0,0.0,0.0); glVertex3f( 1.0,-1.0,-1.0); glEnd(); }
立方体绕轴旋转
在OpenGL中通过glRotatef()
函数实现转动特定角度,但是要实现旋转,就要不停改变其转动角参数,这里我们通过设置三个静态变量及让其自增的方式来控制立方体的绕三个轴的旋,通过改变增量以控制转动速度。
static float xrot = 0.0; static float yrot = 0.0; static float zrot = 0.0; glRotatef(xrot, 1, 0, 0);glRotatef(yrot, 0, 1, 0);glRotatef(zrot, 0, 0, 1);cube();xrot = xrot + 0.01;yrot = yrot + 0.01;zrot = zrot + 0.01;
立方体沿轴运动
在OpenGL中通过glTranslatef()
函数指定立方体在三维坐标系中的位置。这里我们以z轴为例,让立方体来回运动,其中h用于控制运动速度:
static float z=-5;static float h=-0.001;glTranslatef(0, 0, z);z=z+h;if(z<-10) h=-h;if(z>-5) h=-h;
至此完成立方体简单的旋转与沿轴运动。
问题
计算机中丢失OPENGL.dll
编译通过以后,一直无法执行,困扰了很久,最终找到答案:
主要是编译选项中同时引用了glut.lib和glut32.lib,而且在编译选项中-lglut
在-lglut32
前面,这个时候链接器首先寻找OPENGL.dll而没有寻找opengl32.dll,此时我们进入DEV C++的项目配置里面对其进行修改:
项目->项目属性->参数->链接
-lopengl32
-lglut32 //放在前面
-lglut
-LGLU
-lglu32
最终编译正确,并按照预期结果运行:
心得体会
历时一个星期终于完成计算机图形学这样一个简单的大作业——实现立方体的旋转。
在代码层面上来说,确实很简单,因为涉及的内容不多,并且OpenGL提供了很好的函数封装,网上也有很多的类似的示例。
最麻烦的部分还是环境的搭建,由于OpenGL是一个开源项目,并没有非常权威的手册指南,所以网上的案例也是良莠不齐,学习起来效率很低。
比如说,最开始找到一个项目,用到Glaux
的东西,折腾了半天终于可以编译却发现无法运行,后来网上又有人说Glaux
基本弃用,并且Win7好像并不支持,不得不从头开始。
- OpenGL旋转立方体的实现
- OpenGL纹理贴图 旋转的立方体
- OpenGL -- 多颜色的立方体旋转
- OpenGL-绘制旋转立方体
- OpenGL绘制旋转立方体实例
- OpenGL绘制旋转立方体实例
- OpenGL绘制旋转立方体实例
- 使用css3 实现旋转的立方体
- [OpenGL]课后案例16:带纹理立方体的旋转程序
- openGL实现立方体
- 旋转的立方体
- 旋转的四个立方体
- [OpenGL]课后案例09:立方体旋转程序
- [OpenGL]课后案例10:立方体旋转程序
- OpenGL显示中文和旋转立方体贴图
- CSS3实现正方形立方体旋转
- [OpenGL]课后案例11:用虚拟跟踪球实现立方体旋转程序
- 纯CSS3实现一个旋转的3D立方体盒子
- Spring Transaction + MyBatis SqlSession事务管理机制研究学习
- jquery图片上传判断图片的大小,限制图片的上传大小
- java正则获取字符前后数据
- 【学习笔记javascript设计模式与开发实践(享元模式)----12】
- 跟随屏幕滚动后固定导航到顶端
- OpenGL旋转立方体的实现
- Android 各大网络http请求库的比较及实战
- distanceto
- MyBatis-Spring事务管理
- 最大公约数
- 延时模块的使用-system generator
- iOS --- OpenGLES之着色器(shader)语法介绍
- IAP - 3
- 软件工程总结(三)