# 机械版CG 实验3 变换

1．实验目的：

2．实验内容：

（1）       掌握二维、三维变换的原理及数学公式；

（2）       利用OpenGL实现二维、三维图形变换，在屏幕上显示变换过程或变换结果。

### 3．实验原理：

OpenGL的三个基本几何变换函数介绍如下：

（1） 平移变换

void glTranslate{fd}(TYPE x,TYPE y,TYPE z);

（2） 旋转变换

void glRotate{fd}(TYPE angle,TYPE x,TYPE y,TYPE z);

（3） 比例变换

void glScale{fd}(TYPE x,TYPE y,TYPE z);

### 4．实验代码：

#include <GL/glut.h>

#include <stdlib.h>

GLfloat   rtri;//金字塔旋转角度

void init(void)

{

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

glEnable(GL_DEPTH_TEST);//激活深度测试

}

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    //清除颜色缓存和深度缓存

glTranslatef(-1.5f,0.0f,-6.0f);//请尝试修改此函数，掌握其用法与参数含义

glRotatef(rtri,0.0f,1.0f,0.0f);//请尝试修改此函数，掌握其用法与参数含义

glBegin(GL_TRIANGLES);

glColor3f(1.0f,0.0f,0.0f);

glVertex3f( 0.0f, 1.0f, 0.0f);

glColor3f(0.0f,1.0f,0.0f);

glVertex3f(-1.0f,-1.0f, 1.0f);

glColor3f(0.0f,0.0f,1.0f);

glVertex3f( 1.0f,-1.0f, 1.0f);

glColor3f(1.0f,0.0f,0.0f);

glVertex3f( 0.0f, 1.0f, 0.0f);

glColor3f(0.0f,0.0f,1.0f);

glVertex3f( 1.0f,-1.0f, 1.0f);

glColor3f(0.0f,1.0f,0.0f);

glVertex3f( 1.0f,-1.0f, -1.0f);

glColor3f(1.0f,0.0f,0.0f);

glVertex3f( 0.0f, 1.0f, 0.0f);

glColor3f(0.0f,1.0f,0.0f);

glVertex3f( 1.0f,-1.0f, -1.0f);

glColor3f(0.0f,0.0f,1.0f);

glVertex3f(-1.0f,-1.0f, -1.0f);

glColor3f(1.0f,0.0f,0.0f);

glVertex3f( 0.0f, 1.0f, 0.0f);

glColor3f(0.0f,0.0f,1.0f);

glVertex3f(-1.0f,-1.0f,-1.0f);

glColor3f(0.0f,1.0f,0.0f);

glVertex3f(-1.0f,-1.0f, 1.0f);

glEnd();

rtri+=0.1f;//加一个角度

glutSwapBuffers();//交换双缓存

}

void reshape (int width, int height)

{

glViewport(0, 0, width, height);

glMatrixMode(GL_PROJECTION);

gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 0.1f, 100.0f);

glMatrixMode(GL_MODELVIEW);

}

void keyboard(unsigned char key, int x, int y)

{//请参考＂变换示例参考＂一文，考虑添加键盘命令，交互式来控制金字塔的旋转

switch (key)

{

case ‘x’:

exit(0);

break;

default:

break;

}

}

int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);//使用双缓存模式和深度缓存

glutInitWindowSize(640, 480);

glutInitWindowPosition(100, 100);

glutCreateWindow("Transform2");

init();

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutKeyboardFunc(keyboard);

glutIdleFunc(display);//设置空闲时调用的函数

glutMainLoop();

return 0;

}

88 篇文章19 人订阅

0 条评论

## 相关文章

35040

### Caffe学习系列(6)：Blob,Layer and Net以及对应配置文件的编写

http://www.cnblogs.com/denny402/p/5073427.html

9610

### 从零开始用Python构造决策树（附公式、代码）

? 来源：Python中文社区 作者：weapon 本文长度为700字，建议阅读5分钟 本文介绍如何不利用第三方库，仅用python自带的标准库来构造一个决策...

37780

### 51Nod 1080 两个数的平方和(数论，经典题)

1080 两个数的平方和 基准时间限制：1 秒 空间限制：131072 KB 分值: 5         难度：1级算法题 给出一个整数N，将N表示为2个整数...

38760

36560

672100

46840

### TF图层指南：构建卷积神经网络

TensorFlow layers模块提供了一个高级API，可以轻松构建神经网络。它提供了便于创建密集（完全连接）层和卷积层，添加激活函数以及应用缺陷正则化的方...

84450

### tensorflow学习笔记（三十六）：learning rate decay

learning rate decay 在训练神经网络的时候，通常在训练刚开始的时候使用较大的learning rate， 随着训练的进行，我们会慢慢的减小le...

60660

### Caffe学习笔记(七)：使用训练好的model做预测(mnist)

Python版本： Python2.7 运行平台： Ubuntu14.04 一、前言     在之前的笔记中，已经生成了训练好的mnist.cafffemod...

57750