计算机图形学三维建模及灯光作业(派大星)

计算机图形学设计人物派大星,以下是参考代码。

需要函数库的私信我。

运行环境:VC 6.0
引擎库:OpenGL
在这里插入图片描述
完整代码:

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
#include <iostream.h>

static GLfloat angle = 0.0;
static GLfloat angle1 = 0.0;
static GLfloat angle2 = 0.0;
static GLfloat angle3 = 0.0;
static GLfloat angle4 = 0.0;
GLfloat light_position[] = {10.0, 40.0, 6.0, 1.0};
GLfloat light_color[] = {1.0, 1.0, 1.0, 1.0};
GLfloat ambient_color[] = {0.2, 0.2, 0.2, 1.0};
GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0};
GLfloat red[] = {0.99, 0.4, 0.4},
        black[] ={0.0, 0.0, 0.0},
        silver[] = {0.8, 0.8, 0.8};
GLfloat green[] = {0.16, 0.59, 0.35},
        white[] = {1.0, 1.0, 1.0},
        yellow[] ={1.0, 1.0, 0.0};
GLfloat ye[] ={0.6, 0.95, 0.2};
GLfloat mat_shininess[] = {50.0};
GLUquadric *LV, *RV, *H, *LP, *RP;

void myinit(void)
{
 //set up overall light data, including specular=ambient=light colors
 glClearColor(0.874, 0.52, 0.56, 0.0);
 glShadeModel(GL_SMOOTH);
 glLightfv(GL_LIGHT0,GL_AMBIENT,ambient_color);
 glLightfv(GL_LIGHT0,GL_SPECULAR,light_color);
 glLightfv(GL_LIGHT0,GL_DIFFUSE,light_color);
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 glEnable(GL_DEPTH_TEST);
}
//头
void personHead(void)
{
 glPushMatrix();
 glTranslatef(0.0,0.0,20.0);
 glScalef(1.0,1.0,2.0);
 glutSolidSphere(1.5,20,20);
 glPopMatrix();
 glPushMatrix();
 glTranslatef(0.0,0.0,17.0);
 glScalef(1,1,2);
 glutSolidSphere(2,26,26);
 glPopMatrix();
 glPushMatrix();
 glTranslatef(0.0,0.0,14.0);
 glScalef(1,1,2);
 glutSolidSphere(2.5,32,32);
 glPopMatrix();
}
//身体
void personBody2(void)
{
 glPushMatrix();
 glTranslatef(0.0,0.0,8.0);
 glScalef(1,1,1);
 glutSolidSphere(5,30,30);
 glPopMatrix();
}
void personBody3(void)
{
 glPushMatrix();
 glTranslatef(0.0,0.0,8.3);
 glScalef(1,1,1);
 glutSolidSphere(5.1,30,30);
 glPopMatrix();
}
void personBody(void)
{
 glPushMatrix();
 glTranslatef(0.0,0.0,11.6);
 glScalef(1.0,1.0,1);
 glutSolidSphere(3.5,20,20);
 glPopMatrix();
}
//左胳膊
void personArmLeft(void)
{
 glPushMatrix();
 glTranslatef(5.2,0.0,10.0);
 glRotatef(130,0,1,0);
 glScalef(1.0,1.0,3);
 glutSolidSphere(1.2,20,20);
 glPopMatrix();
}
//左腿
void personLegLeft(void)
{
 glPushMatrix();
 //glRotatef(170,0,1,0);
 glTranslatef(-2,0.0,2.5);
 glScalef(1.0,1.0,2.5);
 glutSolidSphere(1.2,20,20);
 glPopMatrix();
}
void personLegLeft2(void)
{
 glPushMatrix();
 //glRotatef(170,0,1,0);
 glTranslatef(-2,0.0,4.2);
 glScalef(1.0,1.0,2.5);
 glutSolidSphere(1.4,20,20);
 glPopMatrix();
}
//右胳膊
void personArmRight(void)
{
 glPushMatrix();
 glTranslatef(-5.2,0.0,10.0);
 glRotatef(-130,0,1,0);
 glScalef(1.0,1.0,3);
 glutSolidSphere(1.2,20,20);
 glPopMatrix();
}
//右腿
void personLegRight(void)
{
 glPushMatrix();
 //glRotatef(-170,0,1,0);
 glTranslatef(2,0.0,2.5);
 glScalef(1.0,1.0,2.5);
 glutSolidSphere(1.2,20,20);
 glPopMatrix();
}
void personLegRight2(void)
{
 glPushMatrix();
 //glRotatef(-170,0,1,0);
 glTranslatef(2,0.0,4.2);
 glScalef(1.0,1.0,2.5);
 glutSolidSphere(1.4,20,20);
 glPopMatrix();
}
//眼睛
void personEye(void)
{
 glPushMatrix();
 glTranslatef(1,1.8,17.5);
 glScalef(1.0,1.0,1.5);
 glutSolidSphere(1,30,30);
 glPopMatrix();
    glPushMatrix();
 glTranslatef(-1,1.8,17.5);
 glScalef(1.0,1.0,1.5);
 glutSolidSphere(1,30,30);
 glPopMatrix();
}
void personEye2(void)
{
 glPushMatrix();
 glTranslatef(1,2.6,17);
 glScalef(1.0,1.0,1.5);
 glutSolidSphere(0.4,30,30);
 glPopMatrix();
    glPushMatrix();
 glTranslatef(-1,2.6,17);
 glScalef(1.0,1.0,1.5);
 glutSolidSphere(0.4,30,30);
 glPopMatrix();
}
//嘴巴
void personMouse(void)
{
 glPushMatrix();
 glTranslatef(0,2,14.3);
 glScalef(2.0,1.0,0.1);
 glutSolidSphere(0.8,30,30);
 glPopMatrix();
}

void display(void)
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 glPushMatrix();
 glRotatef(angle,0.0,0.0,1.0);//rotate model
 glLightfv(GL_LIGHT0,GL_POSITION,light_position);
 glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular);
 glMaterialfv(GL_FRONT_AND_BACK,GL_SHININESS,mat_shininess);
 //ground
 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,green);
 glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,green);
 glBegin(GL_QUADS);
 glNormal3f(0.0,1.0,0.0);
 glVertex3f(-20.0,-10.0,-10.0);
 glVertex3f(20.0,-10.0,-10.0);
 glVertex3f(20.0,10.0,-10.0);
 glVertex3f(-20.0,10.0,-10.0);
 glEnd();

 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,white);
 glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,white);

 glPushMatrix();
 personEye();
 glPopMatrix();

 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,black);
 glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,black);
 
 glPushMatrix();
 personEye2();
 personMouse();
 glPopMatrix();

 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,ye);
 glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,ye);

 glPushMatrix();
 personBody2();
 glPushMatrix();
 glRotatef(angle2,0.0,0.0,1.0);  //W:左腿旋转
 glPushMatrix();
 personLegLeft2();
 glPopMatrix();
 glPopMatrix();
 glPushMatrix();
 glRotatef(angle4,0.0,0.0,1.0);  //S:右腿旋转
 glPushMatrix();
 personLegRight2();
 glPopMatrix();
 glPopMatrix();
 glPopMatrix();

 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,red);
 glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,red);

 glPushMatrix();
 personHead();
 personBody();
 personBody3();
 glPopMatrix();
 glPushMatrix();
 glRotatef(angle1,0.0,0.0,1.0);  //A:左胳膊旋转
 glPushMatrix();
 personArmLeft();
 glPopMatrix();
 glPopMatrix();

 glPushMatrix();
 glRotatef(angle2,0.0,0.0,1.0);  //W:左腿旋转
 glPushMatrix();
 personLegLeft();
 personLegLeft2();
 glPopMatrix();
 glPopMatrix();
 
 glPushMatrix();
 glRotatef(angle3,0.0,0.0,1.0);  //D:右胳膊旋转
 glPushMatrix();
 personArmRight();
 glPopMatrix();
 glPopMatrix();

 glPushMatrix();
 glRotatef(angle4,0.0,0.0,1.0);  //S:右腿旋转
 glPushMatrix();
 personLegRight();
 glPopMatrix();
 glPopMatrix();
 glPopMatrix();
 glutSwapBuffers();
}
void reshape(int w,int h)
{
 glViewport(0,0,(GLsizei)w,(GLsizei)h);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluPerspective(90.0,1.0,0.6,50.0);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 gluLookAt(0.0,30.0,6.0, 0.0,0.0,6.0, 0.0,0.0,1.0);
}
void keyboard(unsigned char key,int x, int y)
{
 switch (key)
 {
 case 'R':  //整体旋转
  angle += 10.0;
  glutPostRedisplay();
  break;
 case 'T':  //整体平移
  glTranslatef(1.0,0.0,0.0);
  glutPostRedisplay();
  break;
 case 'A':  //左胳膊旋转
  angle1 += 10.0;
  glutPostRedisplay();
  break;
 case 'D':  //右胳膊旋转
  angle3 += 10.0;
  glutPostRedisplay();
  break;
 case 'W':  //左腿旋转
  angle2 += 10.0;
  glutPostRedisplay();
  break;
 case 'S':  //右腿旋转
  angle4 += 10.0;
  glutPostRedisplay();
  break;
 }
}
int main(int argc,char** argv)
{
 cout<<"功能键介绍:"<<endl;
 cout<<"'R': 整体旋转"<<endl;
 cout<<"'T': 整体平移"<<endl;
 cout<<"'A': 左胳膊旋转"<<endl;
 cout<<"'D': 右胳膊旋转"<<endl;
 cout<<"'W': 左腿旋转"<<endl;
 cout<<"'S': 右腿旋转"<<endl;
 glutInit(&argc,argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
 glutInitWindowSize(500,500);
 glutInitWindowPosition(0,0);
 glutCreateWindow("光照派大星");
 glutDisplayFunc(display);
 glutReshapeFunc(reshape);
 glutKeyboardFunc(keyboard);
 myinit();
 glutMainLoop();
 return 0;
 }

效果图:
在这里插入图片描述

  • 18
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Xposed派大星是一个非常受欢迎的Android开发工具,它允许用户通过安装模块来定制和修改他们的设备。这个工具可以在不修改设备固件或刷机的情况下改变Android系统的行为。用户只需安装Xposed框架,并在框架上安装各种模块,就能更改系统的各个方面和功能。 Xposed派大星的使用非常简单,不需要专业的编程知识。在安装好框架后,用户可以选择性地下载和安装各种模块,这些模块可以实现诸如伪装应用标识、修改系统设置、去除广告、增加功能等等的目的。可以说,Xposed派大星为用户提供了在不更改设备固件的情况下个性化定制他们的Android设备的方式。 Xposed派大星的优点是它的灵活性和可定制性。用户可以根据自己的需求选择安装适合的模块,将Android设备调整得更加适合自己的使用习惯和喜好。另外,由于不需要刷机操作,所以使用Xposed派大星的风险相对较低,用户可以随时卸载模块或者禁用框架,恢复设备到初始状态。 然而,使用Xposed派大星也存在一些风险和注意事项。由于它可以修改系统的行为,不正确的使用或安装不可靠的模块可能导致系统不稳定甚至无法正常运行。因此,在使用Xposed派大星之前,用户应该对自己的操作有一定的了解,并注意安装来自可信来源的模块。 总体而言,Xposed派大星是一个功能强大且受欢迎的Android开发工具,它为用户提供了个性化定制Android设备的途径。用户可以根据自己的需求安装各种模块,定制自己的设备功能,但在使用时也要注意风险和慎重选择模块,以保障系统的稳定性和安全性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值