值中。另外,如果要用 Multipatch 表达复杂连续的几何对象,比如球体,为了平滑阴影平
面之间的转折,需要在 Multipatch 的每一个顶点上记录它的法向量,同样法向量也是编码
后存储在定点的 M 值中。如下面的代码:
Dim pNormal As esriCore.IVector3D
Dim pVertex As esriCore.Ipoint
Dim m As Double
m = 0
. . .
Dim pEncoder As IEncode3DProperties
Set pEncoder = New GeometryEnvironment
pEncoder.PackNormal vNormal, m
pEncoder.PackTexture2D s, t, m
pVertex.M = m
四、3D 渲染和动画功能定制简介
在 ArcObjects 中的 3D 对象内部调用了 OpenGL 图形库,所以有关 3D 渲染方面的开发是基
于 OpenGL 图 形 库 方 面 的 知 识 。 在 ArcObjects 中 的 定 制 渲 染 工 作 原 理 如 下 图 , 在
SceneGraph::Redraw 绘制开始和结束时分别会激活 SceneGraph 或其它外部事件处理器的
OnBeforeDraw 和 OnAfterDraw 事件,我们可以在这两个事件添加自己的渲染效果,比如在
OnBeforeDraw 事件中添加雾化效果等,而可以在 OnAfterDraw 事件中添加三维文字标注等。
动画使得场景有动态的感觉,我们可以通过对视角、图层的可见性、以及场景的属性进行
定制来达到动画的效果。下图是在动画定制中将会涉及到的部分类和接口。
从此对象模型图我们可以看出在 Scene 对象中可以访问动画轨迹对象(AnimationTrack),
而动画轨迹是由关键帧组成的,关键帧分成场景的、图层的和书签(照相机)的。同时动
画类型也分为场景、图层和照相机三种。这些类都是 CoClass,可以通过创建的方式实例化,
从而来控制动画的定制。另外,在 ArcObjects 中提供了控制动画演播和录制的相应方法,
具体参考帮助文档中 AnimationTrack 类和 ScreenViewer 类。
五、三维控件