|
3D-программирование Вопросы, касающиеся программирования 3D мира |
28.12.2010, 01:23
|
#16
|
Кодер "win" ЭВМ
Регистрация: 10.11.2009
Адрес: ЖуковSKY
Сообщений: 194
Написано 77 полезных сообщений (для 155 пользователей)
|
Ответ: Камера от MMORPG
__________________
Жизнь игра, задумка дурацкая но графика ...
|
(Offline)
|
|
28.12.2010, 10:45
|
#17
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ответ: Камера от MMORPG
Хм... чтож вы меня не спросили, я как раз такую систему сделал в своей игре %) Если кому-то еще надо, набросал простенький пример
Graphics3D 1024,768,32,1
SeedRnd(MilliSecs())
;объявление необходимых переменных
Global mxs#,mys#,dest_xang#,dest_yang#,xang#,yang#,differ_yaw#,target_rot#
Global camera_target=CreatePivot()
Global dist_target=CreatePivot(camera_target)
Global move_navigator=CreatePivot(camera_target)
Global move_directional=CreatePivot()
;создание камеры
Global camera=CreateCamera()
CameraZoom camera,1.4
;создание сцены
Global light=CreateLight()
RotateEntity light,30,30,0
plane=CreatePlane()
EntityColor plane,100,150,255
EntityPickMode plane,2
For c=1 To 10
cube=CreateCube()
EntityColor cube,150,255,150
ScaleEntity cube,2,20,2
PositionEntity cube,Rand(-50,50),20,Rand(-50,50)
EntityPickMode cube,2
Next
;создание модели игрока
player=CreateCube()
EntityAlpha player,0.5
PositionEntity player,0,1,0
EntityColor player,255,0,0
While Not KeyHit(1)
MouseLook(player)
UpdateWorld()
RenderWorld()
Flip
Wend
End
;<<сама функция>>
;height - параметр указывает высоту над центром модели, куда "привязать" камеру. например если надо чтобы прицел был над головой игрока
;speed - скорость передвижения игрока
;rotate - скорость поворота модели игрока в сторону движения. желательно оставить 10
Function MouseLook(target,height=5,speed#=0.5,rotate#=10)
;ВНИМАНИЕ!!! нижеследующие 3 параметра можно менять, если хотите подредактировать "колизию" камеры с уровнем. но я не рекомендую их трогать - долго подбирал значения =)
;collision_radius - радиус луча, по которому проверяется наличие препятсвий между моделью игрока и камерой (команда LinePick)
;collision_distance - параметр смещает камеру (чем меньше значение, тем ближе будет приближаться камера) ближе к модели игрока в случае, если LinePick=true.
; помогает от "проваливания" камеры в стены
;camera_distance - расстояние от модели игрока до камеры в случае если LinePick=false
collision_radius#=0.5
collision_distance#=5
camera_distance=30
If target<>0 Then
PositionEntity move_navigator,0,0,0
If KeyDown(17) Then PositionEntity move_navigator,EntityX(move_navigator),0,0.1
If KeyDown(31) Then PositionEntity move_navigator,EntityX(move_navigator),0,-0.1
If KeyDown(30) Then PositionEntity move_navigator,-0.1,0,EntityZ(move_navigator)
If KeyDown(32) Then PositionEntity move_navigator,0.1,0,EntityZ(move_navigator)
PositionEntity move_directional,EntityX(target),EntityY(target)+height,EntityZ(target)
If EntityX(move_navigator)<>0 Or EntityZ(move_navigator)<>0 Then
PointEntity move_directional,move_navigator
If Abs(differ_yaw)<90 Then MoveEntity target,0,0,speed ;число 90 определяет угол между направлением движения и направлением модели, при котором модель начинает движение
EndIf
mxs=MouseX()-GraphicsWidth()/2
mys=MouseY()-GraphicsHeight()/2
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
mxs=mxs/5.5
mys=mys/5.5
If mxs>30 Then mxs=30
If mxs<-30 Then mxs=-30
If mys>30 Then mys=30
If mys<-30 Then mys=-30
dest_xang=dest_xang-mxs
dest_yang=dest_yang+mys
If dest_yang<-85 Then dest_yang=-85
If dest_yang>85 Then dest_yang=85
yang=(yang+(dest_yang-yang)/4)
xang=(xang+(dest_xang-xang)/4)
PositionEntity camera_target,EntityX(target),EntityY(target)+height,EntityZ(target)
RotateEntity camera_target,0,xang,0
PositionEntity dist_target,0,Sin(yang)*camera_distance,-Cos(yang)*camera_distance
vis_line_x#=EntityX(camera_target,1)
vis_line_y#=EntityY(camera_target,1)
vis_line_z#=EntityZ(camera_target,1)
vis_line_dx#=EntityX(dist_target,1)-EntityX(camera_target,1)
vis_line_dy#=EntityY(dist_target,1)-EntityY(camera_target,1)
vis_line_dz#=EntityZ(dist_target,1)-EntityZ(camera_target,1)
If LinePick(vis_line_x,vis_line_y,vis_line_z,vis_line_dx,vis_line_dy,vis_line_dz,collision_radius) Then
PositionEntity camera,PickedX#()-(PickedX#()-EntityX#(camera_target,1))/collision_distance,PickedY#()-(PickedY#()-EntityY#(camera_target,1))/collision_distance,PickedZ#()-(PickedZ#()-EntityZ#(camera_target,1))/collision_distance
Else
; PositionEntity camera,EntityX#(dist_target,1)-(EntityX#(dist_target,1)-EntityX#(camera_target,1))/collision_distance,EntityY#(dist_target,1)-(EntityY#(dist_target,1)-EntityY#(camera_target,1))/collision_distance,EntityZ#(dist_target,1)-(EntityZ#(dist_target,1)-EntityZ#(camera_target,1))/collision_distance
PositionEntity camera,EntityX#(dist_target,1),EntityY#(dist_target,1),EntityZ#(dist_target,1)
EndIf
PointEntity camera,camera_target
differ_yaw=EntityYaw(target)-EntityYaw(move_directional)
If differ_yaw>179.9999 Then differ_yaw=differ_yaw-359.9999
If differ_yaw<-179.9999 Then differ_yaw=359.9999+differ_yaw
If EntityX(move_navigator)<>0 Or EntityZ(move_navigator)<>0 Then
If differ_yaw>rotate Then
target_rot=target_rot-rotate
ElseIf differ_yaw<-rotate Then
target_rot=target_rot+rotate
ElseIf differ_yaw<rotate*3 And differ_yaw>-rotate*3 Then
target_rot=EntityYaw(move_directional,1)
EndIf
EndIf
RotateEntity target,0,target_rot,0
EndIf
End Function
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Amatsu за это полезное сообщение:
|
|
29.12.2010, 06:31
|
#18
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Камера от MMORPG
Неха маленький код на камеру
|
(Offline)
|
|
29.12.2010, 09:45
|
#19
|
Дэвелопер
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений (для 2,706 пользователей)
|
Ответ: Камера от MMORPG
Сообщение от Костян
Неха маленький код на камеру
|
Можешь оптимизировать
|
(Offline)
|
|
29.12.2010, 23:25
|
#20
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Камера от MMORPG
Сообщение от Костян
Неха маленький код на камеру
|
Ты не видел исходников, по например реализации работы string'ов. Или ещё чего "попроще", так строк сотни бывают, а выглядит, как простая "чтучка".
|
(Offline)
|
|
30.12.2010, 05:44
|
#21
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Камера от MMORPG
Ты не видел исходников, по например реализации работы string'ов. Или ещё чего "попроще", так строк сотни бывают, а выглядит, как простая "чтучка".
|
А в чём их прикол.(string'ов. )
|
(Offline)
|
|
31.12.2010, 03:01
|
#22
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Камера от MMORPG
Сообщение от Костян
А в чём их прикол.(string'ов. )
|
Ну я и говорю, "Ты не видел исходников".
Сперва, что такое string (технически), и как он реализован на уровне памяти и переменных. А затем функции, по работе с ними, всякие там поиски в string'е, обрезания, сравнивания, конвертация одного типа данных, в string, и многое другое. Там немалый лес, и много работы с битами.
Эм, зачем это я рассказываю..
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
31.12.2010, 05:32
|
#23
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Камера от MMORPG
Ну я и говорю, "Ты не видел исходников".
Сперва, что такое string (технически), и как он реализован на уровне памяти и переменных. А затем функции, по работе с ними, всякие там поиски в string'е, обрезания, сравнивания, конвертация одного типа данных, в string, и многое другое. Там немалый лес, и много работы с битами.
|
Так эта же машинный код.Оно всё автоматом делаеться.
|
(Offline)
|
|
31.12.2010, 05:40
|
#24
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: Камера от MMORPG
Сообщение от Костян
Так эта же машинный код.Оно всё автоматом делаеться.
|
O_o не не не. Не автоматом! Это в Blitz3D это уже за тебя реализовано.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
31.12.2010, 06:18
|
#25
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Камера от MMORPG
O_o не не не. Не автоматом! Это в Blitz3D это уже за тебя реализовано.
Когда успел написать. Тыж Offline
|
(Offline)
|
|
31.12.2010, 21:14
|
#26
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Камера от MMORPG
Сообщение от Костян
Так эта же машинный код.Оно всё автоматом делаеться.
|
Дети тоже "автоматом" рождаются.
И вообще компьютер никто не делал, всё автоматом сделалось, и думает автоматом.
Запомни. Всё что ты видишь в мониторе, ничего не сделано "автоматом", а то что работает на уровне железа, сделано умненькими инженерами, которые тоже не "пишут пару строк".
Вообще у тебя никакого, даже базового понятия о том как компьютер и его компоненты работают и взаимодействуют? Даже в школе это преподают, несмотря на то какой там убогий предмет информатики.
Костян, сразу на заметку, чтобы быть начитанным и немного образованным в чём-то. Используй фантазию, но только не для утверждений, а для поиска информации. Вообрази, что-то, но понимай что это что-то лишь тобою вооброжаемо. И пока ты найдёшь конкретного подтверждения своим "догадкам", не бросайся ими, как "утверждениями". Они останутся твоими "догадками", не более. Здесь "удача" не работает.
Вот тебе, на вооружение:
google.com - самый важный инструмент, я лично его открываю как каждый 5 сайт. А на работе, это вообще для меня каждая вторая закладка - это гуугл.
Для образования и теоретической части, достаточно удобна ru.wikipedia.org, там есть куча всего. Можешь почитать что значит большинство терминов, на любую тему, которые ты встречаешь.
Если есть стремление к знаниям, то используй инструменты, для получения этих знаний.
Короче говоря, увидел слово string, не поленись, вбей в гугле: "string wikipedia", далее, выбери строку: String (computer science), sequence of symbols or digits in computer programming
И затем слева, переключись на русский, затем если будешь внимательным, дойдёшь до " Реализация в языках программирования", и будет что-то более ясным.
Учись пока молод! Дерзай!
Но бл..ть! НЕ ТУПИ. Детский сад...
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:15.
|