资源简介
一、实验目的:
掌握几何变换的原理,尤其是复合变换
二、实验内容:
1、利用OpenGL函数画一个三维物体;
2、运用齐次坐标,采用矩阵相乘的方式自己编程实现几何变换,不能直接调用OpenGL几何变换函数;
3、利用鼠标或键盘控制三维物体在屏幕上移动、旋转和放缩;
三、实现效果及步骤(或流程)
(1) 以数组wcPt3D verts[8]存储立方体八个顶点,然后利用glBegin(GL_QUADS); glEnd();函数绘制立方体。在绘制物体之前设置函数glPolygonMode(GL_FRONT_AND_BACK ,GL_LINE ); 让多边形以线框形式显示。
(2) 编写矩阵初始化方法MatrixInit,将矩阵初始化为单位矩阵。编写矩阵乘法函数MatrixMultiply,以便求两个矩阵相乘的结果。方法transformVerts3D把原始立方体顶点坐标转化为经过复合矩阵变换的三维坐标。
(3) 构造平移矩阵,具体方法实现如下:
void translatePolygon(GLfloat tx, GLfloat ty, GLfloat tz) {//平移
Matrix ml;
MatrixInit(ml);
ml[0][3] = tx;
ml[1][3] = ty;
ml[2][3] = tz;
MatrixMultiply(ml, matComposite);
}
(4) 构造旋转矩阵,具体方法实现如下:
void RotateLeftRight(wcPt3D pivotPt, GLfloat theta)//绕Z轴旋转
{
Matrix matRot;
MatrixInit(matRot);
matRot[0][0] = cos(theta);
matRot[0][1] = -sin(theta);
matRot[1][0] = sin(theta);
matRot[1][1] = cos(theta);
MatrixMultiply(matRot, matComposite);
}
void RotateUpDown(wcPt3D pivotPt, GLfloat theta)//绕X轴旋转
{
Matrix matRot;
MatrixInit(matRot);
matRot[1][1] = cos(theta);
matRot[1][2] = -sin(theta);
matRot[2][1] = sin(theta);
matRot[2][2] = cos(theta);
MatrixMultiply(matRot, matComposite);
}
(5) 构造放缩矩阵,具体方法实现如下:
void Scale3D(GLfloat sx, GLfloat sy, GLfloat sz, wcPt3D fixedPt) //放缩大小
{
Matrix matScale;
MatrixInit(matScale);
matScale[0][0] = sx;
matScale[0][3] = (1 - sx) * fixedPt.x;
matScale[1][1] = sy;
matScale[1][3] = (1 - sy) * fixedPt.y;
matScale[2][2] = sz;
matScale[2][3] = (1 - sz) * fixedPt.z;
MatrixMultiply(matScale, matComposite);
}
(6) 当触发相应鼠标键盘事件时则构建相应的矩阵,通过矩阵变换求得变换后的坐标然后重新绘制立方体。
键盘上下左右实现平移:
键盘awsd实现旋转:
鼠标滚轮实现放缩:
代码片段和文件信息
#include “stdafx.h“
#include
#include
#include
using namespace std;
//获取屏幕的宽度
GLint SCREEN_WIDTH = 0;
GLint SCREEN_HEIGHT = 0;
//设置程序的窗口大小
GLint windowWidth = 600;
GLint windowHeight = 600;
//绕x轴旋转角度
GLfloat xRotAngle = 0.0f;
//绕z轴旋转角度
GLfloat zRotAngle = 0.0f;
//受支持的点大小范围
GLfloat sizes[2];
//受支持的点大小增量
GLfloat step;
int firstTime = 1;
#define GLUT_WHEEL_UP 3 //定义滚轮操作
#define GLUT_WHEEL_DOWN 4
void init(void)
{
glClearColor(0.9 0.4 1.0 0.0); // Set display-window color to white.
glMatrixMode(GL_PROJECTION); // Set projection parameters.
gluOrtho2D(0.0 600.0 0.0 600.0); //设置窗口坐标范围
}
class wcPt3D {
public:
GLfloat x y z;
};
typedef GLfloat Matrix[4][4];
Matrix mat
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 26624 2017-04-27 18:32 ex4\.vs\ex4\v14\.suo
文件 51200 2017-04-27 14:45 ex4\Debug\ex4.exe
文件 413756 2017-04-27 14:45 ex4\Debug\ex4.ilk
文件 995328 2017-04-27 14:45 ex4\Debug\ex4.pdb
文件 218624 2015-10-14 09:58 ex4\Debug\freeglut.dll
文件 337408 2015-10-14 09:58 ex4\Debug\glew32.dll
文件 350720 2015-10-14 09:58 ex4\Debug\glewinfo.exe
文件 43520 2015-10-14 09:58 ex4\Debug\glfw3.dll
文件 222720 2015-10-14 09:58 ex4\Debug\visualinfo.exe
文件 2194 2017-04-27 14:45 ex4\ex4\Debug\ex4.log
文件 75534 2017-04-27 14:45 ex4\ex4\Debug\ex4.obj
文件 3407872 2017-04-26 15:03 ex4\ex4\Debug\ex4.pch
文件 1750 2017-04-27 14:45 ex4\ex4\Debug\ex4.tlog\CL.command.1.tlog
文件 27350 2017-04-27 14:45 ex4\ex4\Debug\ex4.tlog\CL.read.1.tlog
文件 838 2017-04-27 14:45 ex4\ex4\Debug\ex4.tlog\CL.write.1.tlog
文件 215 2017-04-27 14:45 ex4\ex4\Debug\ex4.tlog\ex4.lastbuildstate
文件 1852 2017-04-27 14:45 ex4\ex4\Debug\ex4.tlog\li
文件 3990 2017-04-27 14:45 ex4\ex4\Debug\ex4.tlog\li
文件 444 2017-04-27 14:45 ex4\ex4\Debug\ex4.tlog\li
文件 12248 2017-04-26 15:03 ex4\ex4\Debug\stdafx.obj
文件 609280 2017-04-27 14:45 ex4\ex4\Debug\vc140.idb
文件 438272 2017-04-27 14:45 ex4\ex4\Debug\vc140.pdb
文件 11648 2017-04-27 15:10 ex4\ex4\ex4.cpp
文件 9363 2017-04-26 15:03 ex4\ex4\ex4.vcxproj
文件 1381 2017-04-26 15:00 ex4\ex4\ex4.vcxproj.filters
文件 225 2017-04-26 15:00 ex4\ex4\packages.config
文件 1482 2017-04-26 14:56 ex4\ex4\ReadMe.txt
文件 207 2017-04-26 14:56 ex4\ex4\stdafx.cpp
文件 234 2017-04-26 14:56 ex4\ex4\stdafx.h
文件 240 2017-04-26 14:56 ex4\ex4\targetver.h
............此处省略71个文件信息
- 上一篇:QQ登录界面MFC
- 下一篇:掌握利用OpenGL函数进行鼠标、键盘操作,创建菜单等
相关资源
- OpenGL计算机图形学2D太阳系模型
- OpenGL应用(动画渐变色显示)
- OpenGL应用2(碰撞检测)
- OpenCV实现移动跟踪非常简单
- 《自主移动机器人导论》中文翻译版
- mfc 同步移动两个窗口
- OpenGL编程指南(原书第7版)中文扫描
- 双目视觉三维重建
- OpenGL+MFC实现旋转、缩放、平移
- 基于MFC opengl读取obj并求法向量
- 基于C++的三维模型体素化程序
-
bvh pla
yer - qtOpenGLDemo2.rar
- opengl圆柱贴图程序,可以直接运行
- 肺部CT图像分割及重建系统
- opengl绘制坐标
- MFC读取USB接口硬盘固件、序列号、型
- openGL_c++复刻我的世界游戏
- CAD应用程序开发详解 Visual C++与Open
- OpenGL+MFC三维绘图
- opengl绘制一个单位立方体正平行投影
- VTK图形图像开发进阶_高清完整版
- ns2移动模型网络仿真
- Step by Step Skeletal Animation in C++ and Ope
- opengl游戏
- glut.3.7.6+.DevPak
- 利用多个二维点拟合圆、多个三维点
- opengl绘制简单小动物
- kinect+openGL+openNI+opencv实现三维重建
- openGL和C++实现光线跟踪作业
评论
共有 条评论