opengl源文件_plane_作业.docx_第1页
opengl源文件_plane_作业.docx_第2页
opengl源文件_plane_作业.docx_第3页
opengl源文件_plane_作业.docx_第4页
opengl源文件_plane_作业.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

#include #include #include#include #include #include #define pi 3.1415926#include MilkModel.h / Header File For Milkshape File/*实现还需几个头文件,然后建立工程*/void init(void);void CALLBACK reshape(GLsizei w,GLsizei h);void CALLBACK On0KeyDown(void);void CALLBACK On1KeyDown(void);void CALLBACK OnSpaceDown(void);void CALLBACK OnLButtonDown(AUX_EVENTREC *);void CALLBACK OnLButtonMove(AUX_EVENTREC *);void CALLBACK display(void);void pickObjects(void);void processHits (GLint hits, GLuint buffer);void drawCoordinates(void);void load_oro(void);void load_photo(void);void draw_photo(void);GLint mx,my; /position of mouseGLint hits,pick;/ for the picking GLint m_state=0,space=1; /mouse usage and the space keyGLfloat x_angle=12.0f, y_angle=8.0f,t_angle=0.0f;/angle of eyeGLdouble dist=30; /distance from the eyeGLuint i_pick=0;/ for pickingGLdouble r=45000;GLuint texPhoto = 0;/photo textureint sizeX, sizeY; /photo size;extern void DrawBitmapString(LPCSTR str);extern void DrawOutlineString(LPCSTR str);extern SIZE GetStringSize(LPCSTR str);extern void ReadDEM(char *); /read DEMGLdouble nearclip; GLdouble farclip; GLdouble steps; const GLdouble stepa = 0.2; GLdouble rx,rz; float xOrg, yOrg; float angle; float dx, dy; int nx, ny; float *pHight = NULL;GLuint texture = 0;void init(void)/初始化glClearColor(0.0f,0.0f,0.0f,0.0f);glClear(GL_COLOR_BUFFER_BIT);if (loadModelData(Aereo.ms3d) = 0) / Loads The Model And Checks For Errorsreturn;loadTextures();/ Loads Model Texturesload_oro();load_photo();void load_photo(void)AUX_RGBImageRec *pImage;/Make texturepImage = auxDIBImageLoad(photo.bmp);sizeX = pImage-sizeX;sizeY = pImage-sizeY; glGenTextures(1, &texPhoto);glBindTexture(GL_TEXTURE_2D, texPhoto);gluBuild2DMipmaps(GL_TEXTURE_2D, 3, pImage-sizeX, pImage-sizeY, GL_RGB, GL_UNSIGNED_BYTE, pImage-data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);free(pImage-data);free(pImage);glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);void load_oro(void)AUX_RGBImageRec *pImage;/Load DEMReadDEM(terrain.dem);rx = (nx-1)*dx;/地形图的x长度rz = (ny-1)*dy;/地形图的z长度nearclip=0.1*(rx+rz);farclip=200*nearclip;steps =dx+dy;/每一步dist大小dist=(rx+rz)*20/12;/Make texturepImage = auxDIBImageLoad(terrain.bmp);glGenTextures(1, &texture);glBindTexture(GL_TEXTURE_2D, texture);glTexImage2D(GL_TEXTURE_2D, 0, 3, pImage-sizeX, pImage-sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImage-data);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);free(pImage-data);free(pImage);glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);void CALLBACK AnimateFunc(void)/运动的图形,按下space静止if(space=1)t_angle=t_angle-5.0f;if(t_angle=-360)t_angle=360+t_angle;display();else return;void CALLBACK reshape(GLsizei w,GLsizei h)/调整窗口glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(hdataAUX_MOUSEX-mx;dy = event-dataAUX_MOUSEY-my;mx=event-dataAUX_MOUSEX;my=event-dataAUX_MOUSEY;if(m_state = 0)y_angle += dx*0.1f;x_angle += dy*0.1f;else if(m_state = 1)dist += (dx+dy)*steps;display();void CALLBACK OnLButtonDown(AUX_EVENTREC *event)mx=event-dataAUX_MOUSEX;my=event-dataAUX_MOUSEY;pickObjects();#define BUFSIZE 600void pickObjects(void)/用于实现picking,重新画出图形所处的位置double i;GLuint selectBufBUFSIZE;GLint hits;GLint viewport4;glGetIntegerv(GL_VIEWPORT, viewport);glSelectBuffer(BUFSIZE, selectBuf); glRenderMode(GL_SELECT);glInitNames(); glPushName(0); glMatrixMode(GL_PROJECTION);glPushMatrix(); glLoadIdentity();gluPickMatrix(GLdouble)mx, (GLdouble)(viewport3-my),30, 30, viewport);gluPerspective(30.0, 1.0*viewport2/viewport3, nearclip, farclip);/视景大小glMatrixMode(GL_MODELVIEW);glLoadIdentity();glPushMatrix();glTranslated(-rx*2/3,0,-0.5*dist);glRotatef(x_angle, 1.0f, 0.0f, 0.0f);glRotatef(y_angle, 0.0f, 1.0f, 0.0f);glPushMatrix();glTranslated(rx*2/3, 15000.0f,rz*1/2);/画图点击的位置glRotatef(t_angle, 0.0f, 1.0f, 0.0f);for(i=0;i8;i+)/飞机个数(8)glPushName(GLuint) i);glPushMatrix();glTranslated(r*cos(i*pi/4),0.5,-(r*sin(i*pi/4);glRotated(i*45,0.0,1.0,0.0);glScalef(500,500,500);drawModel(0);/the place of the model !glPopMatrix();glPopName();glPopMatrix();glPopMatrix();glFlush();hits = glRenderMode(GL_RENDER);processHits(hits, selectBuf);/纪录点击成功glMatrixMode(GL_PROJECTION);glPopMatrix();glMatrixMode(GL_MODELVIEW); void processHits(GLint hits, GLuint buffer)/纪录点击是否成功GLuint i, minz;if(hits1) return;pick=1;for(i=0;i bufferi*5+1)minz = bufferi*5+1;i_pick = bufferi*5+4; void CALLBACK display(void)/实现图形的显现double i;int k, j;glClearColor(0.0f,0.2941176470588235f,0.4156862745098039f,0.0f);glClearDepth(1.0);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glEnable(GL_DEPTH_TEST);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(30.0, 1.0*1200/688,nearclip,farclip);/实景深度400glMatrixMode(GL_MODELVIEW);glLoadIdentity();glPushMatrix(); glTranslated(-rx*2/3,0,-0.5*dist);glRotatef(x_angle, 1.0f, 0.0f, 0.0f);glRotatef(y_angle, 0.0f, 1.0f, 0.0f);drawCoordinates();glPushMatrix();glTranslated(rx*2/3, 15000.0f,rz*1/2);/画图的位置glRotatef(t_angle, 0.0f, 1.0f, 0.0f);for(i=0;i8;i+)/画出选择图形glPushMatrix();glTranslated(r*cos(i*pi/4),0.5,-(r*sin(i*pi/4);/飞机的个数glRotated(i*45,0.0,1.0,0.0);if(i=i_pick&pick=1)glRotatef(-45,0.0,0.0,1.0);/旋转飞机glPushMatrix();glScalef(500,500,500);/放大飞机drawModel(1);glPopMatrix();glPopMatrix();glPopMatrix();glPushMatrix();glDisable(GL_LIGHTING);glBindTexture(GL_TEXTURE_2D, texture);glEnable(GL_TEXTURE_2D);for(j=0; jny-1; j+)glBegin(GL_QUAD_STRIP);for(k=0; knx; k+)glTexCoord2f(k*1.0f/(nx-1), j*1.0f/(ny-1);glVertex3f(k*dx,pHightj*nx+k,j*dy);glTexCoord2f(k*1.0f/(nx-1), (j+1)*1.0f/(ny-1);glVertex3f(k*dx,pHight(j+1)*nx+k,(j+1)*dy);glEnd();glPopMatrix();glPopMatrix();glFlush();draw_photo();auxSwapBuffers(); void draw_photo()GLint rect4;LPSTR pText = *;/your name SIZE size; glGetIntegerv(GL_VIEWPORT, rect);glEnable(GL_TEXTURE_2D);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0, rect2, 0, rect3);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glBindTexture(GL_TEXTURE_2D, texPhoto);glBegin(GL_QUADS);glTexCoord2f(0.0f, 0.0f); glVertex2f(0.8f*rect2, 0.0f);glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f*rect2, 0.0f);glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f*rect2, 0.2f*rect2*sizeY/sizeX);glTexCoord2f(0.0f, 1.0f); glVertex2f(0.8f*rect2, 0.2f*rect2*sizeY/sizeX);glEnd();glDisable(GL_TEXTURE_2D);size = GetStringSize(pText);glColor3f(1.0f, 1.0f, 0.0f);glRasterPos2f(0.9f*rect2-size.cx/2, 0.2f*rect2*sizeY/sizeX+5);DrawBitmapString(pText);glFlush();void drawCoordinates(void)/画坐标轴glColor3f(1.0f,0.0f,0.0f); /画红色的x轴glBegin(GL_LINES);glVertex3f(0.0f, 0.0f, 0.0f);glVertex3f(50000.0f, 0.0f, 0.0f);glEnd();glColor3f(0.0,1.0,0.0); /画绿色的y轴glBegin(GL_LINES);glVertex3f(0.0f, 0.0f, 0.0f);glVertex3f(

温馨提示

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

评论

0/150

提交评论