Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 10.07.2008, 00:04   #1
Maxim1441
Нуждающийся
 
Регистрация: 09.07.2008
Сообщений: 57
Написано 11 полезных сообщений
(для 26 пользователей)
Для RTS: как определить3D-координаты поверхности под 2D-курсором?

В общем, нужно определить 3D координаты поверхности под курсором мыши. Я использовал чужой код (правда, не знаю чей), но он действует только если не менять угол наклона камеры по оси X. А в RTS это не канает. В примере я добавил код, чтобы при нажатии ЛКМ под курсором появлялся Cone. Если не менять угол камеры, то все нормально, а если менять - то хана, не совпадает. Да еще же надо, чтобы объект вставал ровно, а не менял ориентацию по иску всед за камерой. Наверное, в код надо вносить поправку на угол наклона камеры. Может, кто знает, как этого добится? Заранее благодарю.


ScreenWidth = 1024
ScreenHeight = 768


CenterX = ScreenWidth Shr 1
CenterY = ScreenHeight Shr 1


Graphics3D(ScreenWidth, ScreenHeight, 32, 2)
SetBuffer(BackBuffer())


Camera = CreateCamera()


Zoom# = 1.2
CameraZoom(Camera, Zoom)


Cube = CreateCube()


Mz = 20


z=LoadMesh ("1.b3d")


PositionEntity Camera,0,20,0
d=CreateLight ()
AmbientLight 255,255,255
CameraRange Camera,1,4000


Repeat


If KeyDown (17) Then TranslateEntity Camera,0,0,3
If KeyDown (31) Then TranslateEntity Camera,0,0,-3
If KeyDown (30) Then TranslateEntity Camera,-3,0,0
If KeyDown (32) Then TranslateEntity Camera,3,0,0
If KeyDown (209) Then TurnEntity Camera,1,0,0
If KeyDown (201) Then TurnEntity Camera,-1,0,0




;TurnEntity(Camera, 0.5, 1.2, -2.1)
;MoveEntity(Camera, 1.5, 0.05, 0.4)
Mx = MouseX()
My = MouseY()
Mz = Mz + MouseZSpeed()
Px# = (Mx - CenterX) * Mz / Zoom / CenterX
Py# = (My - CenterY) * Mz / -Zoom / CenterX

Wx# = GetMatElement(Camera, 0, 0) * Px + GetMatElement(Camera, 1, 0) * Py + GetMatElement(Camera, 2, 0) * Mz + GetMatElement(Camera, 3, 0)
Wy# = GetMatElement(Camera, 0, 1) * Px + GetMatElement(Camera, 1, 1) * Py + GetMatElement(Camera, 2, 1) * Mz + GetMatElement(Camera, 3, 1)
Wz# = GetMatElement(Camera, 0, 2) * Px + GetMatElement(Camera, 1, 2) * Py + GetMatElement(Camera, 2, 2) * Mz + GetMatElement(Camera, 3, 2)

PositionEntity(Cube, Wx, Wy, Wz)

RotateEntity(Cube, EntityPitch(Camera), EntityYaw(Camera), EntityRoll(Camera))
;############################################

If MouseHit (1) Then ttt=CreateCone(): PositionEntity ttt, Wx, 0, Wz: RotateEntity(ttt, EntityPitch(Camera), EntityYaw(Camera), EntityRoll(Camera))



RenderWorld()
Flip()
Until KeyDown(1)
End
Вложения
Тип файла: zip RTS.zip (306.7 Кб, 410 просмотров)

Последний раз редактировалось Maxim1441, 10.07.2008 в 00:10. Причина: Забыл исходник вставить :-(
(Offline)
 
Ответить с цитированием
Старый 10.07.2008, 00:34   #2
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Для RTS: как определить3D-координаты поверхности под 2D-курсором?

e = CameraPick(cam,MouseX(),MouseY())
tx# =pickedx()
tz# = pickedz()
(Offline)
 
Ответить с цитированием
Старый 10.07.2008, 15:53   #3
Maxim1441
Нуждающийся
 
Регистрация: 09.07.2008
Сообщений: 57
Написано 11 полезных сообщений
(для 26 пользователей)
Ответ: Для RTS: как определить3D-координаты поверхности под 2D-курсором?

Сообщение от HolyDel Посмотреть сообщение
e = CameraPick(cam,MouseX(),MouseY())
tx# =pickedx()
tz# = pickedz()
Э... Спасибо, конечно, но куда это вставлять и как применять, я не понял.

Да и что-то мне кажется, что этот код, который я заимствовал, наверное, не подходит для RTS. Надо-то чтобы в точке, где находится курсор, появлялся объект (дом, например), да так, чтобы по Y он точно "садился" на ландшафт. может, где-то уже лежат готовые примеры, но я про RTS находил только выделение резиновой рамкой, а оно мне не нужно.

Последний раз редактировалось Maxim1441, 10.07.2008 в 16:33.
(Offline)
 
Ответить с цитированием
Старый 10.07.2008, 16:43   #4
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Для RTS: как определить3D-координаты поверхности под 2D-курсором?

уууу...

получить выоту террайна в данной точке - TerrainY(map,x,0,z)
вставлять это никуда не надо )) надо понять. суть методы в следующем:
на твой террайн ставится тип пика 2. т.е. по геометрии определяетя точка, в которую смотрит луч из камеры в точку MouseX(),MouseY() viewport-а. Пикаем ( "CameraPick(cam,MouseX(),MouseY())" ), получаем позицию етого самого пика ("tx# =pickedx()","tz# = pickedz()") далее делаем с этими координатами что хотим.

товарищ! смотри здесь скрины стратегии на блице: http://likosoft.ru/e107_plugins/medi...y/browse.php?3
если есть вопросы - спрашивай, это очень добрый форум, наверняка теюе помогут ))
(Offline)
 
Ответить с цитированием
Старый 10.07.2008, 16:58   #5
Maxim1441
Нуждающийся
 
Регистрация: 09.07.2008
Сообщений: 57
Написано 11 полезных сообщений
(для 26 пользователей)
Ответ: Для RTS: как определить3D-координаты поверхности под 2D-курсором?

Благодарю! Понял. А то я команды типа pickedz() первый раз увидел, справку почитал - сообразил. Теперь могу 90% кода выкинуть.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с курсором Bagration Blitz3D 8 15.01.2008 05:17
Двигать объект двухмерным курсором Valet 3D-программирование 21 07.11.2007 08:35
Положение относительно поверхности? WaReZ_MEN 3D-программирование 1 26.03.2007 12:12
Координаты Fant 3D-программирование 7 08.02.2007 21:36
Объект на неровной поверхности. moka 3D-программирование 2 07.08.2006 00:03


Часовой пояс GMT +4, время: 12:27.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com