Open Alexander-94 opened 5 years ago
Update: Сочетание IAnimatedMesh oCreateTerrainMesh() { IAnimatedMesh o = smgr->addTerrainMesh( "my_mesh_0", driver->createImageFromFile("img/terrain/texture.png"), driver->createImageFromFile("img/terrain/map.png"), core::dimension2d< f32>(20.0f, 20.0f), 160.0f, core::dimension2d< u32 >(30, 30) ); return o; }
параметра EDT_OPENGL в device и флага IAnimatedMeshSceneNode* mesh = smgr->addAnimatedMeshSceneNode(oCreateTerrainMesh()); mesh->setMaterialFlag(video::EMF_LIGHTING, false);
Дало хороший результат, флаг EMF_LIGHTING надо включать в false иначе черная отрисовка
Флагом можно просматривать каркас mesh->setMaterialFlag(video::EMF_WIREFRAME, true);
этот меш не будет анимированным я думаю, что карту надо буде генерить нa других принципах и немного по-другому алгоритму
Я тоже думаю по другому, но как надо подумать
теперь можно делать воду и горы
вроде бы на SDL должно работать, там управление попроще http://www.cplusplus.com/forum/general/167637/
У меня почему-то не накладываются текстура o->setMaterialTexture(0, driver->getTexture("img/terrain/texture.png")) в addTerrainSceneNode если включить EDT_OPENGL в createDevice. Но я на это забил пока.
Добавил треугольный меш IAnimatedMesh oCreateTerrainMesh() { IAnimatedMesh o = smgr->addTerrainMesh( "my_mesh_0", driver->createImageFromFile("img/terrain/map.png"), driver->createImageFromFile("img/terrain/map.png"), core::dimension2d< f32>(20.0f, 20.0f), 350.0f, core::dimension2d< u32 >(30, 30) ); return o; } включил EDT_OPENGL и установил флаг IAnimatedMeshSceneNode* mesh в EMF_WIREFRAME чтобы видеть каркас этого треугольного меша mesh->setMaterialFlag(video::EMF_WIREFRAME, true); //видим каркас
Использовал addCameraSceneNodeFPS камеру, можно переопределить клавиши, единстенный минус обычную камеру можно направить смотреть в определенную точку, а эту вроде нет, сама смотрит в 0,0,0 координаты
SKeyMap keyMap[8]; keyMap[0].Action = EKA_MOVE_FORWARD; keyMap[0].KeyCode = KEY_UP; keyMap[1].Action = EKA_MOVE_BACKWARD; keyMap[1].KeyCode = KEY_DOWN; keyMap[2].Action = EKA_STRAFE_LEFT; keyMap[2].KeyCode = KEY_LEFT; keyMap[3].Action = EKA_STRAFE_RIGHT; keyMap[3].KeyCode = KEY_RIGHT; keyMap[4].Action = EKA_MOVE_FORWARD; keyMap[4].KeyCode = KEY_KEY_W; keyMap[5].Action = EKA_MOVE_BACKWARD; keyMap[5].KeyCode = KEY_KEY_S; keyMap[6].Action = EKA_STRAFE_LEFT; keyMap[6].KeyCode = KEY_KEY_A; keyMap[7].Action = EKA_STRAFE_RIGHT; keyMap[7].KeyCode = KEY_KEY_D; ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(0, 100, 0.4, -1, keyMap, 8); camera->setPosition(vector3df(2500)); //где создается
Пока не понятно с масштабом, карта высот 256 на 256 но при установке камеры в Х 2500 Y 2500 Z 2500 она где-то в центре карты
Штука mesh->setScale(core::vector3df(1, 1, 1)); увеличивает/уменьшает "карту"
Координаты на карте по идее располагаются так: (Z вверх)