网站大量收购独家精品文档,联系QQ:2885784924

使用MFC实现实感图形绘制.doc

  1. 1、本文档共71页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用MFC实现实感图形绘制

使用MFC实现真实感图形绘制 真实感图形绘制是计算机图形学的一个重要组成部分。它综合利用数学、物理学、计算机科学和其他学科知识在计算机图形设备上生成象彩色照片那样的真实感图形。要用计算机图形设备绘制场景的真实感图形,就必须首先在计算机中建立该场景的模型,用这个模型来反映场景的特点和属性。这一模型通常是由一批几何数据及数据之间的拓扑关系来表示的,这就是造型技术,它是真实感图形绘制技术的重要组成部分。有了三维场景的模型,并给定了观察点和观察方向以后,就可以通过几何变换和投影变换在屏幕上显示该三维场景的二维图像。为了使二维图像具有立体感,并尽可能逼真地显示出该物体在现实世界中被观察到的形象,就需要运用适当的光照模型,来模拟场景在现实世界中受到各种光源照射时的效果,这就是真实感图形的画面绘制技术,也就是真实感图形的生成技术。 用计算机在图形设备上生成连续色调的真实感图形大致可以分为以下四步: 第一步,用数学方法建立所需三维场景的几何描述,并将它们输入至计算机。这部分工作可由三维立体造型或曲面造型系统来完成。场景的几何描述直接影响了图形的复杂性和图形绘制的计算耗费,因此选择合理的、有效的数据表示和输入手段是非常重要的。 第二步,将三维几何描述转换为二维投影图。这可以通过对场景的投影变换来完成。 第三步,确定场景中的所有可见面,这需要使用隐藏面消除算法将被其他物体遮挡的不可见面消去。 第四步,计算场景中可见面的颜色,严格地说,就是根据基于光学物理的光照明模型计算可见面投射到观察者眼中的光亮度大小和色彩分量,并将它转换成适合图形设备的颜色值,从而确定投影画面上每一象素的颜色,最终生成图形。 前三步的相关知识在前面已经进行了介绍,本章将重点介绍如何通过MFC编程的方式,利用光照模型计算场景中可见面的光亮度和颜色,并绘制最终的真实感图形。实际上,现在OpenGL和DirectX等图形函数库提供了很多支持真实感图形绘制的函数,使用它们可以更轻松的完成真实感图形绘制。本章仍采用最基本的MFC编程方式来实现真实感图形绘制,是为了让读者可以更好的体会和理解真实感图形绘制中用到的光照模型等相关知识的原理。 演示程序使用的场景造型 场景造型又叫几何造型,它是在计算机中建立的用于描述现实场景的几何模型,它是真实感图形生成的一个重要部分。在真实感图形中,一个景物的场景造型体现了该景物的几何特征和景物属性。场景造型的复杂程度直接决定了最终绘制的真实感图形的效果。 本章的重点在于光照模型的实现,所以本章中的演示程序没有创建复杂场景,只使用了一种景物——球体。演示程序根据球体的函数方程,计算球体表面的参数点坐标,然后按这些参数点对球体表面作三角剖分,最后利用光照模型对剖分得到的三角面片计算光照并进行绘制。 球体造型 球体表面的函数方程式如下: 其中,坐标为球心坐标,而坐标为球面上的参数点坐标,为半径,、分别为纬度和经度参数变量。 我们创建一个MFC项目RealityDemo,该应用程序作为本章中的演示程序。在该应用程序中添加一个类CObject3D,其基类为CObject。该类的实例对应场景中的一个景物。为了定义景物,需要定义如下结构体: //三维空间中点 struct Point3D{ double x; double y; double z; }; //三角面 struct TriSurface{ int no;//所属景物序号 Point3D p1,p2,p3;//三角面的顶点 double xn,yn,zn;//三角面的法向量 }; //景物光照参数 struct Param{ double krd;//景物表面红色光漫反射率 double kgd;//景物表面绿色光漫反射率 double kbd;//景物表面蓝色光漫反射率 double kra;//景物表面红色光泛光反射率 double kga;//景物表面绿色光泛光反射率 double kba;//景物表面蓝色光泛光反射率 double krs;//景物表面红色光镜面反射率 double kgs;//景物表面绿色光镜面反射率 double kbs;//景物表面蓝光镜面反射率 int n;//景物表面镜面高光指数 }; Point3D定义了三维空间中的一点。而TriSurface则定义了一个三角面片。结构体Param中的各成员变量指定了景物的光照参数,其具体含义将会在介绍光照模型时说明。 我们在CObject3D类中添加如下的成员变量和成员函数: public: //球体表面三角剖分后得到的三角面列表 CArrayTriSurface,TriSurface m_SurfaceList; Param m_Param;//球体表面光照参数 Po

文档评论(0)

vbc516 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档