实验原理
1.本次实验着重学习以下常用函数,在实验报告中的实验原理部分对下列函数进行参数介绍和用法介绍。
glLoadIdentity();
变换矩阵:
glRotatef(theta, vx, vy, vz)
glTranslatef(dx, dy, dz)
glScalef( sx, sy, sz)
在屏幕坐标系下指定矩阵视区的函数:
glViewport(x, y, w, h);
设置投影参数:
glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);
视景体裁剪(创建一个正交平行的视景体,即正投影):
glOrtho(left, right, bottom, top, near, far);
2.对顶点为V1V2V3的三角形进行平移、旋转、比例变换;并分别用不同的颜色填充变换后的三角形。三角形顶点的坐标为:V1(0.0,0.0),V2(40.0,0.0),V3(20.0,20.0)。
3.将V1V2V3三角形相对点(20.0,20.0)进行旋转,角度自己设定。
4.编写一个程序,实现如下的功能:连续两次单击鼠标左键,以两次单击的位置作为矩形的对角线来绘制一个矩形,且该矩形各边与屏幕对齐。鼠标右键用于程序的退出。
(1)将绘制矩形的函数放在鼠标回调函数中完成。
(2)修改(1)中的程序,将绘制矩形的函数放在显示回调函数中完成。鼠标回调函数用于状态的修改,并调用显示回调函数(利用glutPostRedisplay()
)。
(2、3)
以下的平移、缩放、旋转均为对世界坐标系变换
#include<gl/glut.h>
#include<cmath>
void tra1(void) {
glBegin(GL_TRIANGLES);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.2f, 0.2f, 0.0f);
glVertex3f(0.4f, 0.0f, 0.0f);
glEnd();
}
void tra2(void) {
glColor3f(1.0, 1.0, 0.0);
glTranslatef(-0.4f, 0.0f, 0.0f);
glScalef(0.5f, 1.0f, 1.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.2f, 0.2f, 0.0f);
glVertex3f(0.4f, 0.0f, 0.0f);
glEnd();
// 抵消世界坐标系的变换,注意顺序
glScalef(2.0f, 1.0f, 1.0f);
glTranslatef(0.4f, 0.0f, 0.0f);
}
void tra3() {
glColor3f(0.0, 1.0, 0.0);
glTranslatef(0.0f