「java三维设计」三维设计
今天给各位分享java三维设计的知识,其中也会对三维设计进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
三维图形可视化制作技术
(一)OpenGL
OpenGL(Open Graphics Libaray)由SGI公司为其图形工作站开发的可以独立于窗口操作和硬件环境的图形开发系统。其目的是将用户从具体的硬件和操作系统中解放出来。用此系统可以不去理解这些系统的结构和指令系统,只要按规定的格式书写应用程序就可以在任何支持该语言的硬件平台上执行。由于OpenGL的高度可重用性,已经有几十家大公司表示接受OpenGL作为标准软件接口,目前加入OpenGL ARB(OpenGL体系结构审查委员会)的成员有SGI公司、HP公司、MicroSoft公司、Intel公司、IBM公司、SUN公司、DEC公司、ATT公司的Unix软件实验室等。在该组织的努力下,OpenGL已经成为高性能图形和交互式视景处理的工业标准,能够在Windows95/98、Windows NT、Windows 2K、Macos、Beos、OS/2以及Unix上应用。OpenGL的实质是作为图形硬件的软件接口,是一组三维的API函数。
1.OpenGL的主要功能
(1)建模。不但有简单的点线面还提供了复杂的三维物体(球、锥等)以及复杂的曲线曲面(Bezier、Nurbs等)绘制函数。
(2)变换。主要包括基本变换(平移、旋转等)和投影变换(平行、透视投影等)。
(3)颜色模式设置。RGBA模式、ColorIndex颜色索引。
(4)光照和材质设置。OpenGL光有辐射光、环境光、漫反射光、镜面光;材质是用光反射率来表示的。场景中物体最终反映到人眼的颜色是光的RGB分量和材质的RGB分量叠加形成的。
(5)纹理映射。主要表达物体表面的细节。
(6)位图显示和图像增强。图像功能除了基本的复制和图像像素读写外,还提供融合(Blending)、反走样(Antialiasing)、雾化(Fog)等特殊的图像处理效果。
(7)双缓冲(Double Buffering)动画。双缓冲即前台缓冲和后台缓冲。后台计算场景、产生画面,前台显示后台已经计算好的画面。
(8)交互技术。主要是提供三种工作模式:绘图模式、选择模式和反馈模式。绘图模式完成场景的绘制,可以借助物体的几何参数及运动控制参数、场景的观察参数、光照参数和材质参数、纹理参数、OpenGL函数的众多常量控制参数、时间参数等和Windows对话框、菜单、外部设备等构成实时交互的程序系统。在选择模式下,则可以对物体进行命名,选择命名的物体,控制对命名的物体的绘制。而反馈模式则给程序设计提供了程序运行的信息,这些信息也可反馈给用户,告诉用户程序的运行状况和监视程序的运行进程。
(9)其他。利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果。
2.OpenGL的基本原理
OpenGL是一个硬件发生器的软件接口,其主要目的是将二维、三维物体绘制到一个帧缓冲里,它包括几百个图形函数。开发者主要利用这些函数来建立三维模型和进行三维实时交互。
(1)图元操作和指令。OpenGL能够从多种可选择的模式画图元,而且一种模式的设置一般不会影响其他模式的设置,无论发生深墨情况,指令总是被顺序处理,也就是说,一个图元必须完全画完之后,后继图元才能影响帧存。
(2)图形控制。OpenGL提供诸如变换矩阵、光照、反走样方法、像素操作等参数来控制二维和三维图形的绘制。它并不提供一个描述或建立复杂几何物体的手段。OpenGL提供的是怎样画复杂物体的机制而非描绘复杂物体本身的面面俱到的工具。即OpenGL是过程性的而非描述性的。
(3)执行模式。OpenGL命令的解释模式是客户/服务器模式的,即由客户发布命令,命令由OpenGL服务器(解释器)来处理,服务器可以运行在相同的或不同的计算机上,基于这一点,OpenGL是网络透明的。
地下水三维可视化系统开发与应用
3.OpenGL的命令语法与状态
基于OpenGL标准开发的微机应用程序必须在32位Windows平台下,如Windows98/NT环境,运行时所需的动态连接库为OpenGL32.DLL、Glu32.DLL。OpenGL包含100多个库函数,这些函数按一定的格式来命名。
(1)核心函数115个,每个函数以gl开头,这些函数是最基本的,可以运行在任何工作平台上。这些函数创建二维和三维几何形体,设置视点,建立视觉体,设置颜色及材质,建立灯光,进行纹理映射,反走样,处理融合,雾化场景等,它们可以接受不同的参数,因而可派生300多个函数。
(2)OpenGL实用库函数以glu开头,共43个。这些函数基于OpenGL核心函数,主要提供对辅助函数的支持,并且执行了核心OpenGL函数的交互,因而是比核心函数更高一层的函数,也更有通用性。可以运行在任何OpenGL工作平台上。
(3)辅助库函数,共31个。以aux开头,它们是一类特殊的OpenGL函数,是帮助初学者尽快进入OpenGL编程而做简单练习用的。因此并不能在所有平台上运行。但Windows98/NT支持它们。
(4)Windows专用库函数,以wgl开头。主要是连接OpenGL和Windows窗口系统的,用它们可以管理着色描述表及显示列表,扩展功能,管理字体位图等。
(5)Win32 API函数,共6个,用于处理像素格式及缓冲。
(6)OpenGL结构,共4个。
4.OpenGL图形操作步骤
步骤1:设置像素格式:主要包括建立OpenGL绘制风格、颜色模式、颜色位数、深度位数等;
步骤2:建立模型:建立三维模型;
步骤3:舞台布景:如何把景物放置在三维空间的适当位置,设置三维透视视觉体以观察场景;
步骤4:效果处理:设置物体的材质(颜色、光学性能及纹理映射等)加入光照及光照条件;
步骤5:光栅化:把景物及其颜色信息转化为可在计算机上显示的像素信息。
(二)VRML
1.VRML简介
VRML是英文Virtual Reality Modeling Language——虚拟现实造型语言的缩写。其最初的名字叫Virtual Reality Makeup Language。名字是由第一届WWW(1994,日内瓦)大会上,由Tim Berners Lee和Dave Raggett所组织的一个名为Bird-of-a-Feather(BOF)小组提出的。后来Makeup改为Modeling。VRML和HTML是紧密相连的,是HTML在3D领域的模拟和扩展。由于VRML在Internet具有良好的模拟性和交互性,因而显示出强大的生命力。
VRML是一种3D交换格式,它定义了当今3D应用中的绝大多数常见概念,诸如变换层级、光源、视点、几何、动画、雾、材质属性和纹理映射等。VRML的基本目标是确保能够成为一种有效的3D文件交换格式。
VRML是HTML的3D模型。它把交互式三维能力带入了万维网,即VRML是一种可以发布3D网页的跨平台语言。事实上,三维提供了一种更自然的体验方式,例如游戏、工程和科学可视化、教育和建筑。诸如此类的典型项目仅靠基于网页的文本和图像是不够的,而需要增强交互性、动态效果连续感以及用户的参与探索,这正是VRML的目标。
VRML提供的技术能够把三维、二维、文本和多媒体集成为统一的整体。当把这些媒体类型和脚本描述语言(scripting language)以及因特网的功能结合在一起时,就可能产生一种全新的交互式应用。VRML在支持经典二维桌面模型的同时,把它扩展到更广阔的时空背景中。
VRML是赛博空间(cyber space)的基础。赛博空间的概念是由科幻作家William Gibson提出的。虽然VRML没有为真正的用户仿真定义必要的网络和数据库协议,但是应该看到VRML迅速发展的步伐。作为标准,它必须保持简单性和可实现性,并在此前提下鼓励前沿性的试验和扩展。
2.VRML的基本工作原理及其特性
(1)用文本信息描述三维场景。在Internet网上传输,在本地机上由VRML的浏览器解释生成三维场景,解释生成的标准规范即是VRML规范。正是基于VRML的这种工作机制,才使其可能在网络应用中有很快的发展。当初VRML的设计者们考虑的也正是文本描述的信息在网络上的传输比图形文件迅速,所以他们避开在网络上直接传输图形文件而改用传输图形文件的文本描述信息,把复杂的处理任务交给本地机从而减轻了网路的负荷。
(2)统分结合模式。VRML的访问方式基于C/S模式,其中服务器提供VRML文件,客户通过网络下载希望访问的文件,并通过本地平台的浏览器(Viewer)对该文件描述的VR世界进行访问,即VRML文件包含了VR世界的逻辑结构信息,浏览器根据这些信息实现许多VR功能。这种由服务器提供统一的描述信息,客户机各自建立VR世界的访问方式被称为统分结合模式,也是VRML的基本概念。由于浏览器是本地平台提供的,从而实现了VR的平台无关性。
(3)基于ASCII码的低带宽可行性。VRML像HTML一样,用ASCII文本格式来描述世界和链接,保证在各种平台上通用,同时也降低了数据量,从而在低带宽的网络上也可以实现。
(4)实时3D着色引擎。传统的VR中使用的实时3D着色引擎在VRML中得到了更好的体现。这一特性把VR的建模与实时访问更明确地隔离开来,也是VR不同于三维建模和动画的地方。后者预先着色,因而不能提供交互性。VRML提供了6+1个自由度,即三个方向的移动和旋转,以及和其他3D空间的超链接(Anchor)。
(5)可扩充性。VRML作为一种标准,不可能满足所有应用的需要。有的应用希望交互性更强,有的希望画面质量更高,有的希望VR世界更复杂。这些要求往往是相互制约的,同时又受到用户平台硬件性能的制约,因而VRML是可扩充的,即可以根据需要定义自己的对象及其属性,并通过Java语言等方式使浏览器可以解释这种对象及其行为。
(三)X3D
X3D(Extensible 3D——可扩展3D)是一个软件标准,定义了如何在多媒体中整合基于网络传播的交互三维内容。X3D将可以在不同的硬件设备中使用,并可用于不同的应用领域中。比如工程设计、科学可视化、多媒体再现、娱乐、教育、网页、共享虚拟世界等方面。X3D也致力于建立一个3D图形与多媒体的统一的交换格式。X3D是VRML的继承。VRML(Virtual Reality Modeling Language-虚拟现实建模语言)是原来的网络3D图形的ISO标准(ISO/IEC 14772)。X3D相对VRML有了改进,提供了以下的新特性:更先进的应用程序界面,新添的数据编码格式,严格的一致性,组件化结构(用来允许模块化的支持标准的各部分)。
1.X3D设计目标
X3D确立了以下的设计目标:
(1)分离数据编码和运行时间结构;
(2)支持大量的数据编码格式,包括XML(Extensible Markup Language);
(3)增加新的绘图对象、行为对象、交互对象;
(4)给3D场景提供可选的应用程序界面(APIs);
(5)定义规格的子集“概貌(Profiles)”以适合不同的市场需要;
(6)允许在不同层次(1evels)的服务上都能实现X3D规格;
(7)尽可能添加完善规格中行为的定义或描述。
2.X3D特性
为了满足工程设计、科学可视化、多媒体再现、娱乐、教育、网页、共享虚拟世界等方面使用的需要,X3D添加了以下的新特性:
(1)3D图形:多边形化几何体、参数化几何体、变换层级、光照、材质、多通道/多进程纹理帖图;
(2)2D图形:在3D变换层级中显示文本、2D矢量、平面图形;
(3)动画:计时器和插值器驱动的连续动画;人性化动画和变形;
(4)空间化的音频和视频:在场景几何体上映射视听源;
(5)用户交互:基于鼠标的选取和拖曳;键盘输入;
(6)导航:摄像机;用户在3D场景中的移动;碰撞、接近和可见性检测;
(7)用户定义对象:通过创建用户定义的数据类型,可以扩展浏览器的功能;
(8)脚本:通过程序或脚本语言,可以动态地改变场景;
(9)网络:可以用网络上的资源组成一个单一的X3D场景;可以通过超链接对象连接到其他场景或网络上的其他资源;
(10)物理模拟:人性化动画;地理化数据集;分布交互模拟(Distributed Interactive Simulation-DIS)协议整合。
(四)Java 3D
Java 3D用其自己定义的场景图和观察模式等技术构造了3D的上层结构,实现了在Java平台使用三维技术。Java 3D API是Sun定义的用于实现3D显示的接口。3D技术是底层的显示技术,Java 3D提供了基于Java的上层接口。Java 3D把OpenGL和DirectX这些底层技术包装在Java接口中。这种全新的设计使3D技术变得不再繁琐并且可以加入到J2SE、J2EE的整套架构,这些特性保证了Java 3D技术强大的扩展性。Java 3D建立在Java2(Java1.2)基础之上,Java语言的简单性使Java 3D的推广有了可能。Java 3D是在OpenGL的基础上发展起来的,可以说是Java语言在三维图形领域的扩展,其实质是一组API即应用程序接口。利用Java 3D所提供的API就可以编写出一些诸如三维动画、远程三维教学软件、三维辅助设计分析和模拟软件,以及三维游戏等。它实现了以下三维功能:
(1)生成简单或复杂的形体(也可以调用现有的三维形体);
(2)使形体具有颜色、透明效果、贴图;
(3)在三维环境中生成灯光、移动灯光;
(4)具有行为的处理判断能力(键盘、鼠标、定时等);
(5)生成雾、背景、声音;
(6)使形体变形、移动、生成三维动画;
(7)编写非常复杂的应用程序,用于各种领域如VR(虚拟现实)。
1.Java 3D的数据结构
Java 3D的数据结构和OpenGL的数据结构一样,采用的是场景图的数据结构,但Java 3D根据Java语言的特点。Java 3D的场景图是DAG(Directed-acyclic Graph),其特点是具有方向的不对称性。Java 3D的场景图由Java 3D的运行环境直接转变成具有三维显示效果的显示内存数据,从而在计算机上显示出三维效果,显示内存中不断接收Java 3D的运行最新结果,从而产生三维动画。
2.、Java 3D(API)中的类
Java 3D是根据OpenGL的三维图形库及VRML的基础上开发出来的一个API,里面包含了几乎所有编写Java交互式三维应用程序所需的最基本的类(类方法)、接口。主要存放在程序包Javax.media.j3d中,这些是Java 3D的核心类。另外,还有提供一个有助于快速编程的应用类型的包(Utility包)com.sun.j3d.utils(可或缺,主要是能大大地提高程序的编写效率)。除了核心类和Utility包之外,还有:
(1)Java.awt(主要是定义一个显示用的窗口);
(2)Javax.vecmath(主要是处理定义的矢量计算所用的类,今后核心类);
(3)Java 3D的类根据作用可分为Node、NodeComponent,其中Node又分为Group及Leaf两个子类。
(五)IDL
1.IDL简介
IDL(Interactive Data Language)是美国RSI公司(Research System Inc)的产品,它集可视、交互分析、大型商业开发为一体,为用户提供了完善、灵活、有效的开发环境。IDL的主要特性包括:
(1)高级图像处理、交互式二维和三维图形技术、面向对象的编程方式、OpenGL图形加速、跨平台图形用户界面工具包、可连接ODBC兼容数据库及多种程序连接工具等。
(2)IDL是完全面向矩阵的,因此具有处理较大规模数据的能力。IDL可以读取或输出有格式或无格式的数据类型,支持通用文本及图像数据,并且支持在NASA,TPT,NOAA等机构中大量使用的HDF,CDF及netCDF等科学数据格式及医学扫描设备的标准格式DICOM格式。IDL还支持字符、字节、16位整型、长整型、浮点、双精度、复数等多种数据类型。能够处理大于2Gb的数据文件。IDL采用OpenGL技术,支持OpenGL软件或硬件加速,可加速交互式的2D及3D数据分析、图像处理及可视化。可以实现曲面的旋转和飞行;用多光源进行阴影或照明处理;可观察体(Volume)内部复杂的细节;一旦创建对象后,可从各个不同的视角对对象进行可视分析。
(3)IDL具有图像处理软件包,例如感兴趣区(ROI)分析及一整套图像分析工具、地图投影及转换软件包,宜于GIS的开发。
(4)IDL带有数学分析和统计软件包,提供科学计算模型。可进行曲线和曲面拟合分析、多维网格化和插值、线性和非线性系统等分析。
(5)用IDL DataMiner可快速访问、查询并管理与ODBC兼容的数据库,支持Oracle,Informix,Sybase,MS SQL等数据库。可以创建、删除、查询表格,执行任意的SQL命令。
(6)IDL可以通过ActiveX控件将IDL应用开发集成到与COM兼容的环境中。用Vi-sual Basic,Visual C++等访问IDL,还可以通过动态连接库方式从IDL调用C,Fortran程序或从其他语言调用IDL。
(7)用IDL GUIBuilder可以开发跨平台的用户图形界面(GUI),用户可以拖放式建立图形用户界面GUI,灵活、快速地产生应用程序的界面。
(8)IDL为用户提供了一些可视数据分析的解决方案,早在1982年NASA的火星飞越航空器的开发就使用了IDL软件。
2.IDL的编程方式
IDL有两种编程方式,一是利用IDL平台的GUIBuilder进行编程,这种方式的特点是所见即所得,使用IDL自身所具有的控件进行编程和界面设置,但使用灵活性不够;另一种是利用IDL平台的集成开发环境的组件编程技术,这种方式的特点是较为灵活,而且功能较强,可以随着编程者的意愿进行设置。另外在IDL中有批处理文件语句,即在命令行中直接输入命令语句来进行数据的读入和输出,以及进行属性设置和处理。此外,IDL提供IDLDRAW WIDGET控件,可进行基于COM技术的开发。
3.IDL的应用领域
由于其强大的功能和独特的特点,IDL语言可以应用地球科学(包括气象、水文、海洋、土壤、地质、地下水等)、医学影像、图像处理、GIS系统、软件开发、大学教学、实验室、测试技术、天文、航空航天、信号处理、防御工程、数学统计及分析、环境工程等很多领域,IDL语言都可以得到广泛的应用。目前应用IDL语言,已经开发出了ENVI,IMAGIS,RiverTools,医学等成熟产品。具体的应用实例也非常多,如在2000年澳大利亚悉尼奥运会综合预报系统、美国国家环境卫星数据和信息服务中心的厄尔尼诺现象分析等工作中得到了成功的应用。
北京市勘察设计研究院应用IDL语言,已开发了真三维地质分析系统AutoDig,能够直接对简单的地质数据,或其他带层次性的数据实现科学的、完整的三维建模;同时也提供真三维显示功能,不仅能对三维体实现任意的旋转、放大、缩小,而且也能实现交互式的真三维切割功能。
(六)小结
三维图形技术是随着计算机软硬件技术的发展而发展变化的,其鼻祖是SGI公司推出的OpenGL三维图形库。OpenGL是业界最为流行也是支持最广泛的一个底层3D技术,几乎所有的显卡厂商都在底层实现了对OpenGL的支持和优化。OpenGL同时也定义了一系列接口用于编程实现三维应用程序,但是这些接口使用C(C++)语言实现并且很复杂。掌握针对OpenGL的编程技术需要花费大量时间精力。
Java 3D是在OpenGL的基础上发展起来的,可以说是Java语言在三维图形领域的扩展,其实质是一组API即应用程序接口。
Direct3D是Microsoft公司推出的三维图形编程API,它主要应用于三维游戏的编程。众多优秀的三维游戏都是由这个接口实现的。与OpenGL一样,Direct3D的实现主要使用C++语言。
VRML2.0(VRML97)自1997年12月正式成为国际标准之后,在网络上得到了广泛的应用,这是一种比BASIC,JAVASCRIPT等还要简单的语言。现已发展为X3D。脚本化的语句可以编写三维动画片、三维游戏、计算机三维辅助教学。它最大的优势在于可以嵌在网页中显示。
美国RSI公司(Research System Inc)研制和开发的最新可视软件IDL(Interactive Data Language)交互式数据语言,是进行数据分析、可视化和跨平台应用开发的较佳选择,它集可视、交互分析、大型商业开发为一体,为用户提供了完善、灵活、有效的开发环境。三维技术的比较见表1-2。
表1-2 三维技术对比
java3d的详细介绍
引 言
Java3DAPI是用来开发三维图形和开发基于Web的3D应用程序(applet)的编程接口.用于开发三维图形软件的3DAPI(OpenGL、Direct3D)都是基于摄像机模型的思想,即通过调整摄像机的参数来控制场景中的显示对象,而Java3D则提出了一种新的基于视平台的视模型和输入设备模型的技术实现方案,即通过改变视平台的位置、方向来浏览整个虚拟场景.它不仅提供了建造和操作三维几何物体的高层构造函数,而且利用这些构造函数还可以建造复杂程度各异的虚拟场景,这些虚拟场景大到宇宙天体,小到微观粒子.
Java3D是JavaMediaAPIs中的一部分,可广泛地应用于各种平台,而且用Java3DAPI开发的应用程序和基于Web的3D小应用程序(applet),还可以访问整个Java类,且可以与Internet很好地集成,即如果在浏览器中安装了Java3D的浏览插件,在网上也可浏览Java3D所创建的虚拟场景.Java3DAPI还汲取了已有图形APIs的优点,即Java3D的底层图形构造函数不仅综合了底层APIs(Direcrt3D、OpenGL)最好的绘制思想,而且它的高层图形绘制还综合了基于场景图的思想,同时,它又引入了一些通用的图形环境所未考虑的新概念(如3D立体声),这样将有助于提高用户在虚拟场景的沉浸感.本文将着重介绍Java3D针对VR应用所提出的基于视模型和输入设备模型的新思想,在此基础上又讨论了如何利用Java3D来开发VR应用程序及其实现方法,并设计实现了一个应用实例.
1.适于VR应用开发的Java3DAPI众所周知,开发VR应用程序是一件很繁琐的工作,其开发人员必须编写应用程序可能遇到的各种输入和显示设备的接口程序,或者依赖专为VR应用开发而设计的应用程序编程接口(API),且典型的VR应用必须跟踪用户的头部位置和方向,以生成与头部位置方向相一致的虚拟场景图.
另外,还需要先跟踪身体的其它部位(手、臂或腿部),然后通过身体各部位在虚拟场景中的虚拟视点与场景中的对象进行交互,而应用程序也必须具有能够利用跟踪输入设备在视点内放置物体,并标明其在生成的三维图象中的位置和方向的功能.同时,面向VR的应用程序开发接口(API)必须能支持3D图形生成、处理跟踪器的输入,并能将跟踪信息反馈到图形绘制中.
Java3DAPI可自动将头部跟踪器的输入集成到图形生成中,并具有通过访问其它跟踪器信息来控制其它特征的功能,但它是通过一种新的视模型(viewmodel)技术来实现的.该视模型是将用户真实的物质环境与计算机生成的虚拟环境相互独立,并建立它们之间的通信桥梁.该API也明确定义了用来探测Java3D物体六自由度(6DOF)传感器的返回值,并将其应用于显示场景图中.总之,这种新的视模型和输入设备模型可以很方便地将交互式的3D图形应用程序转化为VR应用程序.
Java3D视模型
2.1 新的视模型概念(viewmodel)基于摄像机的视模型是模仿虚拟环境中的摄像机,而不是虚拟环境中人的“替身”,而且它是通过控制摄像机与视点的相关参数来控制所显示的场景,但这种方法,在用户物质环境确定某些视参数的系统中是不合理的,例如在头盔显示器(HMD)系统中,HMD的光学性能就直接确定了应用程序所显示的视域.由于不同的HMD有不同的光学特性,因此如果允许终端用户随意改变光学参数显然是不合理的.这里视参数的值将随终端用户物质环境的不同而不同,而影响视参数的主要因素有显示器大小、显示器的位置(戴在头上,还是放在桌子上)、三维空间中用户的头部位置、头盔显示器的实际显示视域、每英寸的显示象素等.由于Java3D的视模型直接提供了头部跟踪的功能,因而使用户产生了真实存在于虚拟环境中的错觉.
Java3D不仅提出了新的基于视平台的视模型概念,同时将其推广到包括显示设备和6DOF外围输入设备(如头部跟踪器等)的接口支持中,而且新的视模型继承了Java的“writeonce,vieweverywhere”本质.这意味着由Java3D视模型开发的应用程序或applet可广泛地应用于各种显示环境.这种显示环境可以是标准的计算机显示屏、多元显示空间,也可以是头盔显示器.Java3D视模型是通过将虚拟环境和物质环境完全独立的方式来实现上述功能的,且该视模型可将虚拟环境中视平台的位置、方向和大小,与Java3D绘制的与视平台位置、方向相一致的虚拟场景相区分.一般应用程序控制视平台的位置和方向,而绘制着色系统则依据终端用户的物质环境以及用户在物质环境中的位置和方向来确定显示场景.
2.2 视模型的组成
Java3D视模型由虚拟环境和物质环境两部分组成,其中,虚拟环境由ViewPlatform对象来表示,它是虚拟对象存在的空间;而物质环境则由View对象以及和它相关的对象来表示.这里,View对象和它的相关对象就描述了用户所处的显示和操纵输入设备环境.虽然视模型将虚拟环境和物质环境相互独立,但可通过一一对应关系来建立两种世界之间相互通信的桥梁,这样将使得终端用户的行为会影响虚拟环境中的对象,同时虚拟环境中的对象行为也会影响终端用户的视点.
Java3D可通过几个对象来定义视模型参数.这些对象包括View对象及其相关对象、PhysicalBody对象、Canvas3D对象、PhysicalEnvironment对象、Screen3D对象.视模型相关的对象(如图1所示)其作用如下:ViewPlatform用来标志场景图中视点位置的节点.其父节点则指明了视平台在虚拟环境中的位置、方向和大小.View用于指定需要处理场景图的信息.Canvas3D定义了Java3D绘制图象的窗口,它提供了Canvas3D在Screen3D对象中的大小、形状和位置信息.Screen3D用于描述显示屏幕的物理属性.PhysicalBody用于封装那些与物质体相关的参视模型的组成及其相互关系数(如左、右眼的位置等).PhysicalEnvironment用于封装那些与物质体环境相关的参数(如,用于头状物体或头盔式跟踪器的校验信息).
2.3 虚拟环境中的视平台(ViewPlatform)
鉴于视平台定义了一坐标系统,于是虚拟环境中的原始点和参考点就有了一参考坐标系.这里视平台代表与视对象相关的一个点,并充当确定绘制图象的基础.图2显示了包括视平台节点场景图的一部分.由图2可见,视平台的父节点确定了视平台在虚拟环境中的位置和方向.若通过修改与TransformGroup节点相关的Transform3D对象,就可以在虚拟场景中随意移动视平台.虽然虚拟环境中可以有许多不同的视平台,但特定的视对象只能与一个视平台相关联,于是在Canvas3D对象中所绘制的场景均来自于一个视平台的视点.这样应用程序就可通过修改视平台的TransformGroup节点,在虚拟环境中漫游.图2 包括视平台的局部场景图3 Java3D的输入设备模型Java3D除了支持通用的键盘、鼠标输入外,还能给各种不间断的输入设备,如6DOF跟踪设备和操纵杆提供支持.由于不同的跟踪输入设备其工作原理不同,因而计算机与其交互的方式也不同.为了给不同的6DOF输入设备提供支持,Java3D还提供了一个输入设备接口,而且该输入设备接口还定义了一个抽象的输入设备,虽然用其可以实现对一特定设备的驱动,但输入设备接口的实现必须实现接口所定义的所有方法(如设备开、关、读取操作、状态设置及查询等).Java3D的输入设备列表就用这些方法同特定的设备进行交互.
一般Java3D环境中,可能包括许多输入设备,而且这些输入设备不一定是实际的物理设备,也可能是虚拟设备,例如通过软件的方法将鼠标的运动参数转化为6DOF虚拟跟踪球的参数,来模拟虚拟跟踪球的输入.由于所有的输入设备都由许多传感器对象组成,因此每一种输入设备都与一定数量的传感器对象相关,且每一种传感器都与其传感器设备6DOF数据的一个数据源相关.当输入设备驱动的数据改变时,传感器对象的数据也会相应改变,而且传感器对象由读取传感器对象组成.由于缓冲区中记录了各传感器N个读取传感器对象的值,因此可以对传感器数据进行平均,以及对传感器输入值的趋势进行预测等处理,但应用程序的开发并不直接使用输入设备.Java3D是通过一个传感器数组将输入设备抽象化,传感器对象数组是物质环境对象的一个子类,该数组是由与输入设备相关的对象指针组成.Java程序可以直接从传感器数组中获取传感器的值,并将其用到场景图中,或按任意方式对其进行处理。
2.4 用Java3D开发VR应用程序利用
Java3D开发的VR应用程序或者applets程序,可建造一个虚拟场景,并能将一个或多个场景图插入到虚拟场景中,虚拟场景由超结构对象集组成,对象集则包括一个世界对象(Universeobject)、一个或多个场所对象(Localeobjects)和按树状结构排列的由节点物体组成的一个或多个场景图(Scenegraphs).该场景图又称为分枝图(Branchgraph),它包括绘制对象节点、光照节点、行为节点和声音节点等,其中,包含内容节点的分枝图称为内容分枝,包含视平台对象的分枝图称为视分枝,视平台对象用来确定用户的位置和方向.图3表示了具有多分枝图的Java3D场景.图3 应用程序场景图由于这种分枝图只描述了场景所要绘制的对象,并不确定对象的绘制次序,因此图中节点的次序和位置与对象的绘制次序无关,而图中的父节点和子节点的直线路径就唯一确定了子节点的图形范围.由于绘制次序的不确定性,因而使得Java3D能横越场景图的任何次序,且它能从左到右,从顶部到底部穿过场景图;或者从右到左,甚至并行遍历整个场景图.Java3D的分支图为树状结构,且图中的每一个节点只有一个父节点.这样通过辅助的场景图机制就可以实现通用场景图的共享,而且具有连接属性的叶节点可以连接到共享子图.分枝图中的节点分为群节点(groupnode)和叶节点(leafnode)两类,其中,群节点按照粘贴的原理来组织场景图单元。
群节点的层次结构图一般群节点包括:BranchGroup、TransformGroup、Switch、OrderGroup、DecalGroup和ShareGroup节点,其中,BranchGroup是分枝图的根节点;而TransformGroup用来指明所有子节点的位置和方向;Switch则用于实现一个或多个子图的转换;OrderGroup用于使它的子节点按照特定的次序绘制;DecalGroup是OrderGroup的一个子集;ShareGroup跟BranchGroup一样,是一个场景图的根节点.虽然共享图作为Java3D场景图的一部分从不直接出现,但是连接节点可以引用.另外群节点还可以包含各种子节点以及所包含对象的群节点或叶节点.这些子节点用一个关联索引属性来允许对特定的子节点进行操作.如果没有指明特定的顺序群节点,Java3D还可以按照任意指定的顺序来绘制群节点的子节点.虽然叶节点是场景图的抽象类,它没有子节点,但叶节点包括了Java3D的各种信息.叶节点由Shape3D、ViewPlatform、Sound、Light以及用户定义的行为节点等组成,Shape3D和ViewPlatform节点在Java3D的视模型和输入模型中扮演着重要的角色,因为它描述了图形系统的两个重要方面,其中,Shape3D描述了场景中对象的几何形状,而ViewPlatform则标定了用户或其视点在虚拟环境中的方向或位置.
另外,应用程序还可像操纵分枝图中的任意对象一样,来操纵ViewPlatform,而且应用程序还可平移、旋转和缩放ViewPlatform,即通过改变ViewPlatform的位置和方向,ViewPlatform将随同用户的视点一起移动,来浏览整个虚拟环境.虽然ViewPlatform是按照事先规定的路线浏览场景,但不会限制用户视点的移动和向不同方向浏览场景.
JAVA 3DMAX PS C++是干什么的
楼主你好!
这些,我来 分别 解释一下:
1、JAVA和C++:
JAVA和C++都是程序设计语言,都是面向对象的。JAVA一般用于编写跨平台的程序、网络开发、手机软件开发等,WINDOWS下需要安装JAVA虚拟机。
C++,可以说是面向对象编程语言之父,功能十分强大,适合任何方面的开发,就封装而言,C++完全包容了C语言,既适合进行系统级开发,也可以进行网络开发、人工智能等,不过C++难度大,相当复杂,学习周期相当长
2、3DMAX与PS:
3DMAX全称其实是:3DS MAX,AutoDesk公司的产品,三维(Three-Dimens)建模与设计软件,可以渲染静帧图像,也可以做动画、特效,现在相当多的媒体制作公司是用3DMAX制作三维动画,还有MAYA也是制作3D动画的软件,大有取代3DMAX之势,不过3DMAX在室内、园林、建筑等设计领域,优势强于MAYA
PS,全称是Photoshop,Adobe公司的产品,平面位图图像处理软件,和CorelDWAR一起,是各大设计类工作室不可缺少的软件。
3DMAX与PS有两个本质上的区别,其一:前者是三维设计软件,后者是平面设计软件;其二:前者是矢量图形制作软件,而后者是平面图像处理软件。
希望对你有所帮助,谢谢!
java三维设计的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于三维设计、java三维设计的信息别忘了在本站进行查找喔。
发布于:2022-11-28,除非注明,否则均为
原创文章,转载请注明出处。