《計算機圖形學(xué)》實驗報告4_第1頁
《計算機圖形學(xué)》實驗報告4_第2頁
《計算機圖形學(xué)》實驗報告4_第3頁
《計算機圖形學(xué)》實驗報告4_第4頁
《計算機圖形學(xué)》實驗報告4_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

《計算機圖形學(xué)》實驗報告(4)學(xué)號:10131656姓名:邱家輝班級:計131成績:實驗名稱:三視圖與旋轉(zhuǎn)實驗地點:信息樓215所使用的工具軟件及環(huán)境:C++.NET、OpenGL一、實驗?zāi)康模?、用OpenGL實現(xiàn)繪制三視圖2、用OpenGL實現(xiàn)物體的旋轉(zhuǎn)二、實驗思考:#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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論