用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編程技巧。到目前爲止(2007年11月),NeHe教程一共有48節。我的計劃是使用OpenInventor來實現所有48節課程同樣的效果。目的是複習和鞏固OpenGL的知識,同時與各位讀者交流OpenInventor的使用技巧。
因爲篇幅的限制,我不會介紹NeHe教程中OpenGL的實現過程,因爲NeHe的教程已經講解的很清楚了,目前網絡中也有NeHe的中文版本。我將使用VC 2003作爲主要的編譯器。程序框架採用和NeHe一樣的Win32程序框架,不使用MFC。程序也可以在VC Express,VC 2005/2008中編譯。我採用的OpenInventor開發環境是Coin,這是一個免費開源的OpenInventor開發庫。文章 《OpenInventor-Coin3D開發環境》 介紹瞭如何在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 >