欢迎来到天天文库
浏览记录
ID:47601796
大小:136.01 KB
页数:14页
时间:2019-09-25
《立体图绘制 (修复的)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十一章立体工程图的绘制学前提示随着计算机图形学的发展,计算机要处理的立体图形越来越复杂。图形包含的几何元素不断增多。为了表示图形间的遮挡,相交关系,处理物体表面的纹理,反光,本章通过数学建模,按照面向对象程序设计思想,从底层做起,设计一系列的类直接实现了立方体,球体,圆柱体,圆锥体三维立体图形的线框图和着色图的绘制,通过本章的学习,读者应该能够熟悉计算机图形学的基本算法知识要点图形变换中的基本概念点,线,面,体类的设计和着色球体的绘制和着色11.1.1图形变换中的基本概念三维图形显示中的图形变换计算机本身只能处理数字,图形在计算机内也是以数字的形式进行加
2、工和处理的。而坐标建立了图形和数字之间的联系。为了使被显示的物体数字化,要在被显示的物体所在的空间中定义一个坐标系。这个坐标系的长度单位和坐标轴的方向要适合对被显示物体进行描述,这个坐标系称为世界坐标系。它是三维直角坐标系,遵循右手法则。计算机对数字化的显示物体做了加工处理后,要在图形显示器上显示,这就要在图形显示器屏幕上定义一个二位直角坐标系,这个坐标系称为屏幕坐标系。这个坐标系坐标轴的方向通常取成平行于屏幕的边缘,坐标原点取在左下角,长度单位常取成一个象素的长度。计算机显示的内容由观察者的位置(称为观点)和视线方向确定。先将实际物体从世界坐标系Ow-X
3、wYwZw变换到以视点为中心的坐标系——视点坐标系)Oc-XcYcZc。然后再将其投射到显示屏上的二位坐标系Os-XsYs里。这一系列变换就是图形变换,是平移,旋转,缩放和投影灯变换的组合。图形变换可具体分为几何变换,投影变换,裁剪变换和视口变换四个步骤,经过这四个步骤三维立体图形变为屏幕上亮点的集合(1)几何变换几何变换即平移,旋转和比例变换。几何变换是由例子程序实现的,由用户输入具体的平移,旋转进行(2)投影变换投影变换是把三维物体变为二位图形表示的过程。根据投影类型可分为正射投影和透视投影。投影变换是由例子程序实现的,由点类封装实现(3)裁剪变换裁剪
4、变换包括三维视景体裁剪和附加平面裁剪。视景体裁剪已经包含在投影变换里,除了视景体定义的六个裁剪平面(左,右,上,下,远和进),用户还可以定义一个或多个附加裁剪平面,使得用户可以删除场景中多余的形状。裁剪变换是由操作系统实现的(4)视口变换视视口变换是经过以上变换的物体显示在屏幕窗口的指定区域内,即将试图最后投影面映射到屏幕窗口的过程。视口变换是由显卡驱动实现的。图11.2简单展示了图形变换的步骤世界坐标系中的三维物体几何变换投影变换视口变换裁剪变换屏幕坐标系中的图形显示图11.2图形变换投影变换是在世界坐标系中建立的,而计算机屏幕所显示的图形是在给定视点和
5、视线方向下的二位屏幕投影。所以投影变换是整个图形变换的关键。根据投影中心与投影平面之间距离的不同,投影可分为透视投影和正射投影(1)透视投影——类似于人对客观世界的观察方式,它的特点是距离视点进的物体比较大,而距离视点远的物体相对较小,这种投影方式的视景空间可以被认为是一个棱台。它广泛应用于三维地形,模拟,飞行穿越仿真,步行穿越仿真等模拟人眼视觉效果的研究领域(2)正射投影——是物体直接映射到屏幕上。正射投影实质上是透视投影的一种特例,即视点在无穷远或视点由一个点变为一个面。它适用于某地的顶视效果图,地形晕眩图或需要观察模型某一个侧面下带有形变的景观等11
6、.2用类来抽象三维立体图形对象是面向对象开发模式的基本成分。每个对象可用一组属性和它可以执行的一组操作来定义。属性一般只能通过执行对象的操作来改变。操作又称作方法或服务,在C++中称为成员函数,它描述了对象执行的功能。类是一组具有相同数据结构和相同操作的对象的集合。类的定义包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为对象的模板,用以产生对象。在一个类中每个对象都是类的实例,它们都可以使用类中提供的函数,一个对象的状态则包含在它的实例变量中,11.2点类的实现空间点是最基础的图形构成元素,实现点类之前先介绍一个存储常量的
7、头文件。11.2.常量头函数常量头函数const.h存储了点类实现的数值常量,用于存储一些公有的常量。#if!defined(_CONST_INCLUDE__)#define_CONST_INCLUDE_constdoubleVPOINT_X=1000;constdoubleVPOINT_Y=1000;constdoubleVPOINT_Z=1000;constintNUMBER=100;constintDELTA=50;constintPIECE=360;constdoublePI=3.1415926;staticboolOnePoint=false;#
8、endif/*其中,VPOINT_X,VPOINT_Y,VPOIN
此文档下载收益归作者所有