1 // Copyright (C) 2008-2012 Colin MacDonald
\r
2 // No rights reserved: this software is in the public domain.
\r
4 #include "testUtils.h"
\r
7 using namespace core;
\r
8 using namespace scene;
\r
9 using namespace video;
\r
11 /** Tests that the geometry creator does what it says it does. */
\r
12 bool testGeometryCreator(void)
\r
14 IrrlichtDevice *device = createDevice(video::EDT_BURNINGSVIDEO,
\r
15 core::dimension2du(160,120), 32);
\r
19 IVideoDriver* driver = device->getVideoDriver();
\r
20 ISceneManager* smgr = device->getSceneManager();
\r
21 (void)smgr->addCameraSceneNode(0, vector3df(0, 0, -50));
\r
23 const IGeometryCreator * geom = smgr->getGeometryCreator();
\r
25 ITexture * wall = driver->getTexture("../media/wall.bmp");
\r
28 material.Lighting = false;
\r
29 material.TextureLayer[0].Texture = wall;
\r
31 irr::scene::IMesh * meshHill = geom->createHillPlaneMesh(dimension2df(10, 5), dimension2du(5, 5),
\r
32 &material, 10, dimension2df(2, 2), dimension2df(3, 3) );
\r
33 IMeshSceneNode * node = smgr->addMeshSceneNode(meshHill, 0, -1,
\r
34 vector3df(0, 10, 0), vector3df(-60, 0, 0));
\r
37 irr::scene::IMesh * meshArrow = geom->createArrowMesh(4, 8, 10, 6, 3, 6,
\r
38 SColor(255, 255, 0, 0), SColor(255, 0, 255, 0));
\r
39 node = smgr->addMeshSceneNode(meshArrow, 0, -1, vector3df(-10, -20, 0));
\r
40 node->setMaterialFlag(video::EMF_LIGHTING, false);
\r
43 irr::scene::IMesh * meshCone = geom->createConeMesh(5.f, 10.f, 16);
\r
44 node = smgr->addMeshSceneNode(meshCone, 0, -1, vector3df(-35, -20, 0));
\r
45 node->setMaterialFlag(video::EMF_LIGHTING, false);
\r
46 node->setMaterialTexture(0, wall);
\r
49 irr::scene::IMesh * meshCube = geom->createCubeMesh();
\r
50 node = smgr->addMeshSceneNode(meshCube, 0, -1, vector3df(-20, -20, 0));
\r
51 node->setMaterialFlag(video::EMF_LIGHTING, false);
\r
52 node->setMaterialTexture(0, wall);
\r
55 irr::scene::IMesh * meshCylinder = geom->createCylinderMesh(3, 10, 16);
\r
56 node = smgr->addMeshSceneNode(meshCylinder, 0, -1, vector3df(0, -20, 10), core::vector3df(45,0,0));
\r
57 node->setMaterialFlag(video::EMF_LIGHTING, false);
\r
58 node->setMaterialTexture(0, wall);
\r
59 meshCylinder->drop();
\r
61 irr::scene::IMesh * meshSphere = geom->createSphereMesh();
\r
62 node = smgr->addMeshSceneNode(meshSphere, 0, -1, vector3df(10, -15, 0));
\r
63 node->setMaterialFlag(video::EMF_LIGHTING, false);
\r
64 node->setMaterialTexture(0, wall);
\r
67 irr::scene::IMesh * meshVolumeLight = geom->createVolumeLightMesh();
\r
68 node = smgr->addMeshSceneNode(meshVolumeLight, 0, -1, vector3df(20, -20, -10));
\r
69 node->setMaterialFlag(video::EMF_LIGHTING, false);
\r
70 node->setMaterialTexture(0, wall);
\r
71 node->setScale(core::vector3df(4.f,4.f,4.f));
\r
72 meshVolumeLight->drop();
\r
74 bool result = false;
\r
76 if (driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(0, 80, 80, 80)))
\r
80 result = takeScreenshotAndCompareAgainstReference(driver, "-testGeometryCreator.png", 99.994f);
\r
85 driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
\r
88 scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(0,100.0f,2.0f);
\r
89 camera->setPosition(core::vector3df(2000.0f,5000.f,0.0f));
\r
90 camera->setTarget(core::vector3df(0.0f,0.0f,0.0f));
\r
91 camera->setFarValue(20000.0f);
\r
92 device->getCursorControl()->setVisible(false); // disable mouse cursor
\r
94 video::IImage* colorMapImage = driver->createImageFromFile("../media/terrain-texture.jpg");
\r
95 video::IImage* heightMapImage = driver->createImageFromFile("../media/terrain-heightmap.bmp");
\r
97 scene::IAnimatedMesh* terrain = smgr->addTerrainMesh("TerrainMeshName",
\r
98 colorMapImage, heightMapImage,
\r
99 core::dimension2d<f32>(40, 40), // size of a pixel
\r
100 8*40); // maximum height
\r
101 colorMapImage->drop();
\r
103 heightMapImage->drop();
\r
104 heightMapImage = 0;
\r
106 scene::IAnimatedMeshSceneNode* anode = smgr->addAnimatedMeshSceneNode(terrain);
\r
109 anode->setMaterialFlag(video::EMF_LIGHTING, false);
\r
110 anode->setPosition(core::vector3df(-5000,0,-5000));
\r
113 driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(0));
\r
115 driver->endScene();
\r
117 // This screenshot shows some mipmap problems, but this seems to be
\r
118 // no fault of the mesh
\r
119 result &= takeScreenshotAndCompareAgainstReference(driver, "-testTerrainMesh.png", 99.989f);
\r
121 device->closeDevice();
\r