|
3D-программирование Вопросы, касающиеся программирования 3D мира |
17.06.2009, 12:52
|
#1
|
Оператор ЭВМ
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений (для 0 пользователей)
|
Камера...
Очень прошу Вашеи помощи. Как мне сделать камеру от третьего лица... Приведу тупые примеры, но как в Gta, Hitman и тому подобные игры. И... Что бы она была "привязана" к спине персонажа... Офигенно бы было если бы камеру можно было крутить вокруг оси персонажа. Вот то что уже есть, если сможете, вставте код за меня, пожалуиста ^^:
Graphics3D 640,480
cam = CreateCamera()
PositionEntity cam, 0, 30, -20
RotateEntity cam, 30, 0, 0
l = CreateLight()
RotateEntity l, 0, 45, 45
ground = CreatePlane()
PositionEntity ground, 0, -8, 0
grass = LoadTexture("D:\psychodrama\1.jpg")
ScaleTexture grass, 50, 50
EntityTexture ground, grass
robot = LoadMesh("D:\psychodrama\Shadow.3ds")
ScaleEntity robot, 0.4, 0.4, 0.4
rx#=10
rz#=0
ang=90
Repeat
PositionEntity robot, rx#, -8, rz#
RotateEntity robot, 0, ang + 90, 0
PointEntity cam, robot
If KeyDown(200) Then
rx# = rx# + Cos(ang) * 0.5
rz# = rz# + Sin(ang) * 0.5
End If
If KeyDown(203) Then ang = ang + 5
If KeyDown(205) Then ang = ang - 5
If KeyDown(1) Then Exit
RenderWorld
Flip
Forever
|
(Offline)
|
|
17.06.2009, 13:04
|
#2
|
ПроЭктировщик
Регистрация: 13.02.2009
Сообщений: 134
Написано 21 полезных сообщений (для 22 пользователей)
|
Ответ: Камера...
Graphics3D 800,600,32,0
User=CreateSphere()
Pivot=CreatePivot(User)
PositionEntity pivot,0,5,-10
Camera=CreateCamera()
ground=CreateCube()
PositionEntity ground,0,-10,0
ScaleEntity ground,50,.1,50
EntityColor ground,0,128,64
While Not KeyDown(1)
curX#=EntityX(Camera, True)
curY#=EntityY(Camera, True)
curZ#=EntityZ(Camera, True)
destX#=EntityX(Pivot,True)
destY#=EntityY(Pivot,True)
destZ#=EntityZ(Pivot,True)
CamX#=((destX#-curX#)/10)
CamY#=((destY#-curY#)/10)
CamZ#=((destZ#-curZ#)/10)
TranslateEntity Camera,CamX,CamY,CamZ
PointEntity camera,User
RenderWorld
UpdateWorld
Flip False :Wend:End
Вставиш сам, Я не бумаю что тут кто то за тебя делать будет.
Насчет крутить камеру вокруг это просто
Крути pivot
|
(Offline)
|
|
17.06.2009, 13:10
|
#3
|
Оператор ЭВМ
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Камера...
о! и на этом огромное спасибо ) можешь про pivot пояснить ?
|
(Offline)
|
|
17.06.2009, 13:18
|
#4
|
Оператор ЭВМ
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Камера...
так... хм... я вставил модель, но камера показывается с лица персонажа. и никак не смог сделать движение, стоит на месте и всё...
Graphics3D 800,600,32,0
User=LoadMesh("D:\psychodrama\Shadow.3ds")
ScaleEntity user, 0.50, 0.50, 0.50
rx#=10
rz#=0
ang=90
Repeat
PositionEntity user, rx#, -8, rz#
RotateEntity user, 0, ang + 90, 0
If KeyDown(200) Then
rx# = rx# + Cos(ang) * 0.5
rz# = rz# + Sin(ang) * 0.5
End If
If KeyDown(203) Then ang = ang + 5
If KeyDown(205) Then ang = ang - 5
Pivot=CreatePivot(User)
PositionEntity pivot,0,5,-300
Camera=CreateCamera()
ground = CreatePlane()
PositionEntity ground, 0, -8, 0
grass = LoadTexture("D:\psychodrama\1.jpg")
ScaleTexture grass, 50, 50
EntityTexture ground, grass
While Not KeyDown(1)
curX#=EntityX(Camera, True)
curY#=EntityY(Camera, True)
curZ#=EntityZ(Camera, True)
destX#=EntityX(Pivot,True)
destY#=EntityY(Pivot,True)
destZ#=EntityZ(Pivot,True)
CamX#=((destX#-curX#)/10)
CamY#=((destY#-curY#)/10)
CamZ#=((destZ#-curZ#)/10)
TranslateEntity Camera,CamX,CamY,CamZ
PointEntity camera,User
RenderWorld
UpdateWorld
Flip False :Wend:End
Forever
|
(Offline)
|
|
17.06.2009, 13:24
|
#5
|
ПроЭктировщик
Регистрация: 13.02.2009
Сообщений: 134
Написано 21 полезных сообщений (для 22 пользователей)
|
Ответ: Камера...
Ты немного не с того начал
Pivot не видимая точка с которой ты можеш работать как с обьектом
Pivot=CreatePivot(User)
создаеш и привязываеш пивот к герою
PositionEntity pivot,0,5,-300
ставиш пивот неподалеку от геороя поскольку он привязан он всегда будет на этом растаянии
curX#=EntityX(Camera, True)
curY#=EntityY(Camera, True)
curZ#=EntityZ(Camera, True)
destX#=EntityX(Pivot,True)
destY#=EntityY(Pivot,True)
destZ#=EntityZ(Pivot,True)
CamX#=((destX#-curX#)/10)
CamY#=((destY#-curY#)/10)
CamZ#=((destZ#-curZ#)/10)
TranslateEntity Camera,CamX,CamY,CamZ
двигаеш камеру за пивотом
PointEntity camera,User
заставляеш камерувсегда смотреть на пивот
Стоит на место пото му что
If KeyDown(200) Then
должно находится в цикле
Repeat...... forever
или
While...... Wend
пивот стоит с лица героя поэтому и камера так смотрит
ps: ух как
Последний раз редактировалось Sleepybear, 17.06.2009 в 13:26.
Причина: подумав дописал
|
(Offline)
|
|
17.06.2009, 13:31
|
#6
|
Оператор ЭВМ
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Камера...
спасибо большое) вот только никак немогу вычислить чтобы со спины вид был, а у моделька полубоком к камере )
всё, задом поставил ))
|
(Offline)
|
|
17.06.2009, 13:36
|
#7
|
ПроЭктировщик
Регистрация: 13.02.2009
Сообщений: 134
Написано 21 полезных сообщений (для 22 пользователей)
|
Ответ: Камера...
Сообщение от ken park
спасибо большое) вот только никак немогу вычислить чтобы со спины вид был, а у моделька полубоком к камере )
|
поиграйся с параменрами пивота
тут --> positionentity pivot ,0,0,0
|
(Offline)
|
|
17.06.2009, 13:37
|
#8
|
Оператор ЭВМ
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Камера...
с этим и игрался ) так, буду дальше твое сообщение изучать )
|
(Offline)
|
|
17.06.2009, 13:40
|
#9
|
ПроЭктировщик
Регистрация: 13.02.2009
Сообщений: 134
Написано 21 полезных сообщений (для 22 пользователей)
|
Ответ: Камера...
help читай там больше инфы чем в моем сообщении
|
(Offline)
|
|
17.06.2009, 13:43
|
#10
|
Оператор ЭВМ
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Камера...
у меня в конце вот так получается, но не работает, потому что не понял как вставлять While, Wend.. и тд
ScaleEntity user, 0.50, 0.50, 0.50
rx#=10
rz#=0
ang=90
Repeat
PositionEntity user, rx#, -8, rz#
RotateEntity user, 0, ang + 90, 0
If KeyDown(200) Then
rx# = rx# + Cos(ang) * 0.5
rz# = rz# + Sin(ang) * 0.5
End If
If KeyDown(203) Then ang = ang + 5
If KeyDown(205) Then ang = ang - 5
RenderWorld
UpdateWorld
Flip False
End
Forever
|
(Offline)
|
|
17.06.2009, 13:54
|
#11
|
ПроЭктировщик
Регистрация: 13.02.2009
Сообщений: 134
Написано 21 полезных сообщений (для 22 пользователей)
|
Ответ: Камера...
Цикл REPEAT ... UNTIL позволяет Вам выполнять серию команд, пока определенное условие не будет соблюдено. Это позволяет проверять условие ПОСЛЕ каждого цикла, а не ДО, как в цикле WHILE ... WEND. В общем, используйте REPEAT ... UNTIL, если Вы уверены, что помещаете в цикл команды, которые должны быть использованы минимум 1 раз.
; Повторять до нажатия клавиши ESC
Repeat
print "Нажмите ESC для выхода!"
Until KeyHit(1)
Цикл WHILE/WEND используется, когда Вы хотите запустить серию команд несколько раз, опираясь на соблюдение или несоблюдение условия. Он работает подобно циклу REPEAT/UNTIL, за исключением проверки условия в начале цикла, вместо ее проверки в конце. Обычно Вы будете использовать WHILE/WEND, когда не будете уверенны, сколько раз Вам понадобится выполнение команд, находящихся в цикле, а кроме того, Вы вообще можете остановить цикл до запуска любых команд. Если Вам нужно запустить команды в цикле лишь однажды перед соблюдение условия, используйте REPEAT/UNTIL.
; While/Wend Пример
; Условие цикла находится на ВЕРШИНЕ цикла
While Not KeyHit(1) ; Так долго, пока юзер не нажмет ESC ...
Print "Нажмите Esc, что бы закончить этот бардак!" ; Вывести это на экран
Wend ; Вернуться к началу цикла WHILE
ЧИТАЙ HELP внимательно!!! до полного осмысления!
|
(Offline)
|
|
17.06.2009, 14:02
|
#12
|
Оператор ЭВМ
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Камера...
ну оочень прошу, проделаите с этим ^___^ :
ScaleEntity user, 0.50, 0.50, 0.50
rx#=10
rz#=0
ang=90
Repeat
PositionEntity user, rx#, -8, rz#
RotateEntity user, 0, ang + 90, 0
If KeyDown(200) Then
rx# = rx# + Cos(ang) * 0.5
rz# = rz# + Sin(ang) * 0.5
End If
If KeyDown(203) Then ang = ang + 5
If KeyDown(205) Then ang = ang - 5
|
(Offline)
|
|
17.06.2009, 14:04
|
#13
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Камера...
дай полный код - помогу
|
(Offline)
|
|
17.06.2009, 14:05
|
#14
|
Оператор ЭВМ
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Камера...
Graphics3D 800,600,32,1
User=LoadMesh("D:\psychodrama\Shadow.3ds")
ScaleEntity user, 0.50, 0.50, 0.50
rx#=10
rz#=0
ang=90
Repeat
PositionEntity user, rx#, -8, rz#
RotateEntity user, 0, ang + 90, 0
If KeyDown(200) Then
rx# = rx# + Cos(ang) * 0.5
rz# = rz# + Sin(ang) * 0.5
End If
If KeyDown(203) Then ang = ang + 5
If KeyDown(205) Then ang = ang - 5
RenderWorld
UpdateWorld
Pivot=CreatePivot(User)
PositionEntity pivot, 0, 170, 270
camera=CreateCamera()
ground = CreatePlane()
PositionEntity ground, 0, -8, 0
grass = LoadTexture("D:\psychodrama\1.jpg")
ScaleTexture grass, 50, 50
EntityTexture ground, grass
While Not KeyDown(1)
curX#=EntityX(Camera, True)
curY#=EntityY(Camera, True)
curZ#=EntityZ(Camera, True)
destX#=EntityX(Pivot,True)
destY#=EntityY(Pivot,True)
destZ#=EntityZ(Pivot,True)
CamX#=((destX#-curX#)/10)
CamY#=((destY#-curY#)/10)
CamZ#=((destZ#-curZ#)/10)
TranslateEntity Camera,CamX,CamY,CamZ
PointEntity camera,User
RenderWorld
UpdateWorld
Flip False :Wend:End
Forever
|
(Offline)
|
|
17.06.2009, 14:07
|
#15
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Камера...
ну и модель тоже ё-маё, без неё не работает
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Web камера |
Randomize |
Модули для BlitzMax |
0 |
25.09.2009 13:17 |
Камера |
Fatalix3d |
3D-программирование |
2 |
28.12.2008 15:17 |
Камера и Mesh |
JeSss |
3D-программирование |
15 |
29.01.2008 21:00 |
камера из 3дсмакс |
CRACK |
3D-программирование |
10 |
31.07.2007 18:24 |
Камера |
smaller |
3D-программирование |
14 |
05.04.2007 23:58 |
Часовой пояс GMT +4, время: 00:34.
|