网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
用Visual C++ 5实现OpenGL编程
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
ND_BACK, GL_AMBIENT, RedSurface)

   glBegin(GL_POLYGON);

   glNormal3d( 1.0, 0.0, 0.0);

   glVertex3d( 1.0, 1.0, 1.0);

   glVertex3d( 1.0, -1.0, 1.0);

   glVertex3d( 1.0, -1.0, -1.0);

   glVertex3d( 1.0, 1.0, -1.0);

   glEnd();

  

  3) 我们使用glMaterialfv(GL_ FRONT_AND_BACK, GL_AMBIENT, RedSurface)这个函数来定义多边形的表面属性,为每一个平面的前后面设置环境颜色。当然,我们得定义光照模型,这只需在OnSize()的最后加上glEnable(GL_LIGHTING);RedSufFace是一个颜色分量数组,例如:RedSufFace ={1.0f,0.0f,0.0f};要定义某个平面的环境颜色,只需把glMaterialfv加在平面的定义前面即可,如上例所示。

  4) Z缓冲区的问题:要使三维物体显得更流畅,前后各面的空间关系正确,一定得使用Z缓冲技术;否则,前后各面的位置就会相互重叠,不能正确显示。Z缓冲区存储物体每一个点的值,这个值表明此点离人眼的距离。Z缓冲需要占用大量的内存和CPU时间。启用Z缓冲只需在OnSize()的最后加上glEnable(GL_DEPTH_TEST);要记住:在每次重绘之前,应使用glClear(GL_DEPTH_BUFFER_BIT)语句清空Z缓冲区。

  5) 现在已经可以正确地生成三维物体了,但还需要美化,可以使物体显得更明亮一些。我们用glLightfv函数定义光源的属性值。下例就定义了一个光源:

  

  glLightfv(GL_LIGHT0, GL_AMBIENT,LightAmbient);

  glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);

  glLightfv(GL_LIGHT0, GL_SPECULAR, LightSpecular);

  glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);

  glEnable(GL_LIGHT0);

  

  GL_LIGHT0是光源的标识号,标识号由GL_LIGHTi组成(i从0到GL_MAX_LIGHTS)。 GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR、GL_POSITION分别定义光源的周围颜色强度、光源的散射强度、光源的镜面反射强度和光源的位置。

  本文例子较简单,Visual C++5.0中还有很多例子。参照本文的设置,你一定能体会到OpenGL强大的图形、图像绘制功能。

  

  (作者地址:中国地质大学(武汉)研974班 430074 收稿日期:1999.4.30)

  

  

  void CGLSample2View::OnSize(UINT nType, int cx, int cy)

  {

   CView::OnSize(nType, cx, cy);

   GLsizei width, height;

   GLdouble aspect;

   width = cx;

   height = cy;

   if (cy==0)

   aspect = (GLdouble)width;

   else

   aspect = (GLdouble)width/(GLdouble)height;

  

   glViewport(0, 0, width, height);

   glMatrixMode(GL_PROJECTION);

   glLoadIdentity();

   gluOrtho2D(0.0, 500.0*aspect, 0.0, 500.0);

   glMatrixMode(GL_MODELVIEW);

   glLoadIdentity();

  }

  

  void CGLSample2View::OnPaint()

  { CPaintDC DC(this); // device context for painting (added by ClassWizard)

   glLoadIdentity();

   glClear(GL_COLOR_BUFFER_BIT);

   glBegin(GL_POLYGON);

   glColor4f(1.0f, 0.0f, 0.0f, 1.0f);

   glVertex2f(100.0f, 50.0f);

   glColor4f(0.0f, 1.0f, 0.0f, 1.0f);

   glVertex2f(450.0f, 400.0f);

   glColor4f(0.0f, 0.0f, 1.0f, 1.0f);

   glVertex2f(450.0f, 50.0f);

   glEnd();

   glFlush();

  } 

  • 下一篇资讯: 屏幕抓图程序DIY
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号