![]() |
Для RTS: как определить3D-координаты поверхности под 2D-курсором?
Вложений: 1
В общем, нужно определить 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 |
Ответ: Для RTS: как определить3D-координаты поверхности под 2D-курсором?
e = CameraPick(cam,MouseX(),MouseY())
tx# =pickedx() tz# = pickedz() |
Ответ: Для RTS: как определить3D-координаты поверхности под 2D-курсором?
Цитата:
Да и что-то мне кажется, что этот код, который я заимствовал, наверное, не подходит для RTS. Надо-то чтобы в точке, где находится курсор, появлялся объект (дом, например), да так, чтобы по Y он точно "садился" на ландшафт. может, где-то уже лежат готовые примеры, но я про RTS находил только выделение резиновой рамкой, а оно мне не нужно. |
Ответ: Для 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 если есть вопросы - спрашивай, это очень добрый форум, наверняка теюе помогут )) |
Ответ: Для RTS: как определить3D-координаты поверхности под 2D-курсором?
Благодарю! Понял. А то я команды типа pickedz() первый раз увидел, справку почитал - сообразил. Теперь могу 90% кода выкинуть.
|
Часовой пояс GMT +4, время: 06:20. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot