OpenGL绘制3D企鹅


一个用OpenGL写的3D很萌的企鹅,实现了鼠标控制旋转,键盘o和p设置正交投影和透视投影。
资源截图
代码片段和文件信息
#include 
#include 
#include 
#include 
#include 
#include 

#define PI 3.141592

static float c= PI/180.0f; //弧度和角度转换参数
static int du = 90oldmy = -1oldmx = -1; //du是视点绕y轴的角度opengl里默认y轴是上方向
static float r = 2.0fh = 0.0f; //r是视点绕y轴的半径h是视点高度即在y轴
static float width = 500 height = 500;
static bool isPers = true;

void init() 
{
glClearColor (1.0 1.0 1.0 1.0);
glShadeModel (GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINTGL_NICEST); 

const GLfloat light_ambient[]  = { 0.1f 0.1f 0.1f 1.0f };
const GLfloat light_diffuse[]  = { 1.0f 1.0f 1.0f 1.0f };
const GLfloat light_specular[] = { 1.0f 1.0f 1.0f 1.0f };
const GLfloat light_position[] = { 0.5f 0.5f -0.5f 1.0f };

const GLfloat mat_ambient[]    = { 0.5f 0.5f 0.5f 1.0f };
const GLfloat mat_diffuse[]    = { 0.5f 0.5f 0.5f 1.0f };
const GLfloat mat_specular[]   = { 0.3f 0.3f 0.3f 1.0f };
const GLfloat high_shininess[] = { 100.0f };

glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);

    glLightfv(GL_LIGHT0 GL_AMBIENT  light_ambient);
    glLightfv(GL_LIGHT0 GL_DIFFUSE  light_diffuse);
    glLightfv(GL_LIGHT0 GL_SPECULAR light_specular);
    glLightfv(GL_LIGHT0 GL_POSITION light_position);

    glMaterialfv(GL_FRONT GL_AMBIENT   mat_ambient);
    glMaterialfv(GL_FRONT GL_DIFFUSE   mat_diffuse);
    glMaterialfv(GL_FRONT GL_SPECULAR  mat_specular);
    glMaterialfv(GL_FRONT GL_SHININESS high_shininess);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);

//关闭背面顶点的计算
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE  GL_FALSE);
}

void display()
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

if(isPers){
gluPerspective(50 1 1 10);
gluLookAt( r * cos(c * du) h r * sin(c * du)
0 0 0
0 1 0);
} else {
glLoadIdentity();
gluOrtho2D(-(GLdouble) height/height (GLdouble) height/height -(GLdouble) height/height (GLdouble) height/height);
}

static int list = 0; 
if( list == 0 ) 
{
 // 嘴的数组
GLfloat PointA[] = {0 0.0 0.28}
PointB[] = {-0.15 0.1 0.28}
PointC[] = {0.15 0.1 0.28}
PointD[] = {0 0.1 0.45}
PointE[] = {0 0.15 0.28};
GLfloat ColorR[] = {0 0 1};

// 组成嘴的六个三角形
glNewList(list GL_COMPILE);
glColor3f(1 0.6 0);
glBegin(GL_TRIANGLES);   
// 平面BDC
glColor3f(1 0.6 0);
glVertex3fv(PointC);
glColor3f(1 1.0 0);
glVertex3fv(PointD);
glColor3f(1 0.6 0);
glVertex3fv(PointB);
// 平面ADB
glColor3f(1 0.6 0);
glVertex3fv(PointA);
glColor3f(1 0.6 0);
glVertex3fv(PointB);
glColor3f(1 0.8 0);
glVertex3fv(PointD);
// 平面ACD
glColor3f(1 1.0 0);
glVertex3fv(PointD);
glColor3f(1 0.6 0);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      75776  2013-10-13 22:28  DebugHomework.exe

     文件    1462432  2013-10-13 22:28  DebugHomework.ilk

     文件     896000  2013-10-13 22:28  DebugHomework.pdb

     文件        572  2013-10-13 22:28  HomeworkDebugcl.command.1.tlog

     文件      22226  2013-10-13 22:28  HomeworkDebugCL.read.1.tlog

     文件        264  2013-10-13 22:28  HomeworkDebugCL.write.1.tlog

     文件         53  2013-10-13 22:28  HomeworkDebugHomework.lastbuildstate

     文件       1226  2013-10-13 22:28  HomeworkDebugHomework.log

     文件          2  2013-10-13 22:28  HomeworkDebuglink-cvtres.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink-cvtres.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink-rc.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink-rc.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2612-cvtres.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2612-cvtres.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2612-rc.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2612-rc.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2612.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2612.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2648-cvtres.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2648-cvtres.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2648-rc.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2648-rc.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2648.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.2648.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.3252-cvtres.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.3252-cvtres.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.3252-rc.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.3252-rc.write.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.3252.read.1.tlog

     文件          2  2013-10-13 22:28  HomeworkDebuglink.3252.write.1.tlog

............此处省略73个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)