]> git.lizzy.rs Git - irrlicht.git/blob - tests/testGeometryCreator.cpp
Fix bug introduced in last merge from svn trunk
[irrlicht.git] / tests / testGeometryCreator.cpp
1 // Copyright (C) 2008-2012 Colin MacDonald\r
2 // No rights reserved: this software is in the public domain.\r
3 \r
4 #include "testUtils.h"\r
5 \r
6 using namespace irr;\r
7 using namespace core;\r
8 using namespace scene;\r
9 using namespace video;\r
10 \r
11 /** Tests that the geometry creator does what it says it does. */\r
12 bool testGeometryCreator(void)\r
13 {\r
14         IrrlichtDevice *device = createDevice(video::EDT_BURNINGSVIDEO,\r
15                                         core::dimension2du(160,120), 32);\r
16         if (!device)\r
17                 return false;\r
18 \r
19         IVideoDriver* driver = device->getVideoDriver();\r
20         ISceneManager* smgr = device->getSceneManager();\r
21         (void)smgr->addCameraSceneNode(0, vector3df(0, 0, -50));\r
22 \r
23         const IGeometryCreator * geom = smgr->getGeometryCreator();\r
24 \r
25         ITexture * wall = driver->getTexture("../media/wall.bmp");\r
26 \r
27         SMaterial material;\r
28         material.Lighting = false;\r
29         material.TextureLayer[0].Texture = wall;\r
30 \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
35         meshHill->drop();\r
36 \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
41         meshArrow->drop();\r
42 \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
47         meshCone->drop();\r
48 \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
53         meshCube->drop();\r
54 \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
60 \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
65         meshSphere->drop();\r
66 \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
73 \r
74         bool result = false;\r
75         device->run();\r
76         if (driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(0, 80, 80, 80)))\r
77         {\r
78                 smgr->drawAll();\r
79                 driver->endScene();\r
80                 result = takeScreenshotAndCompareAgainstReference(driver, "-testGeometryCreator.png", 99.994f);\r
81         }\r
82 \r
83         smgr->clear();\r
84 \r
85         driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);\r
86 \r
87         // add camera\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
93 \r
94         video::IImage* colorMapImage = driver->createImageFromFile("../media/terrain-texture.jpg");\r
95         video::IImage* heightMapImage = driver->createImageFromFile("../media/terrain-heightmap.bmp");\r
96 \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
102         colorMapImage = 0;\r
103         heightMapImage->drop();\r
104         heightMapImage = 0;\r
105 \r
106         scene::IAnimatedMeshSceneNode* anode = smgr->addAnimatedMeshSceneNode(terrain);\r
107         if (anode)\r
108         {\r
109                 anode->setMaterialFlag(video::EMF_LIGHTING, false);\r
110                 anode->setPosition(core::vector3df(-5000,0,-5000));\r
111         }\r
112 \r
113         driver->beginScene(video::ECBF_COLOR | video::ECBF_DEPTH, video::SColor(0));\r
114         smgr->drawAll();\r
115         driver->endScene();\r
116 \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
120 \r
121         device->closeDevice();\r
122         device->run();\r
123         device->drop();\r
124 \r
125         return result;\r
126 }\r
127 \r