• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: OPENGL  3D  

资源简介

OPENGL学习材料,3D小雪人画面,非常适合初学者使用。O(∩_∩)O哈哈~

资源截图

代码片段和文件信息


#include 
#include 
#include 

static float angle=0.0ratio;
static float x=0.0fy=1.75fz=5.0f;    //照相机所在位置
static float lx=0.0fly=0.0flz=-1.0f; //观察方向
static GLint snowman_display_list;

void DrawSnowman()
{
  glColor3f(1.01.01.0);

  //画身体
  glTranslatef(0.0f0.75f0.0f);   //坐标转换,用当前矩阵乘以参数指定的平移矩阵
  glutSolidSphere(0.75f2020);    //绘制实心球体。
   //0.75f球体的半径;
   //20球体围绕z轴(相对于经度线)分割的数目;
   //20球体沿着z轴(相对于维度线)分割的数目
   //glutWireSphere(GLdouble radiusGLint slicesGLint stacks)—绘制线框球体参数意义同上。
  //画脑袋
  glTranslatef(0.0f1.0f0.0f);
  glutSolidSphere(0.25f2020);
  //画眼睛
  glPushMatrix();
  glColor3f(0.0f0.0f0.0f);

  glTranslatef(0.05f0.1f0.18f);
  glutSolidSphere(0.05f1010);
  glTranslatef(-0.1f0.0f0.0f);
  glutSolidSphere(0.05f1010);

  glPopMatrix();
  //画鼻子
  glColor3f(1.0f0.5f0.5f);
  glRotatef(0.0f1.0f0.0f0.0f);
  glutSolidCone(0.08f0.5f102);   //绘制实心圆锥体
//0.08f圆锥体基底的半径;
//0.5f圆锥体的高度;
//10圆锥体围绕z轴的分割数;
//2圆锥体沿着z轴的分割数  
//glutSolidTorus(GLdouble innerradiusGLdouble outerradiusGLint nslicesGLint nstacks)绘制实心圆环
    //innerradius圆环内半径;
//outerradius圆环外半径;
//nslices沿着圆环方向的分割数;
//nstacks圆环的换线数

}

GLuint CreateDL()
{
  GLuint  SnowmanDL;
  SnowmanDL=glGenLists(1);

  // 开始显示列表
            

  glNewList(SnowmanDLGL_COMPILE);
  // call the function that contains the rendering commands
  DrawSnowman();
  // endList
  glEndList();

  return SnowmanDL;  
}

void initScene()  
{
 
  glEnable(GL_DEPTH_TEST);
  snowman_display_list =CreateDL();
}


void Resize(int wint h)
{
  if(h==0)h=1;

  ratio=1.0*w/h;

  glMatrixMode(GL_PROJECTION);    //指定哪一个矩阵式当前操作的矩阵。
      //可选择的数值为:
      //GL_PROJECTION对投影矩阵堆栈应用随后的矩阵操作
      //GL_MODELVIEW对模型视图矩阵堆栈应用随后的矩阵操作
      //GL_TEXTRUE对纹理矩阵堆栈应用随后的矩阵操作
  glLoadIdentity();               //将当前矩阵设置为单位矩阵

  glViewport(00wh);
  gluPerspective(45ratio11000);//创建透视投影矩阵函数。
  //45是y方向上可见区域的夹角(视场角),单位度;
  //ratio纵横比,确定x方向的可见区域;
  //(11000)从观察者到近修建平面和远修建平面的距离。

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  gluLookAt(xyzx+lxy+lyz+lz0.01.00.0);//定义视景转换函数。
  //(xyz)视点的位置;
  //(lxlylz)参考点的位置;
      //(0.01.00.0)向上矢量的方向
}

void renderScene(void) 
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
  //画一个地面
  glColor3f(0.9f 0.9f 0.9f);
  glBegin(GL_QUADS);
  glVertex3f(-100.0f 0.0f -100.0f);
  glVertex3f(-100.0f 0.0f 100.0f);
  glVertex3f( 100.0f 0.0f 100.0f);
  glVertex3f( 100.0f 0.0f -100.0f);
  glEnd();
 
  //画36个雪人
  for(int i = -3; i < 3; i++)
  for(int j=-3; j < 3; j++) 
  {
   glPushMatrix();
   glTranslatef(i*10.00j * 10.0);
   glCallList(snowman_display_list);;
   glPopMatrix();
  }

  glutSwapBuf

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

     文件       4522  2011-07-11 14:17  3D小雪人  VC6.0+OPENGL\woz.cpp

     目录          0  2011-07-12 11:34  3D小雪人  VC6.0+OPENGL

----------- ---------  ---------- -----  ----

                 4522                    2


评论

共有 条评论