《计算机图形学》实验报告4_第1页
《计算机图形学》实验报告4_第2页
《计算机图形学》实验报告4_第3页
《计算机图形学》实验报告4_第4页
《计算机图形学》实验报告4_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《计算机图形学》实验报告(4)学号:10131656姓名:邱家辉班级:计131成绩:实验名称:三视图与旋转实验地点:信息楼215所使用的工具软件及环境:C++.NET、OpenGL一、实验目的:1、用OpenGL实现绘制三视图2、用OpenGL实现物体的旋转二、实验思考:#include"stdafx.h"#include"stdlib.h"#include<GL\glut.h>#include<vector>#include<iostream>usingnamespacestd;constintMaxNum=200;vector<int>Face[10];intwinWidth=1000,winHeight=600;intPointNum=4,FaceNum=4;doubleMatrix[4][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{500,300,300,2}};doubleXOZ[4][4]={{1,0,0,0},{0,0,0,0},{0,0,1,0},{800,0,600,1}};doubleXOY[4][4]={{1,0,0,0},{0,0,-1,0},{0,0,0,0},{800,0,-50,1}};doubleYOZ[4][4]={{0,0,0,0},{-1,0,0,0},{0,0,1,0},{-150,0,600,1}};doubleDD=-400,NN=-200,MM=0,LL=-400;doubleYOY[4][4]={{1,0,0,0},{0,1,0,0},{0,0,0,1/DD},{LL,MM,0,1+NN/DD}};doubleRotate[4][4]={{1,0,0,0},{0,cos(0.5),sin(0.5),0},{0,sin(-0.5),cos(0.5),0},{0,0,0,1}};doubleRotateR[4][4]={{1,0,0,0},{0,cos(-0.5),sin(-0.5),0},{0,sin(0.5),cos(-0.5),0},{0,0,0,1}};structDefPoint{ doublex,y,z,tag;}Point[MaxNum],TPoint[MaxNum],XOZPoint[MaxNum],XOYPoint[MaxNum],YOZPoint[MaxNum],YOYPoint[MaxNum];voidThPmidInit(){ PointNum=4; Point[0].x=400,Point[0].y=0,Point[0].z=0,Point[0].tag=1; Point[1].x=400,Point[1].y=200,Point[1].z=0,Point[1].tag=1; Point[2].x=0,Point[2].y=200,Point[2].z=0,Point[2].tag=1; Point[3].x=200,Point[3].y=200,Point[3].z=200,Point[3].tag=1; FaceNum=4; Face[0].push_back(0);Face[0].push_back(1);Face[0].push_back(2); Face[1].push_back(0);Face[1].push_back(1);Face[1].push_back(3); Face[2].push_back(0);Face[2].push_back(2);Face[2].push_back(3); Face[3].push_back(1);Face[3].push_back(2);Face[3].push_back(3);}voidTransForm(DefPointNewPoint[],DefPointOldPoint[],doubleTran[4][4]){ for(inti=0;i<PointNum;i++){ doubletx=OldPoint[i].x,ty=OldPoint[i].y, tz=OldPoint[i].z,ttag=OldPoint[i].tag; NewPoint[i].x=tx*Tran[0][0]+ty*Tran[1][0]+ tz*Tran[2][0]+ttag*Tran[3][0]; NewPoint[i].y=tx*Tran[0][1]+ty*Tran[1][1]+ tz*Tran[2][1]+ttag*Tran[3][1]; NewPoint[i].z=tx*Tran[0][2]+ty*Tran[1][2]+ tz*Tran[2][2]+ttag*Tran[3][2]; NewPoint[i].tag=tx*Tran[0][3]+ty*Tran[1][3]+ tz*Tran[2][3]+ttag*Tran[3][3]; if(NewPoint[i].tag!=0&&NewPoint[i].tag!=1){ NewPoint[i].x/=NewPoint[i].tag, NewPoint[i].y/=NewPoint[i].tag, NewPoint[i].z/=NewPoint[i].tag, NewPoint[i].tag=1; } }}voidReShape(intw,inth){ winWidth=w;winHeight=h; glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,winWidth,0.0,winHeight);}voidOnDraw(DefPointTempPoint[]){ glBegin(GL_LINES); for(inti=0;i<FaceNum;i++){ intsize=Face[i].size(); for(intj=0;j<size;j++){ glVertex2d(TempPoint[Face[i][j]].x, TempPoint[Face[i][j]].z); glVertex2d(TempPoint[Face[i][(j+1)%size]].x, TempPoint[Face[i][(j+1)%size]].z); } } glEnd();}voidOnDraw_O(DefPointTempPoint[]){ glColor3f(1.0f,0.0f,0.0f); glBegin(GL_LINES); glVertex2d(TempPoint[0].x,TempPoint[0].y); glVertex2d(TempPoint[1].x,TempPoint[1].y); glVertex2d(TempPoint[0].x,TempPoint[0].y); glVertex2d(TempPoint[2].x,TempPoint[2].y); glVertex2d(TempPoint[0].x,TempPoint[0].y); glVertex2d(TempPoint[3].x,TempPoint[3].y); glVertex2d(TempPoint[1].x,TempPoint[1].y); glVertex2d(TempPoint[2].x,TempPoint[2].y); glVertex2d(TempPoint[1].x,TempPoint[1].y); glVertex2d(TempPoint[3].x,TempPoint[3].y); glVertex2d(TempPoint[2].x,TempPoint[2].y); glVertex2d(TempPoint[3].x,TempPoint[3].y); glEnd();}voidDisplay(){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0f,0.0f,0.0f); glBegin(GL_LINES); glVertex2d(winWidth/2,0); glVertex2d(winWidth/2,winHeight); glVertex2d(0,winHeight/2); glVertex2d(winWidth,winHeight/2); glEnd(); glColor3f(1.0f,0.0f,0.0f); OnDraw(XOZPoint); glColor3f(0.0f,1.0f,0.0f); OnDraw(XOYPoint); glColor3f(0.0f,0.0f,1.0f); OnDraw(YOZPoint); glColor3f(1.0f,0.0f,0.0f); OnDraw_O(YOYPoint); glutSwapBuffers();}voidGetThPmidView(){ TransForm(XOZPoint,Point,XOZ); TransForm(XOYPoint,Point,XOY); TransForm(YOZPoint,Point,YOZ); TransForm(YOYPoint,Point,YOY); TransForm(XOZPoint,XOZPoint,Matrix); TransForm(XOYPoint,XOYPoint,Matrix); TransForm(YOZPoint,YOZPoint,Matrix); TransForm(YOYPoint,YOYPoint,Matrix);}voidInitial(){ for(inti=0;i<10;i++)Face[i].clear(); glClearColor(1.0f,1.0f,1.0f,1.0f); ThPmidInit(); GetThPmidView();}voidSpecialKey(intkey,intx,inty){ if(key==GLUT_KEY_PAGE_UP){ //Rotate TransForm(Point,Point,Rotate); TransForm(XOZPoint,Point,XOZ); TransForm(XOYPoint,Point,XOY); TransForm(YOZPoint,Point,YOZ); TransForm(YOYPoint,Point,YOY); TransForm(XOZPoint,XOZPoint,Matrix); TransForm(XOYPoint,XOYPoint,Matrix); TransForm(YOZPoint,YOZPoint,Matrix); TransForm(YOYPoint,YOYPoint,Matrix); } if(key==GLUT_KEY_PAGE_DOWN){ //Rotate TransForm(Point,Point,RotateR); TransForm(XOZPoint,Point,XOZ); TransForm(XOYPoint,Point,XOY); TransForm(YOZPoint,Point,YOZ); TransForm(YOYPoint,Point,YOY); TransForm(XOZPoint,XOZPoint,Matrix); TransForm(XOYPoint,XOYPoint,Matrix); TransForm(YOZPoint,YOZPoint,Matrix); TransForm(YOYPoint,YOYPoint,Matrix); } glutPostRedisplay();}intmain(intargc,char*argv[]){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论