450 likes | 784 Vues
Vega 二次开发技术介绍. Vega 介绍. Vega 是什么 ? Vega 能干什么? Vega 的构成 Vega 的二次开发. Vega 是什么 ?. Vega 是软件 MultiGen 的一部分。 虚拟现实软件 MultiGen 由两部分组成: 1 、 Creator 2 、 Vega. Vega 能干什么?. Creator 用来建立三维模型 Vega 的作用: 将三维模型渲染成场景 在场景上浏览、查询 实例演示. Vega 的构成. Lynx 软件 多种动态联接库( DLL )、 函数库( Lib ) 应用程序接口( API ).
E N D
Vega介绍 • Vega是什么? • Vega能干什么? • Vega的构成 • Vega的二次开发 1
Vega是什么? Vega是软件MultiGen的一部分。 虚拟现实软件MultiGen由两部分组成: 1、Creator 2、Vega 1
Vega能干什么? Creator用来建立三维模型 Vega的作用: • 将三维模型渲染成场景 • 在场景上浏览、查询 • 实例演示 1
Vega的构成 • Lynx软件 • 多种动态联接库(DLL)、 函数库(Lib) • 应用程序接口(API) 1
Vega各个组成部分的作用 • DLL、Lib的作用 • Lynx软件的作用 • API的作用 1
DLL、Lib的作用 • Vega内核 • 完成所有具体的工作 • 函数之间通过自动的相互调用构成Vega内部工作机制 1
Vega内核以“类”的形式组织 • 类:封装了函数和数据的集合 • 不必了解类的“内幕”,只要使用类的函数就可以使用类的数据,操作类 • Vega “类”与之类似:通过函数对类设置参数,以控制操作;通过函数从类中获取参数,以得到信息 1
结论一 Vega应用程序所要做的工作就是给一些必要的类设置或获取必要的参数 1
Lynx软件的作用 • 图形用户界面软件 (运行Lynx软件,显示界面) • 以图形界面的形式,供用户设置环境、操作参数 • 定义、生成和预览Vega应用程序 • 参数设置结果生成、存储在ADF文件 1
API的作用 • 二次开发应用程序接口 • 编程实现参数设置 • 可在程序运行过程中,改变运行参数和操作方式 • 本次课程内容只涉及二次开发,似乎只与API有关,与Lynx无关,实际并非如此。 1
Vega基本类 • 基本的类包括:System, Graphics States, Windows, Channels, Observers, Motion Models, Scenes, Paths, Objects, Database Manager, Players, Environments, Environment Effects, Lights, Isecors, Volumes, Color Table, Input Devices, Pathing, Navigators。 关于各类的作用请看讲义 1
关于Vega类的说明 • 类内一些参数是必设项,必须设置 • 类与类之间存在着关联,必须正确建立这些关联关系 • 二次开发编程必须用语句实现每一种关联关系 • Lynx可以自动建立这些关联关系 1
关于Lynx软件的进一步说明 • Lynx软件首先用缺省值为每一个类设置参数 • Lynx软件自动建立各类之间的关联关系 • 用户使用Lynx软件实际上是对缺省值进行修改,以实现特定的目标 1
利用Lynx软件进行二次开发 • 用Lynx软件建立一个最简单的ADF文件,各类参数已自动设置(缺省值),各类之间的关联已自动建立 • 只需要编程实现对少量特定参数的设置或修改,就可以实现特定的目标 1
结论二 用Lynx软件建立ADF文件,并用ADF文件设置系统,可以使我们将精力集中在特定的问题上,大大减少编程工作量 1
编程的有关问题 • Vega三种应用程序模型: 经典模型,主程序为main(); 标准的Windows应用程序,主程序为WinMain(); 基于MFC的Windows应用程序。 • main() 简单直观,以main()形式的应用程序为例来介绍Vega的二次开发技术。 • Visual C编辑器的设置(请学员设置,方法见讲义) 1
Vega应用程序模式 vgInitSys(); 初始化系统 vgDefineSys( “myapp.adf” ); 定义系统 vgConfigSys(); 设置系统 while( 1 ) { 实时循环体 vgSyncFrame(); 循环同步控制 vgFrame(); 调用内部函数 } 1
Vega应用程序说明 • 应用程序前半部分设置系统 • 循环体是实现场景动画浏览的程序部分 • 一般在循环体前设置各个类的参数,根据需要少量参数可在循环体内设置 1
编制你的第一个Vega应用程序 • 用VC建立一个工作组 • 输入并修改程序 • 选一个ADF文件加入程序 • 编译运行程序 1
用Lynx建立一个基本的ADF文件 • 打开Lynx界面 • 鼠标右键单击类面板 • 窗口“Active Modules” 中,清除除第一项“Vega”之外的所有选项 • 存储,得到一个ADF文件 • 用“记事本”打开该文件,显示其内容 1
应用环境的设置 • 设置环境三步曲 vgInitSys() vgDefineSys( “myapp.adf” ) vgConfigSys() • ADF文件的作用 一般用来设置我们所不关心的类 特定的类最好重新设置 1
vgCommon类 • 它是一个公共类,提供一些各类都能使用的操作 • 常用的类有: 命名、获取命名:vgName,vgGetName 属性设置、属性修改:vgProc,vgGetProc 定位、获取定位:vgPos,vgGetPos • 其它类(用到时介绍) 1
vgWindow类 • Vega应用程序必须至少有一个窗口 • 函数vgNewWin创建一个窗口 • 函数vgGetWin获取一个已创建的窗口 • 函数vgWinSize设置窗口大小 • 函数vgWinLabel设置窗口标题 • 窗口部分属性的设置和获取可用函数vgProp和vgGetProp实现 • 窗口由vgConfigSys函数打开,窗口设置必须在vgConfigSys函数之前 1
结论三 • Window类参数的设置必须在系统设置函数vgConfigSys() 之前进行 • Channel类由于与Window类的紧密联系,其参数的设置也必须在系统设置函数vgConfigSys() 之前进行 • Vega其它类参数的设置可以在其被使用前进行 1
vgChannel类介绍 • 频道是窗口上的一个矩形区域,矩形区域中显示的是一个视点看到的部分场景 • 场景不是直接显示在窗口上,而是显示在窗口上的频道中 • 一个窗口可以关联多个频道,一个频道只能和一个视点关联 • 频道设置可以在窗口创建后、频道使用前的时候进行 1
vgChannel类应用 • 函数vgNewChan创建一个频道 • 函数vgGetChan获取一个已创建的频道 • 函数vgChanWin建立频道与窗口的联系 • 函数vgChanViewport设置频道在窗口中的位置 1
vgObserver类介绍 • 观测者是观看场景的眼睛 • 显示在频道中的景象是与频道相关联的Observer的观看结果 • 影响观看结果的因素有Observer的位置和方位 • Observer的位置是视点在场景坐标系中的坐标值(x,y,z) • Observer的方位由(h,p,r)确定 1
视点坐标系 • 与场景坐标系的关系 场景坐标系是固定坐标系、永久坐标系,视点坐标系是临时坐标系 • 场景坐标系是右手螺旋坐标系,它的原点就是视点,场景坐标系y轴方向就是视线方向 • (h,p,r)决定视点方位, h是水平旋转角(绕z轴) (逆时针为正), p是以视线为轴的旋转角(绕y轴) (顺时针为正), r是俯仰角(绕x轴) (顺时针为正) 1
Z z’ x’ o’ Y y’ X O 1
vgObserver类应用 • Observer与频道关系密切,必须建立与频道的关联关系 1
三维模型的引入 • 创建一个数据集 • 用模型文件名命名该数据集 • 调入数据集 • 创建一个object • 定位object • 建立数据集与object的关联 • 通过激活object实例来激活三维模型场景 • 将object投入到场景中 1
结论四 三维模型的引入要通过以下步骤 1、通过数据集读入模型文件 2、通过数据集与object的关联将整个模型变成一个object 3、通过对该object有关属性的改变实现对模型的定位、激活 4、 object只有投入到场景中才能使用 1
vgMotion类 • 规定和管理各种运动模式 • Vega提供了四类运动模式:simple, complex, direct和user defined • 前三类为规定的运动模式,共十一种 • 规定的运动模式的设置 • 规定的运动模式的限制 1
user defined运动模式 • Vega为用户定义运动模式的实现提供了一套内部机制 • 内部机制包括:运动模式数据自动传递,运动模式实现函数的自动调用 1
user defined模式的建立方式 • 定义一个运动模式数据结构变量,为该变量申请空间 • 定义一个运动模式实现函数 • 用一个标识符来代表该运动模式函数(注册) • 依次将运动模式数据结构变量、运动模式函数标识符与运动模式实例挂钩 1
结论五 Vega运动模式的内部机制极大地简化了用户建立自定义运动模式的工作,使用户可将精力集中在运动模式实现函数的实现上 1
运动模式实现函数思路 • 接收传递数据 • 用键盘改变视点坐标或方位数据 • 用新数据设置运动模式(视点) 1
vgPicker类介绍 • Picker类用来在场景中选取目标和对象 • 选取方法是用鼠标点击场景中的目标 • 目标有两类 房屋等人造几何体 地形点 1
vgPicker类应用 • 创建一个Picker类实例 • 设置必要的属性 • 建立Picker类与场景、频道的关联关系 1
点击目标,查询信息 • Picker类提供了一个函数 vgPerformPickProcessing 用来实现在场景中的点击 • Picker类提供了不同的函数从Picker提取不同的信息 • GIS中常用的信息:目标、高程信息 1
总结 • Vega内核以类的形式组织,使Vega编程的任务成为设置有关类的参数 • 用Lynx完成一个最简单的ADF文件,并用这个文件设置系统,完成大部分类参数的设置,我们只需编程完成特定类少数参数的设置 • Window类、Channel类参数的设置必须在系统设置函数vgConfigSys() 之前进行 • Vega应用程序模式就是:参数设置部分加循环体部分 1
总结 • 三维模型文件是以Object的形式调入的,经历了文件 数据集(DS) Object,最后投入场景(Scenes)的过程 • Observer与Motion关联在一起,通过对Motion的控制实现对Observer的运动控制 • Vega为user defined模式设置了内部机制,自定义函数调用模式相对固定,依据该模式,我们只需考虑如何实现自定义运动函数 1
参考书 1、《Vega程序设计》龚卓蓉编译 北京:国防工业出版社,2002 2、《LynX图形界面》龚卓蓉主编 北京:国防工业出版社,2002 3、《Vega Programmer’s Guide》 Vega软件电子文档 4、《Lynx User’s Guide》 Vega软件电子文档 1
加强联系 • 欢迎学员今后与我保持联系,继续探讨有关问题,联系邮件地址:yuzifan@hotmail.com 1