我有以下代码:
#include <irrlicht.h> using namespace irr; using namespace core; using namespace scene; using namespace video; using namespace io; using namespace gui; int main(int argc, char** argv) { IrrlichtDevice *device = createDevice(EDT_SOFTWARE, dimension2d<unsigned int>(640, 480), 16, false, false, false, 0); device->setWindowCaption(L"Train Simulator Demo"); IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); IAnimatedMesh* mesh1 = smgr->getMesh("media/simple_engine.b3d"); IAnimatedMesh* mesh2 = smgr->getMesh("media/simple_track.b3d"); IAnimatedMeshSceneNode* node1 = smgr->addAnimatedMeshSceneNode( mesh1 ); IAnimatedMeshSceneNode* node2 = smgr->addAnimatedMeshSceneNode( mesh2 ); if (node1) node1->setMaterialFlag(EMF_LIGHTING, false); if (node2) { node2->setMaterialFlag(EMF_LIGHTING, false); node2->setMaterialTexture( 0, driver->getTexture("media/grass.jpg") ); } ICameraSceneNode * pCamera = smgr->addCameraSceneNode(0, vector3df(5,0,5), vector3df(0,0,0)); pCamera->setNearValue(0.5f); pCamera->setFarValue(40.0f); while(device->run()) { driver->beginScene(true, true, SColor(0,0,0,0)); u32 cur_time = device->getTimer()->getTime(); float f_time = (float)cur_time / 1000.0f; // Change the camera pCamera->setPosition(vector3df(sinf(f_time) * 8.0f ,3.0f ,cosf(f_time) * 8.0f)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); } device->drop(); return 0; }
…运行时会产生以下结果:
……这很好,只是草应该是16×16的正方形网格,看起来有些三角形是因为某种原因被修剪的。这似乎还与三角形仅部分显示在屏幕上有关,因为仅显示完全位于窗口视区内的三角形。我该怎么解决?
附加:
操作系统: Ubuntu 10.04 64位 鬼火 版本:1.7 beta
结果发现问题是我使用的是软件渲染器而不是OpenGL渲染器。
所以第13行:
IrrlichtDevice *device = createDevice(EDT_SOFTWARE, dimension2d<unsigned int>(640, 480), 16, false, false, false, 0);
变成:
IrrlichtDevice *device = createDevice(EDT_OPENGL, dimension2d<unsigned int>(640, 480), 16, false, false, false, 0);