<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    n維空間

    歡迎加入我們,一起學(xué)習(xí)java 3D編程,一起寫文章 ...

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      20 隨筆 :: 0 文章 :: 16 評論 :: 0 Trackbacks

    級別: 初級

    Dethe Elza (delza@livingcode.org), 資深技術(shù)架構(gòu)師, Blast Radius

    VRML 的重生已經(jīng)使得 Web 對 3D 相當(dāng)安全


    以前,Web 上使用的 3D 曾經(jīng)許諾要與構(gòu)建一個 Web 頁面一樣簡單。不幸的是,3D(即使是非常簡單的 3D)也都比顯示滾動的文本和圖片要更加復(fù)雜。每個 VRML 供應(yīng)商都實現(xiàn)了一組不同的規(guī)范,而且從來都不相互進行溝通。因此 Web 上的 3D 就慢慢消失了。否則又能怎樣呢?后來出現(xiàn)了 XML 風(fēng)格的 VRML:X3D,它已經(jīng)成長為 VRML 的兄弟 H-Anim(Humanoid Animation)和 GeoVRML。Web 上的 3D 的最終用途可以超過虛擬購物中心嗎?這篇有關(guān) XML 媒體的最新文章展示了它能實現(xiàn)哪些功能。在本文中,Dethe 會著重介紹 X3D 的兩種現(xiàn)在已經(jīng)可以使用的用法,并展望一下 X3D 的未來。
    Virtual Reality Markup Language(虛擬現(xiàn)實標(biāo)記語言,VRML)試圖卷入 Web 風(fēng)潮而未獲成功以來已經(jīng)有 10 年的時間了。現(xiàn)在 X3D(使用 XML 開發(fā)的 VRML)已經(jīng)成為一項 ISO 標(biāo)準(zhǔn),并開始開發(fā)實現(xiàn)了。XGL(使用 XML 編寫的 OpenGL)是一個與之競爭的 3D XML 規(guī)范。Web Hypertext Application Technologies Working Group(Web 超文本應(yīng)用技術(shù)工作組,WHATWG)目前正在從事 3D canvas 提案的工作。開放源碼的 3D 工具 Blender 現(xiàn)在可以導(dǎo)出 X3D(請參閱 參考資料 中更多有關(guān)這些技術(shù)的內(nèi)容)。在所有這些技術(shù)充分發(fā)展之后,也許就是瀏覽器中 3D 顯示的新紀(jì)元了。這些技術(shù)會如何發(fā)展呢?它們可以與其他 XML 實現(xiàn)進行集成嗎?例如 XHTML 和 SVG?

    VRML 發(fā)生了什么?

    當(dāng) HTML 依然是星星之火時,VRML 就已經(jīng)出現(xiàn)了。這是試圖將 View Source 和虛擬現(xiàn)實的概念連接在一起的一次嘗試,可以對 Web 迅速進行擴展。作為一個概念來說這非常不錯,但是它卻面對著太多的限制:硬件尚未準(zhǔn)備好,OpenGL 也不是一種標(biāo)準(zhǔn)的特性,現(xiàn)有的實現(xiàn)尚不完整,兼容性也不好。VRML 最廣泛的用途就是虛擬購物中心,這并沒有太多用處;因為這除了依然具有訪問真正超市的所有不便之處,還引入了互聯(lián)網(wǎng)購物的風(fēng)險。VRML 繼續(xù)被研究,大部分工作都是在研究領(lǐng)域中開展的,但是 Web 社區(qū)卻不關(guān)心這種技術(shù)了。

    但是它從來都沒有完全消亡,而且時代已經(jīng)變了。隨著 XML 得到無所不在的應(yīng)用,VRML 規(guī)范進行了重寫,從而利用 XML 解釋器的優(yōu)點(以及程序員對 XML 比較熟悉這個優(yōu)點)。最終得到的規(guī)范 X3D 是由 Web3D Consortium 負責(zé)維護的,它提供了開放源碼的工具、例子和文檔(請參閱 參考資料)。游戲、OpenGL 和廉價的顯卡都驅(qū)動著標(biāo)準(zhǔn)計算機的圖形能力向超過早期專用圖形工作站(這些機器的成本比普通計算機高幾個數(shù)量級)的方向發(fā)展。這些因素現(xiàn)在促進了 VRML 的又一次蓬勃發(fā)展。

    X3D 正在不斷發(fā)展。盡管目前它仍然只是一種前沿技術(shù),但是使用這種技術(shù)的領(lǐng)域正在不斷發(fā)展,而且變得更加重要。本文提供了兩個在 X3D 的主要商業(yè)應(yīng)用領(lǐng)域之外的例子:快速原型設(shè)計和教育。

    它的性能怎么樣呢?諸如 Quake 之類的游戲的引擎針對特定的角度和圖像類型進行了優(yōu)化;它們并不是通用的 3D 呈現(xiàn)引擎。另一方面,X3D 播放器不但是一個通用的 3D 引擎,而且構(gòu)建并維護了一個場景圖和一個 XML Document Object Model(DOM)樹。然而,對于很多應(yīng)用來說,目前的性能就已經(jīng)足夠了,以后可以再進行改進。

    X3D(可能)成功的秘密是 OpenGL 已經(jīng)成為無處不在的技術(shù)。使用 OpenGL,可以實時地呈現(xiàn)高品質(zhì)的 3D 場景,而沒有光線跟蹤器那樣大的開銷。在 OpenGL 基礎(chǔ)上構(gòu)建的語言有很多,從 XGL(請參閱 參考資料),它負責(zé)使用 XML 對 OpenGL API 進行編碼;到 X3D,它負責(zé)提供一種高級接口,用來合并場景圖、動畫和腳本;再到 Flatland 的 3DML,這是基于構(gòu)建塊的概念的。盡管這些技術(shù)的使用日益簡單,但是它們還是有很多限制。與易用性相比,X3D 看起來對性能的關(guān)注似乎不夠;因為 XGL Web 頁面已經(jīng)有兩年的時間沒有更新了,而且 3DML 格式還沒有廣泛地得到應(yīng)用。

    在 VRML 進行標(biāo)準(zhǔn)化之后,又提出并開發(fā)了兩個擴展:

    • GeoVRML 用來克服 VRML 對整個世界的視角的有限性 —— 僅限于房間中的東西。GeoVRML 使得對室外場景使用 VRML 更加簡單,例如海拔圖。
    • H-Anim 用來允許 VRML 對動畫特性圖進行建模 —— 這與商業(yè)程序 Poser 可以實現(xiàn)的功能類似,但是對于聯(lián)結(jié)操作(用于逆向運動,從而提供真實的動畫動作)方面有一些限制。

    GeoVRML 和 H-Anim 都被吸收到了 X3D 規(guī)范中,但是由于 X3D 是模塊化的,所以并非所有的配置文件和查看器都支持這些擴展。由于目前已經(jīng)成為一項 ISO 標(biāo)準(zhǔn),X3D 也從中獲益良多。

    X3D 使用配置文件的形式定義了完整規(guī)范的幾個子集:

    • Interchange 配置文件可以支持幾何、結(jié)構(gòu)、基本光源和動畫,它主要用來在應(yīng)用程序之間轉(zhuǎn)換數(shù)據(jù)。
    • Interactive 配置文件添加了其他光源、增益和傳感器節(jié)點,用來與 3D 環(huán)境進行交互。
    • Immersive 配置文件添加了音頻、沖突、霧化和腳本功能。
    • Full 配置文件添加了 NURBS、H-Anim 和 GeoSpatial 組件。

    這些是基本的配置文件。其他配置文件包括 MPEG-4 Interactive,這是 Interactive 配置文件的一個低級版本,目標(biāo)是用于移動設(shè)備上;還有 CAD Distillation Format(CDF),用來轉(zhuǎn)換和交換 Computer Aided Drafting(CAD)數(shù)據(jù)。

    因此,X3D 目前可以用來干什么呢?Web3D 站點上列出的主要領(lǐng)域有 CAD、醫(yī)療圖像和可視化仿真,但是還提到了制圖、交互、技術(shù)訓(xùn)練和制作文檔。X3D 還可以用于數(shù)據(jù)的可視化、快速原型、娛樂和游戲的開發(fā)。在本文中我們無法涵蓋所有這些領(lǐng)域的內(nèi)容,因此將只關(guān)注其中的兩個領(lǐng)域 —— 快速原型開發(fā)和教育,然后我們再介紹一下 X3D 的前景。





    回頁首


    快速原型開發(fā)

    假設(shè)您希望開發(fā)一個新產(chǎn)品。但是應(yīng)該如何向自己的潛在投資者(或顧客)介紹這個產(chǎn)品呢?可以構(gòu)建一個物理模型,讓一個藝術(shù)家在紙上將其呈現(xiàn)出來,或者使用 X3D 將其仿制出來,并讓有興趣的團體觀看它。



    圖 1. 圖形(一個概念性手持式計算機)
    圖形(一個概念性手持式計算機)

    清單 1 展示了主要的 X3D 結(jié)構(gòu)(完整的文件請參閱 下載 一節(jié)中的 fig.x3d),它們用來創(chuàng)建 圖 1 中的圖形,使用了 FreeWrl 瀏覽器(請參閱 參考資料)。這是一個非常基本的例子,展示了可以使用 X3D 實現(xiàn)哪些功能,而不用深入鉆研更高級的問題,例如打光、動畫和腳本。我是手工編寫這個文件的,這是一種選擇,但是大部分人更喜歡使用 3D 繪圖程序,并使用 X3D 呈現(xiàn)給 Web。



    清單 1. fig.x3d
                <?xml version="1.0" encoding="utf-8"?>
                <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN"
                "http://www.web3d.org/specifications/x3d-3.0.dtd">
                <X3D profile='Immersive'
                xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance'
                xsd:noNamespaceSchemaLocation=
                'http://www.web3d.org/specifications/x3d-3.0.xsd'>
                <head>
                <meta name='filename' content='fig.x3d' />
                <meta name='author' content='Dethe Elza' />
                <meta name='created' content='2005-12-02' />
                <meta name='description'
                content='Prototype of the Fig, a notional handheld computer.' />
                </head>
                <Scene>
                <!-- This NavigationInfo node is added to many scenes,
                making examination of objects easier. -->
                <NavigationInfo type='"EXAMINE" "ANY"' />
                <Viewpoint description='' position='0 0 .55' />
                <Background skyColor="1 1 1" groundColor="1 1 1" />
                <!-- Set up the basic shape of the device -->
                <Shape DEF="screen">
                <Appearance>
                <Material diffuseColor='.8 .8 .8' />
                <ImageTexture url="hello_world.png" />
                </Appearance>
                <Box size='.5 .3 .01' />
                </Shape>
                <!-- Put a logo on the lower-left side -->
                <Transform translation="-.23 -.12 .015">
                <Shape DEF="logo">
                <Appearance>
                <Material diffuseColor=".8 .8 .8" />
                <ImageTexture url="fig_logo.png" />
                </Appearance>
                <Box size=".025 .03 .00001" />
                </Shape>
                </Transform>
                <!-- Define a speaker grille and translate to the left side -->
                <Transform translation="-.23 .12 .015">
                <Group DEF="Grille">
                <!-- Dot for the first hole of grille -->
                <Shape>
                <Appearance DEF="grey_hole">
                <Material diffuseColor=".2 .2 .2" />
                </Appearance>
                <Sphere DEF="Dot" radius=".001" />
                </Shape>
                <!-- Now we re-use the dot, translating to a new location -->
                <Transform translation="-.01 -.005 0">
                <Shape use="Dot" />
                </Transform>
                <!-- Snipped five more translated dots -->
                </Group>
                </Transform>
                <!-- Reuse the speaker grille, translated to the right side -->
                <Transform translation=".23 .12 .015">
                <Group USE="Grille" />
                </Transform>
                <!-- Define a raised area on the left for hand-hold and buttons -->
                <Transform translation="-.23 0 0">
                <Shape DEF="control_area">
                <Appearance DEF="white_plastic">
                <Material diffuseColor='.9 .9 .9' shininess="1" />
                </Appearance>
                <Box size=".04 .3 .03" />
                </Shape>
                </Transform>
                <!-- Re-use handle, translating it to the right -->
                <Transform translation=".23 0 0">
                <Shape USE="control_area" />
                </Transform>
                <!-- Create a raised bevel to round the box -->
                <Transform translation="-.25 0 0">
                <Shape DEF="vertical_bevel">
                <Appearance USE="white_plastic" />
                <Cylinder height=".3" radius=".015" />
                </Shape>
                </Transform>
                <!-- Re-use bevel -->
                <Transform translation=".25 0 0">
                <Shape USE="vertical_bevel" />
                </Transform>
                <!-- Four more bevels snipped -->
                <!-- Define a sphere to round the corner -->
                <Transform translation="-.25 -.15 0">
                <Shape DEF="Corner">
                <Appearance USE="white_plastic" />
                <Sphere radius=".015" />
                </Shape>
                </Transform>
                <!-- Three more corners snipped -->
                <!-- Define the camera/microphone grouping in the top bevel -->
                <Transform translation="0 .148 .014">
                <Group DEF="camera_microphone">
                <Transform rotation="1 0 0 1.57">
                <Shape>
                <Appearance USE="white_plastic" />
                <Cylinder radius=".006" height=".002" />
                </Shape>
                </Transform>
                <Shape DEF="camera">
                <Appearance>
                <Material diffuseColor="0 0 0" shininess="1.0" />
                </Appearance>
                <Sphere radius=".003" />
                </Shape>
                <Transform translation="-.03 -.002 .01">
                <Shape DEF="microphone">
                <Appearance USE="grey_hole" />
                <Box size=".006 .001 .001" />
                </Shape>
                </Transform>
                <Transform translation=".03 -.002 .01">
                <Shape USE="microphone" />
                </Transform>
                </Group>
                </Transform>
                <!-- Define the coloured buttons on the left -->
                <Transform translation="-.23 .02 .015">
                <Group DEF="buttons">
                <!-- Red button -->
                <Transform translation="-.01 0 0">
                <Shape>
                <Appearance>
                <Material diffuseColor="1 0 0" shininess=".4" />
                </Appearance>
                <Sphere radius=".006" />
                </Shape>
                </Transform>
                <!-- Yellow, Green, and Blue buttons snipped -->
                </Group>
                </Transform>
                <!-- Re-use buttons on the right, flipped -->
                <Transform translation=".23 .02 .015" rotation="0 1 0 3.15">
                <Group USE="buttons" />
                </Transform>
                </Scene>
                </X3D>
                





    回頁首


    教育

    教育是 X3D 可以發(fā)揮作用的另外一個領(lǐng)域。利用免費的工具,我們可以創(chuàng)建教學(xué)資料、動畫、模擬,等等。學(xué)生可以進入到 X3D 世界中,查看源代碼并對其進行擴展或調(diào)節(jié)。 圖 2 是由一個 Python 腳本(下載 中也包括了這個腳本)生成的理想實體的簡單視圖。



    圖 2. 理想實體
    理想實體

    清單 2 展示了主要的 X3D 結(jié)構(gòu)(完整的文件請參閱 下載 一節(jié)中的 platonics.x3d),它們用來創(chuàng)建上面的圖像。使用腳本來生成模型,就可以創(chuàng)建簡單或復(fù)雜的可視化效果。另外,可以使用腳本在不同格式之間進行轉(zhuǎn)換,從而對由(或為)其他程序所生成的 3D 內(nèi)容重新進行規(guī)劃(請參閱 參考資料)。



    清單 2. platonics.x3d
                <?xml version="1.0" encoding="utf-8"?>
                <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN"
                "http://www.web3d.org/specifications/x3d-3.0.dtd">
                <X3D profile='Immersive'
                xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance'
                xsd:noNamespaceSchemaLocation=
                'http://www.web3d.org/specifications/x3d-3.0.xsd'>
                <head>
                <meta name='filename' content='platonics.x3d' />
                <meta name='author' content='Dethe Elza' />
                <meta name='created' content='2005-10-20' />
                <meta name='description'
                content='Display of the Platonic solids' />
                </head>
                <Scene>
                <!-- This NavigationInfo node is added to many scenes,
                making examination of objects easier. -->
                <NavigationInfo type='"EXAMINE" "ANY"' />
                <Viewpoint description='Default' position='0 0 7' />
                <Background skyColor="1 1 1" groundColor="1 1 1" />
                <!-- tetrahedron description snipped -->
                <!-- cube description snipped -->
                <!-- octohedron description snipped -->
                <Transform translation="1.25 0 0" scale=".5 .5 .5">
                <!-- this is the dodecahedron description -->
                <Shape>
                <Appearance>
                <Material diffuseColor="0 1 0" />
                </Appearance>
                <IndexedFaceSet coordIndex="0,7,8,15,4,-1, 6,10,9,8,7,-1,
                0,1,5,6,7,-1, 1,2,12,11,5,-1, 12,13,16,17,11,-1,
                2,3,18,13,12,-1, 4,3,2,1,0,-1, 3,4,15,14,18,-1,
                6,5,11,17,10,-1, 9,10,17,16,19,-1, 8,9,19,14,15,-1,
                13,18,14,19,16">
                <Coordinate point=".577 .577 .577, .934 0 .357, .577 -.577
                .577, 0 -.357 .934, 0 .357 .934, .934 0 -.357, .577 .577
                -.577, .357 .934 0, -.357 .934 0, -.577 .577 -.577, 0 .357
                -.934, .577 -.577 -.577, .357 -.934 0, -.357 -.934 0,
                -.934 0 .357, -.577 .577 .577, -.577 -.577 -.577, 0 -.357
                -.934, -.577 -.577 .577, -.934 0 -.357" />
                </IndexedFaceSet>
                </Shape>
                </Transform>
                <!-- icosahedron description snipped -->
                </Scene>
                </X3D>
                





    回頁首


    想要玩游戲嗎?

    我到現(xiàn)在還沒有看到過直接使用 X3D 來開發(fā)游戲內(nèi)容或游戲世界的例子。盡管最近一段時間之內(nèi)我們還無法使用 X3D 重寫 Quake 或 Halo 之類的游戲,但是編寫類似的程序是可能的。SVG 曾經(jīng)一度被認為速度太慢,不適合用來開發(fā)游戲,但是現(xiàn)在時代已經(jīng)改變了。現(xiàn)在 Gnome 項目已經(jīng)使用 SVG 將自己的程序進行了重寫。很快,您就會意識到盡量使用 XML 來保存媒體內(nèi)容的優(yōu)點,這可以在所有的內(nèi)容上充分利用各種工具。在這種情況中,為 2D 內(nèi)容使用 SVG 和為 3D 內(nèi)容使用 X3D 就更有意義了。





    回頁首


    X3D 的將來

    盡管 X3D 與 SVG 是獨立進行開發(fā)的,但是這兩種技術(shù)對于 3D 和 2D 圖形來說都是非常優(yōu)秀的。到現(xiàn)在為止,我還沒有見過任何工具可以支持在 X3D 中使用 SVG 進行表面紋理的處理,但是的確有計劃要支持這種功能。如果人們已經(jīng)編寫了一些工具來使用 SVG 顯示 3D 或者一些 canvas 標(biāo)記,那么采用一種方法對 SVG 文件中的 X3D 進行靜態(tài)呈現(xiàn)就更有意義了。

    使用最新的版本 Firefox 1.5,SVG 和可以使用腳本編程的 canvas 標(biāo)記就可以進入主流領(lǐng)域了(內(nèi)嵌到 Firefox 中,而且不需要任何插件)。WHATWG 和 Firefox 開發(fā)人員已經(jīng)提出一些提案對 canvas 標(biāo)記進行擴展,使其包括 3D 上下文。由于 Firefox 是在一個跨平臺的應(yīng)用程序工具包(XULRunner)的基礎(chǔ)之上構(gòu)建的,因此應(yīng)用程序可以充分利用強大的 2D 和 3D 工具(以及這個工具包中其他基于 XML 的技術(shù)),這種可能性正在吸引人們的興趣。我預(yù)計會出現(xiàn)可以完全使用 XML 媒體堆棧的應(yīng)用程序。

    另外一個可以看到 X3D 發(fā)展的領(lǐng)域是 Fab Labs(請參閱 參考資料)。這是由 MIT 發(fā)起的,這些小型的工作組讓您幾乎能夠創(chuàng)建任何您可以建模的東西。尚未進行標(biāo)準(zhǔn)化的(就我所了解的而言)是用來捕獲這些模型的 3D 語言。如果存在這種語言(讓我們將其稱為 Fabrication Markup Language(FabML)),X3D 就可以為它構(gòu)造最佳的基礎(chǔ)。






    回頁首


    下載

    描述 名字 大小 下載方法
    Example code x-matters43-examples.zip 72KB HTTP
    關(guān)于下載方法的信息 Get Adobe® Reader®


    參考資料

    學(xué)習(xí)

    獲得產(chǎn)品和技術(shù)
    • FreeWRL Viewer 是一個 Linux 和 OS X 上的查看器(Windows 支持很快就會有了)。本文中就是使用這個工具來對例子進行測試的,希望在 2006 年初可以支持完整的交換配置文件。

    • Xj3D Viewer 是一個使用 Java 語言編寫的開放源碼 X3D 查看器。

    • X3D-Edit 是一個用來構(gòu)建 X3D 圖形的基于 Java 的編輯器。

    • lib3ds 是一個用來使用 3DS 模型格式的開放源碼庫。

    • Rawkee Maya Exporter 可以用來從 Alias Maya 應(yīng)用程序中導(dǎo)出 X3D 數(shù)據(jù)。

    • Blender 是一個重要的開放源碼 3D 應(yīng)用程序,提供了 3D 導(dǎo)出器。



    關(guān)于作者

    Dethe Elza 的照片

    Dethe Elza 自己最喜歡的職位是首席瘋狂科學(xué)家(Chief Mad Scientist)。可以通過 delza@livingcode.org 與 Dethe 聯(lián)系。他在 http://livingcode.blogspot.com/ 上維護了一個有關(guān) Python 和 Mac OS X 的 blog,并為自己的孩子編寫程序。歡迎為這個欄目提供建議和推薦信息。

    posted on 2007-04-21 00:23 java3d 閱讀(431) 評論(0)  編輯  收藏 所屬分類: 教程
    主站蜘蛛池模板: 亚洲免费视频网站| 亚洲av无码乱码国产精品| 亚洲日本VA午夜在线影院| 麻豆一区二区免费播放网站| 亚洲精品影院久久久久久| 亚洲免费观看在线视频| 国产精品亚洲片夜色在线| 日本一道综合久久aⅴ免费| 美女又黄又免费的视频| 亚洲午夜精品久久久久久浪潮| 免费精品视频在线| 精品亚洲永久免费精品| 91精品免费不卡在线观看| 亚洲国产一区在线观看| 国内精品免费视频自在线| 精品久久久久久久久亚洲偷窥女厕| 免费大学生国产在线观看p| 一级毛片免费不卡| 久久青青成人亚洲精品| 成人AV免费网址在线观看| 亚洲狠狠婷婷综合久久| 亚洲无码日韩精品第一页| 日韩精品无码免费专区午夜不卡| 亚洲AV无码专区在线播放中文| 日本免费xxxx| 黄页网址在线免费观看| 久久亚洲精品中文字幕三区| 最近2019中文字幕免费直播| 亚洲男人的天堂网站| 国产亚洲精品无码拍拍拍色欲| 久久A级毛片免费观看| 亚洲美国产亚洲AV| 亚洲色成人中文字幕网站| 真人做A免费观看| 人人公开免费超级碰碰碰视频 | 毛片免费在线观看| 亚洲一级大黄大色毛片| 亚洲国产专区一区| 美女裸身网站免费看免费网站| 特级毛片在线大全免费播放| 亚洲麻豆精品果冻传媒|