Показать сообщение отдельно
Старый 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)