Alexander-94 / calm_down_game

Researching the c++ irrlicht 3d engine
2 stars 0 forks source link

terrain and camera research #4

Open Alexander-94 opened 5 years ago

Alexander-94 commented 5 years ago

У меня почему-то не накладываются текстура 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); //видим каркас

image

image

Использовал 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 вверх) image

Alexander-94 commented 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 иначе черная отрисовка

image

Флагом можно просматривать каркас mesh->setMaterialFlag(video::EMF_WIREFRAME, true); image

bvs23bkv33 commented 5 years ago

этот меш не будет анимированным я думаю, что карту надо буде генерить нa других принципах и немного по-другому алгоритму

Alexander-94 commented 5 years ago

Я тоже думаю по другому, но как надо подумать

bvs23bkv33 commented 5 years ago

2019-02-26 23-13-25

bvs23bkv33 commented 5 years ago

теперь можно делать воду и горы

bvs23bkv33 commented 5 years ago

вроде бы на SDL должно работать, там управление попроще http://www.cplusplus.com/forum/general/167637/