,VC   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,VC
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文
利用VC+OpenGL实现几种特殊图形效果
[文章信息]
作者:中国电波传播研究所青岛分所郎锐
时间:2005-04-26
出处:天极网
责任编辑:方舟
[文章导读]
融合、雾化与反走样是OpenGL中的三种特殊效果处理方法
advertisement
热点推荐
· VB实现SQL Server 2000存储过程调用
· Java解析网络数据流的三种特殊方法
· 多媒体教程:网页表单文本域类型
· 体验V5E地形编辑:整体控制
· 打造完美可随意安装的WinXP镜像
[正文]

上一页  1 2 3  下一页

  雾化特效

  雾化是一种模拟自然界中雾气对场景物体视觉效果产生影响的图形绘制技术。此技术从视点到物体逐渐将物体的绘制颜色淡化,直至背景色。通过雾化处理可较好的表现出物体到视点的距离感。虽然雾化的具体计算非常复杂,但在OpenGL中的使用却非常简单。首先调用glEnable(GL_FOG)以启用雾化处理,启用后离视点较远的物体开始淡化成雾的颜色。然后可通过glFog*()函数来选择控制雾的浓度和颜色的方程,具体形式为:

void glFog{if}[v](GLenum pname,TYPE param);
  
  该函数设置了雾化参数和函数,在pname为GL_FOG MODE时,参数param可以为GL_EXP(指数)、GL_EXP2(指数平方)和GL_LINEAR(线性);如果参数pname为GL_FOG_DENSITY、GL_FOG_START或GL_FOG_END,参数param将分别指定在不同雾化数学模型下的不同计算公式参量;在参数pname为GL_FOG_COLOR时,param将为一个指向颜色向量的指针。最后,如果有必要,还可以调用函数glHint(GL_FOG_HINT)进一步指定雾化效果。下面给出实现雾化效果的部分具体示例代码及其绘制结果(图2):


图2 雾化效果

void CALLBACK Display()
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清屏
 glPushMatrix(); // 绘制近视点景物
 glTranslatef(-3.0, -1.5, -2.0);
 auxSolidTorus(0.6, 1.5);
 glPopMatrix();
 glPushMatrix(); // 绘制远视点景物
 glTranslatef(2.0, 0.8, -10.0);
 auxSolidTorus(0.6, 1.5);
 glPopMatrix();
 glFlush(); // 强制绘图完成
}
void Init()
{
 GLfloat mat_ambient[] = {0.7, 0.6, 0.0, 1.0}; // 设置光照模型
 GLfloat mat_diffuse[] = {0.7, 0.6, 0.0, 1.0};
 GLfloat mat_specular[] = {1.0, 0.0, 1.0, 1.0};
 GLfloat mat_shininess[] = {50.0};
 GLfloat position[] = {5.0, 5.0, 5.0, 1.0};
 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, mat_shininess);
 glEnable(GL_DEPTH_TEST);
 glDepthFunc(GL_LESS);
 glLightfv(GL_LIGHT0, GL_POSITION, position);
 glEnable(GL_LIGHTING);
 glEnable(GL_LIGHT0);
 glFrontFace(GL_CW);
 glEnable(GL_FOG); // 启用雾化处理
 {
  glFogi(GL_FOG_MODE, GL_LINEAR); // 采用线性变化的雾化效果
  GLfloat fogColor[] = {0.3, 0.3, 0.3, 1.0}; // 指定雾化颜色
  glFogfv(GL_FOG_COLOR, fogColor);
  glFogf(GL_FOG_START, 3.0); // 指定按线性变化时计算公式的参量
  glFogf(GL_FOG_END, 15.0);
  glHint(GL_FOG_HINT, GL_DONT_CARE); //规定雾化效果的质量
 }
}


上一页  1 2 3  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
,VC相关内容,VC焦点新闻
  • VC6中用DOM遍历网页中的元素
  • VC编程实现动态截获并显示窗口DC
  • MFC六大关键技术剖析之动态创建
  • MFC程序员的WTL指南之属性页与向导
  • Visual C++ 6.0制作QQ连连看外挂
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,VCAdvertisement