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

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

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

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

Ответ
 
Опции темы
Старый 17.06.2009, 12:52   #1
ken park
Оператор ЭВМ
 
Аватар для ken park
 
Регистрация: 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
Sleepybear
ПроЭктировщик
 
Аватар для Sleepybear
 
Регистрация: 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
ken park
Оператор ЭВМ
 
Аватар для ken park
 
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Камера...

о! и на этом огромное спасибо ) можешь про pivot пояснить ?
(Offline)
 
Ответить с цитированием
Старый 17.06.2009, 13:18   #4
ken park
Оператор ЭВМ
 
Аватар для ken park
 
Регистрация: 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
Sleepybear
ПроЭктировщик
 
Аватар для Sleepybear
 
Регистрация: 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
ken park
Оператор ЭВМ
 
Аватар для ken park
 
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Камера...

спасибо большое) вот только никак немогу вычислить чтобы со спины вид был, а у моделька полубоком к камере )
всё, задом поставил ))
(Offline)
 
Ответить с цитированием
Старый 17.06.2009, 13:36   #7
Sleepybear
ПроЭктировщик
 
Аватар для Sleepybear
 
Регистрация: 13.02.2009
Сообщений: 134
Написано 21 полезных сообщений
(для 22 пользователей)
Ответ: Камера...

Сообщение от ken park Посмотреть сообщение
спасибо большое) вот только никак немогу вычислить чтобы со спины вид был, а у моделька полубоком к камере )
поиграйся с параменрами пивота
тут --> positionentity pivot ,0,0,0
(Offline)
 
Ответить с цитированием
Старый 17.06.2009, 13:37   #8
ken park
Оператор ЭВМ
 
Аватар для ken park
 
Регистрация: 17.06.2009
Сообщений: 34
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Камера...

с этим и игрался ) так, буду дальше твое сообщение изучать )
(Offline)
 
Ответить с цитированием
Старый 17.06.2009, 13:40   #9
Sleepybear
ПроЭктировщик
 
Аватар для Sleepybear
 
Регистрация: 13.02.2009
Сообщений: 134
Написано 21 полезных сообщений
(для 22 пользователей)
Ответ: Камера...

help читай там больше инфы чем в моем сообщении
(Offline)
 
Ответить с цитированием
Старый 17.06.2009, 13:43   #10
ken park
Оператор ЭВМ
 
Аватар для ken park
 
Регистрация: 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
Sleepybear
ПроЭктировщик
 
Аватар для Sleepybear
 
Регистрация: 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
ken park
Оператор ЭВМ
 
Аватар для ken park
 
Регистрация: 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
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Камера...

дай полный код - помогу
(Offline)
 
Ответить с цитированием
Старый 17.06.2009, 14:05   #14
ken park
Оператор ЭВМ
 
Аватар для ken park
 
Регистрация: 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
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Камера...

ну и модель тоже ё-маё, без неё не работает
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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, время: 13:47.


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