用OpenInventor實現的NeHe OpenGL教程-第十八課

OpenInventor實現的NeHe OpenGL教程-第十八課

 

      

 

這節課我們將在前面講述的第七節課程的基礎上,顯示球體,圓柱體,圓錐體等二次幾何體。

 

       下面的代碼是在第七節課程的基礎上增加或修改的代碼。先定義一些全局變量。

SoSwitch*              g_pSceneSwitch = NULL;//用來切換不同的二次幾何體

 

       和以前的代碼一樣,我們將在函數BuildScene中創建場景數據。

void BuildScene(void)

{

 

     //創建切換節點

     g_pSceneSwitch = new SoSwitch;

     g_pSceneSwitch->whichChild = 0;

     g_pOivSceneRoot->addChild(g_pSceneSwitch);

     //增加立方體

     SoSeparator *pCubeSep = new SoSeparator;

     pCubeSep->addChild(new SoCube);

     g_pSceneSwitch->addChild(pCubeSep);

     //增加圓柱體

     SoSeparator *pCylinderSep = new SoSeparator;

     SoCylinder *pCylinder = new SoCylinder;

     pCylinder->radius = 1.0f;

     pCylinder->height = 3.0f;

     pCylinder->parts = SoCylinder::SIDES;

     pCylinderSep->addChild(pCylinder);

     g_pSceneSwitch->addChild(pCylinderSep);

     //增加圓盤

     SoSeparator *pDiskSep = new SoSeparator;

     SoCylinder *pDisk = new SoCylinder;

     pDisk->radius = 1.0f;

     pDisk->height = 0.001f;

     pDiskSep->addChild(pDisk);

     g_pSceneSwitch->addChild(pDiskSep);

     //增加球體

     SoSeparator *pSphereSep = new SoSeparator;

     SoSphere *pSphere = new SoSphere;

     pSphere->radius = 1.3f;

     pSphereSep->addChild(pSphere);

     g_pSceneSwitch->addChild(pSphereSep);

     //增加圓錐體

     SoSeparator *pConeSep = new SoSeparator;

     SoCone *pCone = new SoCone;

     pCone->bottomRadius = 1.0f;

     pCone->height = 3.0f;

     pCone->parts = SoCone::SIDES;

     pConeSep->addChild(pCone);

     g_pSceneSwitch->addChild(pConeSep);

 

     //剩下的代碼和第七節課程相同。

}

 

    下面的代碼是鍵盤響應函數。

void KeyboardEventCB(void *userData, SoEventCallback *pEventCB)

{

//按下空格鍵,來修改二次幾何體

     if(SO_KEY_PRESS_EVENT(pEvent,SPACE))

     {

         static int iObject = 0;

          iObject = (++iObject) % 5;

         g_pSceneSwitch->whichChild = iObject;

         g_pOivView->viewAll();

     }

}

 

       現在編譯運行我們程序,屏幕上顯示一個帶有紋理的立方體。按下左右方向鍵,立方體將繞Y軸旋轉。按下上下方向鍵,立方體將繞X軸旋轉。按下PnUp/PnDn鍵,立方體將放大或縮小。按下F鍵,立方體的紋理品質將發生變化。按下L鍵將打開或關閉燈光。按下空格鍵將修改顯示的二次幾何體。效果和NeHe第十八課是相同的。

 

本課的完整代碼下載。(VC 2003 Coin2.5

 

 

後記

OpenInventor是一種基於OpenGL的面向對象的三維圖形軟件開發包。使用這個開發包,程序員可以快速、簡潔地開發出各種類型的交互式三維圖形軟件。這裏不對OpenInventor做詳細的介紹,讀者如果感興趣,可以閱讀我的blog中的這篇文章《OpenInventor 簡介》。

 

NeHe教程是目前針對初學者來說最好的OpenGL教程,它可以帶領讀者由淺入深,循序漸進地掌握OpenGL編程技巧。到目前爲止(200711月),NeHe教程一共有48節。我的計劃是使用OpenInventor來實現所有48節課程同樣的效果。目的是複習和鞏固OpenGL的知識,同時與各位讀者交流OpenInventor的使用技巧。

 

       因爲篇幅的限制,我不會介紹NeHe教程中OpenGL的實現過程,因爲NeHe的教程已經講解的很清楚了,目前網絡中也有NeHe的中文版本。我將使用VC 2003作爲主要的編譯器。程序框架採用和NeHe一樣的Win32程序框架,不使用MFC。程序也可以在VC ExpressVC 2005/2008中編譯。我採用的OpenInventor開發環境是Coin,這是一個免費開源的OpenInventor開發庫。文章 OpenInventorCoin3D開發環境 介紹瞭如何在VC中使用Coin。我使用的Coin版本是2.5。讀者可以到 www.coin3d.org 中免費下載。

 

       讀者可以在遵循GNU協議的條件下自由使用、修改本文的代碼。水平的原因,代碼可能不是最優化的,我隨時期待讀者的指正和交流。轉載請註明。謝謝。

我的聯繫方式:

E-mail: < [email protected] > < [email protected] >

Blog: < http://blog.csdn.net/RobinHao >

Site: < http://www.openinventor.cn >

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章