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

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

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

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

Ответ
 
Опции темы
Старый 27.02.2010, 23:59   #1
Coks
Знающий
 
Регистрация: 29.05.2007
Сообщений: 227
Написано 126 полезных сообщений
(для 312 пользователей)
райпик в физиксе

Здрасте! Кто знает, подскажите пожалуйста, как строить луч пика (враппер под блиц) по направлению камеры. Буду признателен. По моим домыслам это неосуществимо.
(Offline)
 
Ответить с цитированием
Старый 28.02.2010, 00:13   #2
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: райпик в физиксе

;Разрешение 
       ScreenWidth = 800 
       ScreenHeight = 600 
       ;Центр экрана 
       CenterX = ScreenWidth Shr 1 
       CenterY = ScreenHeight Shr 1 
       ;Инициализация графики 
       Graphics3D(ScreenWidth, ScreenHeight, 32, 2) 
       SetBuffer(BackBuffer()) 
       ;Камера 
       Camera = CreateCamera() 
       ;Принудительная установка угла фокуса камеры необходима чтобы проекция 
       ;была корректной т.к. узнать его с помощью средств Блица невозможно 
       FOV = 85 
       Zoom# = 1.0 / Tan(FOV / 2) 
       CameraZoom(Camera, Zoom) 
       ;Проекцируемый объект 
       Cube = CreateCube() 
       ;Удаление объекта от камеры 
       Mz = 10 
       Repeat 
       ;Вращаем и двигаем камеру чтобы убедиться в корректности проекции 
       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)) 
           RenderWorld() 
           Flip() 
       Until KeyDown(1) 
       End
вот так переводишь 2д координаты в 3д, ставишь в это положение какой-нить пивот, затем находишь углы поворота этого пивота относительно камеры и поворачиваешь луч, вроде должно работать
(Offline)
 
Ответить с цитированием
Эти 9 пользователя(ей) сказали Спасибо H@NON за это полезное сообщение:
Android (28.02.2010), ARA (28.02.2010), BlackOut (28.02.2010), Coks (28.02.2010), Harter (01.03.2010), Mr_F_ (28.02.2010), Nex (28.02.2010), Randomize (28.02.2010), Reizel (28.02.2010)
Старый 28.02.2010, 09:56   #3
Coks
Знающий
 
Регистрация: 29.05.2007
Сообщений: 227
Написано 126 полезных сообщений
(для 312 пользователей)
Ответ: райпик в физиксе

С физиксом не прокатит. Луч можно позиционировать и задать направление (pxRaySetDir), вектором. Вот не пойму как это сделать, чтоб луч поворачивал в нужную сторону.
(Offline)
 
Ответить с цитированием
Старый 28.02.2010, 10:10   #4
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: райпик в физиксе

Блин, H@non, ты что творишь!
насколько я помню, лучу надо подставить вектора направления по всем осям, а значит:
TFormVector 0,0,1,Camera,0
aX#=TFormedX#()
aY#=TFormedY#()
aZ#=TFormedZ#()

вот тебе и вектора направления
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Coks (28.02.2010)
Старый 28.02.2010, 12:09   #5
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: райпик в физиксе

это подойдет если тебе нужно луч центровать ровно по центру экрана, а я показал случай когда нужно луч выстрелить в координаты мыши. Как только разместил пивот в переведенных из 2д в 3д координаты также через TformVector получаем вектор направления взгляда луча, и подставляешь значения для поворота луча. Потом накатаю пример, если уж сами не можете додумать код, может прояснит ситуацию.
(Offline)
 
Ответить с цитированием
Старый 28.02.2010, 13:56   #6
Coks
Знающий
 
Регистрация: 29.05.2007
Сообщений: 227
Написано 126 полезных сообщений
(для 312 пользователей)
Ответ: райпик в физиксе

Павел, спасибо! Это то мне и надо было. Плохо, что сам не додумался
(Offline)
 
Ответить с цитированием
Старый 28.02.2010, 16:00   #7
Alex.D.
Оператор ЭВМ
 
Регистрация: 02.11.2008
Сообщений: 27
Написано 12 полезных сообщений
(для 24 пользователей)
Ответ: райпик в физиксе

Сообщение от H@NON Посмотреть сообщение
Как только разместил пивот в переведенных из 2д в 3д координаты также через TformVector получаем вектор направления взгляда луча, и подставляешь значения для поворота луча.
Да ты ж упоротый, в приведенном коде найти вектор - отнять полученые 3д координаты от координат камеры. Нахрен там пивоты с TformVector'ами )))
(Offline)
 
Ответить с цитированием
Старый 28.02.2010, 16:03   #8
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: райпик в физиксе

да это без разницы)) лишь бы работало)
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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