report4郭小明 三维图形程序设计 电子科技大学(3)

2019-05-27 20:45

}

void create_ceil() {

/************************************************************************/ /*采用纹理贴图的方式,就可以放弃循环画小图的方式了,下面的代码就不再使用*/ /************************************************************************/ /* int j =1; int i=1;

glTranslatef(0,height,0);

//glBindTexture(GL_TEXTURE_2D,textures[1]); glNormal3f(0,1,0); for(;j<=16;j++) {

glTranslatef(-wide+j*wide/8-wide/16,0,0); for(i=1;i<=16;i++)

glBindTexture(GL_TEXTURE_2D,textures[1]); glBegin(GL_QUADS);

glColor4f(0.4,0.3,0.3,0.6); glNormal3f(0,-1,0); glTexCoord2f(0.0,0.0); glVertex3f(-wide,height,-Dept); glTexCoord2f(16.0,0); glVertex3f(wide,height,-Dept); glTexCoord2f(16.0,16.0); glVertex3f(wide,height,Dept); glTexCoord2f(0.0,16.0); glVertex3f(-wide,height,Dept);

glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,Material_ambient); glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,Material_diffuse); glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,Material_specular); glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,Material_shiness); GLfloat Material_ambient[4]={0.8,0.8,0.8,1.0}; GLfloat Material_diffuse[4]={0.8,0.8,0.8,1.0}; GLfloat Material_specular[4]={0.4,0.3,0.5,1.0}; GLfloat Material_shiness = 1.0;

glVertex3f(wide/16,0,-Dept/16); glVertex3f(-wide/16,0,-Dept/16);

glEnd();

glEnd();

}

void drawSphere(GLfloat xx=0,GLfloat yy=0,GLfloat zz=0,int flag=0) {

x[0] = radius * sin(angle_z) * cos(angle_xy); y[0] = radius * sin(angle_z) * sin(angle_xy); z[0] = radius * cos(angle_z);

for(j=0; j

angle_xy = j * step_xy;

float angle_z = 0.0; float angle_xy = 0.0; int i=0, j=0; if(flag == 0) else

glColor3f(1.0,1.0,1.0); glBegin(GL_QUADS); for(i=0; i

angle_z = i * step_z; glColor3f(0.5,0.25,0); GLfloat radius; if(flag == 0) else

radius=wide/16; GLfloat M=20; GLfloat N=20; float step_z = PI/M; float step_xy = 2*PI/N; float x[4],y[4],z[4];

radius=2*wide/8; }

glTranslatef(0,-height,0); */

{ }

glTranslatef(wide-j*wide/8+wide/16,0,0);

glTranslatef(0,0,-Dept+i*Dept/8-Dept/16); create_quad(i,j);

glTranslatef(0,0,Dept-i*Dept/8+Dept/16);

}

void yuanzhui() {

glTranslatef(-wide/2,-height,-Dept/2); glBegin(GL_TRIANGLE_FAN); glColor3f(0,0.25,0.5); glNormal3f(1,1,1); glVertex3f(0,height/1.2,0); for(int i=0;i<=32;i++) { } glEnd();

glBegin(GL_TRIANGLE_FAN);

glColor3f(0,0.25,0.5); glNormal3f(0,1,0); glVertex3f(0,0,0); for(int i=0;i<=32;i++) { }

glVertex3f(0.2*cos(i*PI/16), 0.01 , 0.2*sin(i*PI/16)); glVertex3f(0.2*cos(i*PI/16),0,0.2*sin(i*PI/16)); } glEnd();

}

for(int k=0; k<4; k++) { }

glNormal3f(x[k],y[k],z[k]);

glVertex3f(xx+x[k], yy+y[k],zz+z[k]);

x[3] = radius * sin(angle_z) * cos(angle_xy + step_xy); y[3] = radius * sin(angle_z) * sin(angle_xy + step_xy); z[3] = radius * cos(angle_z);

x[2] = radius*sin(angle_z + step_z)*cos(angle_xy + step_xy); y[2] = radius*sin(angle_z + step_z)*sin(angle_xy + step_xy); z[2] = radius*cos(angle_z + step_z);

x[1] = radius * sin(angle_z + step_z) * cos(angle_xy); y[1] = radius * sin(angle_z + step_z) * sin(angle_xy); z[1] = radius * cos(angle_z + step_z);

glEnd();

glTranslatef(wide/2,height,Dept/2);

}

void createFurnishings() { }

void draw(GLenum mode) { }

void display() { }

int flag_move = 0 ;

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60,1,1,30);

gluLookAt(eyex,eyey,eyez,0,0,0,0,1,0); draw(GL_RENDER); glFlush(); glutSwapBuffers();

createLightAndProxy(mode); create_wall(); create_floor(); create_ceil(); createFurnishings();

glMatrixMode(GL_MODELVIEW); if(flag_light == 1) { } else { }

glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);

glTranslatef(0,-height+2*wide/8,-Dept+2*Dept/8); drawSphere();

glTranslatef(0,height-2*wide/8,Dept-2*Dept/8); yuanzhui();

void process(GLint hits,GLuint buffer[]) { }

GLuint select_Buffer[SIZE];

void mouse(int key,int state,int x,int y) {

gluPickMatrix((GLdouble)x,(GLdouble)(viewport[3]-y),5,5,viewport); gluPerspective(60,1,1,30);

glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity();

glInitNames(); glPushName(0);

glSelectBuffer(SIZE,select_Buffer); glRenderMode(GL_SELECT); GLint hits; GLint viewport[4];

if(key == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {

mousex = x; mousey = y;

glGetIntegerv(GL_VIEWPORT,viewport); ptr = (GLint *) buffer; for (i = 0; i < hits; i++) { }

names = *ptr; ptr+=3;

for (j = 0; j < names; j++) { /* for each name */ }

if(*ptr==1) { } ptr++;

flag_move = 1;

/* for each hit */

unsigned int i, j; GLint names, *ptr;


report4郭小明 三维图形程序设计 电子科技大学(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:51单片机寄存器学习总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: