资源简介

一、实验目的:

掌握几何变换的原理,尤其是复合变换

 

二、实验内容:

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\link.command.1.tlog

     文件       3990  2017-04-27 14:45  ex4\ex4\Debug\ex4.tlog\link.read.1.tlog

     文件        444  2017-04-27 14:45  ex4\ex4\Debug\ex4.tlog\link.write.1.tlog

     文件      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个文件信息

评论

共有 条评论