• / 7
  • 下载费用:10 金币  

课程实验指导5-投影.doc

关 键 词:
课程实验指导5-投影.doc
资源描述:
课程实验指导五实验 5 投影1.实验目的:了解透视图投影原理,利用 VC+OpenGL 实现立方体的一点、两点、三点透视图算法。2.实验内容:(1 ) 理解投影原理;(2 ) 读懂示范代码;(3 ) 增加键盘控制,控制一点透视点产生正方体的移动、旋转效果;(4 ) 实现两点透图效果。3.实验原理:本次实验内容为绘制立方体的一点透视图。透视投影按照主灭点的个数分为一点透视、二点透视和三点透视,如下图 1 所示。灭点灭点灭点灭点灭点灭点图 1 立方体的三类透视其中一点透视情况如图 2 所示,设 z 轴上有一观察点(即视点)V(0,0,d),从 V 点出发将物体上的点 P( x, y, z)投影到 XOY 平面上得到 P' (x',y',0),由相似三角形可知一点透视变换矩阵为:图 2 一点透视示意…………………………….(1)1001d根据以上,可得一点透视变换的步骤如下:(1)将三维形体平移到适当位置 lx、ly、lz;(2)令视点在 z 轴 (0,0,d),利用上述公式 (1)进行透视变换;4.实验代码:// Projection.cpp : Defines the entry point for the console application.//#include “stdafx.h“#include #include #include struct Matrix{double p[4][4];Matrix operator*(Matrix Matrix();//单位矩阵};Matrix::Matrix(){for(long i=0;i4;i++){for(long j=0;j4;j++){if(i==j) p[i][j] = 1;else p[i][j] = 0;}}}Matrix Multiply(Matrixfor(int i=0;i4;i++)for(int j=0;j4;j++)for(int k=0;k4;k++)m.p[i][j]+=(m1.p[i][k]*m2.p[k][j]);return m;}struct Pt2D {int x, y;Pt2D(){x = 0; y = 0;};Pt2D(int px, int py){x = px; y = py;};};struct Pt3D { float x, y, z;Pt3D(){x = 0; y = 0; z = 0;};Pt3D(float px, float py, float pz){x = px; y = py; z = pz;};};struct FaceInfo {//第一列为每个面的顶点数;其余列为面的顶点编号int num, idx1, idx2, idx3, idx4;FaceInfo(){num = 0; idx1 = 0; idx2 = 0;idx3 = 0; idx4 = 0;};FaceInfo(int fnum, int fidx1, int fidx2, int fidx3, int fidx4){num = fnum; idx1 = fidx1; idx2 = fidx2;idx3 = fidx3;idx4 = fidx4;};};double lx = 480, ly = 460, lz = 240;double phi = 0;double d = -500;Matrix mT, mR, mP, mTemp, mA;Pt3D boxPt[8];Pt2D boxPt2d[8];FaceInfo fInfo[6];void InitParameter()//初始化参数{mT.p[3][0] = lx; mT.p[3][1] = ly;mT.p[3][2] = lz;mR.p[0][0] = cos(phi); mR.p[0][2] = -sin(phi);mR.p[2][0] = sin(phi); mR.p[2][2] = cos(phi);mP.p[2][2] = 0;mP.p[2][3] = -1/d;mTemp = Multiply(mT, mR);mA = Multiply(mTemp, mP);}void Project(Pt3D pt, Pt2D ptH[0]=pt.x;//ptH[1]=pt.y;ptH[2]=pt.z;ptH[3]=1;double res[4];for(int i=0;i4;i++)res[i] = 0;for(i=0;i4;i++)for(int j=0;j4;j++)res[i]+=(ptH[j]*mA.p[j][i]);pt2D = Pt2D(res[0]/res[3], res[1]/res[3]);}void LineGL(Pt2D pt0, Pt2D pt1)
展开阅读全文
  微传网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:课程实验指导5-投影.doc
链接地址:https://www.weizhuannet.com/p-8756416.html
微传网是一个办公文档、学习资料下载的在线文档分享平台!

微传网博客

网站资源均来自网络,如有侵权,请联系客服删除!

 网站客服QQ:80879498  会员QQ群:727456886

copyright@ 2018-2028 微传网络工作室版权所有

     经营许可证编号:冀ICP备18006529号-1 ,公安局备案号:13028102000124

收起
展开