![]() |
|
||||||||||
|
|||||
|
[+1 09.03.11]
Регистрация: Mar 2010
Сообщений: 128
|
Делаю игру с видом с верху, она полностью двухмерная.
Хочу сделать 3d домики, пробовал просто на 2d картинку наложить 3d и естественно работает не так как надо, домики смещаются из за перспективы во время движения камер(2d и 3d), 2d часть поместить на 3d плоскость не подходить. Подскажите пожалуйста. Как сделать так чтоб домики не смещались? |
|
|||||
|
Регистрация: Dec 2006
Сообщений: 1,764
|
но ты ж делаешь игру, смотри, отлаживай по коду где криво стало, и исправляй
|
|
|||||
|
Lorem ipsum
|
Только скрин поможет разобраться.
Вообще, если у тебя 3d камера смотрит не вертикально вниз, то точного совмещения 2d пола и 3d объектов ты не добьешься. Единственный выход — изометрия. Если же 3d камера смотрит вертикально вниз, то кинь свою 2d картинку на пол в 3d и подбери такой FOV, чтобы картинки совпали (твоя 2d и копия в 3d). При таком положении смещения обеих камер должны быть синхронизированы; т.е. сдвинуть картинку на 12px влево будет все равно, что 3d камеру на 12px вправо — точное совпадение. P.S. Я когда работал с 3d — никогда не делал камере FOV. У меня линии в плоскости с координатой z=0 всегда 1:1 соответствовали просто линиям на 2d экране. Драматические перспективы достигаются нещадным уменьшением дистанции от наблюдателя до экрана. Этого хватало... всегда 0о
__________________
Поймай яблоко 2! |
|
|||||
|
[+1 09.03.11]
Регистрация: Mar 2010
Сообщений: 128
|
инициализирую камеру
var box:Box = new Box(); box.setMaterialToAllFaces(new FillMaterial(0x090909)); c.addChild(camera); //c:ConflictContainer c.addChild(box); box.x=400; box.y=-300; camera.view=new View(800,600); camera.z=1500; camera.rotationX=Math.PI;//поворачиваю камеру вниз, вертикально //Вьюпорт заАдЧилден в root //x,y координаты 2d плоскости if(Hero.X<=Config.mapSizeX-800/2&&Hero.X>=800/2) { x-=int(Hero.X+x-800/2); camera.x=Hero.X; } if(Hero.Y<=Config.mapSizeY-600/2&&Hero.Y>=600/2) { y-=int(Hero.Y+y-600/2); camera.y=Hero.Y*-1; } с 3d первый раз работаю. |
|
|||||
|
Lorem ipsum
|
я ничего не понял, но может это как-то так должно быть?
//x,y координаты 2d плоскости if (Hero.X <= Config.mapSizeX - 800/2 && Hero.X >= 800/2) { x = int(Hero.X - 800/2); camera.x = Hero.X; } if (Hero.Y <= Config.mapSizeY - 600/2 && Hero.Y >= 600/2) { y = int(Hero.Y - 600/2); camera.y= -Hero.Y; } никогда не работал с альтернативой =)
__________________
Поймай яблоко 2! |
|
|||||
|
[+1 09.03.11]
Регистрация: Mar 2010
Сообщений: 128
|
Zebestov
с 2Дкамерой у меня все верно, подобрал методом тыка высоту 3Дкамеры 500, стало нормально, но смущает магическое число. Спасибо что помогаете. Добавлено через 40 минут Нашел окончательное решение высота камеры должна быть равна фокусному расстоянию. |
|
|||||
|
Lorem ipsum
|
точно. забыл привести это соображение в первом ответе.
__________________
Поймай яблоко 2! |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|