|
3D-программирование Вопросы, касающиеся программирования 3D мира |
09.08.2007, 20:18
|
#76
|
ПроЭктировщик
Регистрация: 25.07.2007
Сообщений: 151
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Анимация (и еще пару вопросов)
MoKa, я тут по форуму прогулялся... 30% твоих постов ваща не понял. Так что не грузи .))
|
(Offline)
|
|
09.08.2007, 20:24
|
#77
|
ПроЭктировщик
Регистрация: 25.07.2007
Сообщений: 151
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Анимация (и еще пару вопросов)
У меня тут вопросик возник... даже наверно вопросище!.) Начал делать ботов... ну ботами их тяжело назвать, но все же. Это камикадзе. Они летят прямяком в тебя.. думал как такое реализовать... пока нашел одну подходящую функцию (DeltaYaw). С помошью нее направляю ботов на себя, и задаю им скорость... НО! если поварачиваю себя, начинаются какието странные телодвижения... Вот для наглядности малость модифицированый пример из хелпа:
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
camera=CreateCamera()
; Make camera orthagraphic for flat, 2D view
CameraProjMode camera,2
; Position and rotate camera so we have overhead (top-down) view
PositionEntity camera,0,5,0
RotateEntity camera,90,0,0
; Create red cone (the arrow)
arrow=CreateCone()
RotateMesh arrow,90,180,0
ScaleMesh arrow,.1,.1,.2
EntityColor arrow,255,0,0
; Create blue sphere (the spot)
spot=CreateCone()
RotateMesh spot,90,180,0
ScaleMesh spot,.1,.1,.1
EntityColor spot,0,0,255
While Not KeyDown(1)
; If w,a,s,d pressed then move spot
If KeyDown(31) Then MoveEntity spot,0,0,0.01 ; w - up
If KeyDown(30) Then TurnEntity spot,0,2,0 ; a - left
If KeyDown(17) Then MoveEntity spot,0,0,-0.01 ; s - down
If KeyDown(32) Then TurnEntity spot,0,-2,0 ; d - right
; Rotate arrow using delta yaw value. Arrow will point at spot.
RotateEntity arrow,0,-DeltaYaw#(spot,arrow),0
RenderWorld
Text 0,0,"Note: Camera view is overhead. The arrow will y-rotate using DeltaYaw value."
Text 0,20,"Use w,a,s,d to move spot."
Text 0,40,"Delta yaw: "+DeltaYaw#(spot,arrow)
Flip
Wend
End
|
(Offline)
|
|
09.08.2007, 20:56
|
#78
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Анимация (и еще пару вопросов)
MoKa, я тут по форуму прогулялся... 30% твоих постов ваща не понял. Так что не грузи .))
|
Так лучше?
Type TFile
Field FileName$
Field File
Field LLevel%
End Type
Function aLoadTexture(File$,Flag%=1)
For f.TFile=Each TFile
If f\FileName=File
f\LLevel=True
Return f\File
EndIf
Next
f.TFile=New TFile
f\FileName=File
f\File=LoadTexture(File,Flag)
f\LLevel=True
Return f\File
End Function
For f.TFile=Each TFile
If f\LLevel=False
Select EntityClass(f\File)
Case "Texture"
FreeTexture f\File
Case "Mesh"
FreeEntity f\File
End Select
Delete f
EndIf
Next
Насчёт DeltaYaw, хз, но она мне не нравиться, поэтому я написал маленькую функцию которая складывает 2 угла процентно:
Function MergeAngles#(Angle1#,Angle2#,Morph#=.5)
If Abs(Angle1-Angle2)>180
If Angle1<Angle2
Return Angle1-((360-Angle2)+Angle1)*(.5-(Morph-.5))
Else
Return Angle2-((360-Angle1)+Angle2)*(.5+(Morph-.5))
EndIf
Else
Return Angle1*(Morph)+Angle2*(1.0-Morph)
EndIf
End Function
Можешь её заюзать, и никаких проблемм не будет, и плавный поворот будет.
|
(Offline)
|
|
09.08.2007, 21:33
|
#79
|
ПроЭктировщик
Регистрация: 25.07.2007
Сообщений: 151
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Анимация (и еще пару вопросов)
MoKa, ого. огромное спасибо, разъяснил Токо это надо половину кода переписывать... наверно пока оставлю все как есть.. заюзаю в следующем .))
А вот здесь (парень тыкает пальцем в монитор) хотелось бы дополнительных разъяснений... как сама функция играет я впринципе понял. А вот как ей воспользоваться . У меня все функции либо для создания чегонибудь, либо просто для сорачивания награмождений... а здесь что-то совсем другое дело... если я не ошибаюсь через нее должны проходить углы, на которые повернут управляемый объект? но как тогда узнать эти углы? и как вообще эту функцию применить?
|
(Offline)
|
|
09.08.2007, 21:45
|
#80
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Анимация (и еще пару вопросов)
Эта функция смешивает 2 угла, которые нужно ввести, на процентно, .5 - порону, если больше тогда второй угол будет больше задуйствован если меньше то первый.
Воспользоватья так:
Создай один пивот в загрузке, и заглобаль его. И затем перед тем как поворачивать делай так:
PositionEntity GPivot,EntityX(Player,1),EntityY(Player,1),EntityZ(Player,1)
PointEntity GPivot,Target
RotateEntity Player,0,MergeAngles(EntityYaw(Player),EntityYaw(GPivot),.1)
От сюда: GPivot это тот созданный пивот, Player - то что повернуть, Target На то что повернуть. Последний параметр, если делать меньше, будет Ещё плавнее, Если делать Больше, тогда будет быстрее поворачивать.
|
(Offline)
|
|
09.08.2007, 22:51
|
#81
|
ПроЭктировщик
Регистрация: 25.07.2007
Сообщений: 151
Написано 0 полезных сообщений (для 0 пользователей)
|
MoKa, огромное спасибо. все работает .)) только мы поварачиваем не Player а target... и там еще 0 забыл
что такое? ниче у меня не получается . почему нельзя проверить дистанцию между кучей объектов одного списка с кучей объектов другого списка? Во всяком случае нельзя моим способом.
Я сначало обращаюсь к одному списку, внутри него обращаюсь к другому, а внутри этого безобразия проверяю ЕнтитиДистанс. Он ругается, что Ентити Даз Нот Экзист:
For k.kami=Each kami
For w.walls=Each walls
If EntityDistance (k\modeli,w\model)<4 Then
FreeEntity k\modeli
EndIf
Next
Next
Почему нельзя так делать? Я что какие-то правила нарушаю?
ЗЫ: а почему на сайте календарь начинается с Воскресения?
|
(Offline)
|
|
10.08.2007, 02:12
|
#82
|
|
Re: Анимация (и еще пару вопросов)
Maestro
обычно первый день недели в других странах ето воскресенье
(точно знаю что в англии, поетому по идее в европе и сша тоже)
Maestro
у тебя в таком случае будет потом проверка с пустой моделью что собсно вызывает ошибку ...
|
|
|
10.08.2007, 11:32
|
#83
|
ПроЭктировщик
Регистрация: 25.07.2007
Сообщений: 151
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Анимация (и еще пару вопросов)
jimon, точно, как же я раньше не заметил. Спасибо.
|
(Offline)
|
|
10.08.2007, 17:19
|
#84
|
ПроЭктировщик
Регистрация: 25.07.2007
Сообщений: 151
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Анимация (и еще пару вопросов)
Эммм... а как тогда мжно удалить? Я пытался сделать ХайдЕнтити, но это всеравно что задать альфу: предмет просто становится прозрачным, но продолжает взаимодействовать... может можно как-то отыскать все захайденые объекты и удалить их?
Или как-то присвоить индефикатор моделям, которые столкнулись, а потом найти их по этому индификатору?
|
(Offline)
|
|
10.08.2007, 17:23
|
#85
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Анимация (и еще пару вопросов)
Хм, вроде HideEntity отключает у него коллизию. Тогда делай просто так:
EntityType k\modeli,-1
HideEntity k\modeli
Ты просто поменяешь индекс коллизии, на тот который не коллизиться ни с чем, а потом при необходимости обратно меняй на нужный и всё
|
(Offline)
|
|
10.08.2007, 17:35
|
#86
|
ПроЭктировщик
Регистрация: 25.07.2007
Сообщений: 151
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Анимация (и еще пару вопросов)
MoKa, все бы ничего, только у меня не коллизия... вот на всякий случай код: (кубики все изчезают, а звуки переодически звенят)
SetBuffer BackBuffer()
Type kami
Field modeli
End Type
Type walls
Field model
End Type
Global k.kami,w.walls
boomSound=LoadSound("select.mp3")
cam=CreateCamera()
PositionEntity cam,0,60,0
TurnEntity cam,90,0,0
lit=CreateLight()
TurnEntity lit,70,70,0
pivot=CreatePivot()
createkami(10,50)
Createwalls(10,pivot,50)
Repeat
TurnEntity pivot,0,.5,0
For k.kami=Each kami
For w.walls=Each walls
If EntityDistance (k\modeli,w\model)<4 Then
HideEntity k\modeli
PlaySound boomSound
; FreeEntity k\modeli
EndIf
Next
Next
For k.kami=Each kami
If KeyDown(31) Then MoveEntity k\modeli,0,0,.5
If KeyDown(30) Then TurnEntity k\modeli,0,3,0
If KeyDown(17) Then MoveEntity k\modeli,0,0,-.5
If KeyDown(32) Then TurnEntity k\modeli,0,-3,0
Next
UpdateWorld()
RenderWorld()
Flip
Until KeyHit(1)
Function CreateKami(kol,razbros)
For i=1 To kol
k.kami=New kami
k\modeli=CreateCube()
PositionEntity k\modeli,Rnd(-razbros,razbros),2,Rnd(-razbros,razbros)
EntityColor k\modeli,0,200,200
ScaleEntity k\modeli,2,1,2
EntityRadius k\modeli,2.5
Next
End Function
Function CreateWalls(tn,pivot$,razbros)
For i=1 To tn
w.walls=New walls
w\model=CreateCube(pivot$)
PositionEntity w\model,Rnd(-razbros,razbros),2,Rnd(-razbros,razbros)
ScaleEntity w\model,2,1,2
EntityColor w\model,200,200,0
EntityParent w\model,pivot$
Next
End Function
а вот то же самое в архиве (со звуком)
|
(Offline)
|
|
10.08.2007, 17:40
|
#87
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Анимация (и еще пару вопросов)
Тогда всё просто:
- Добавь в класс kami "Field Hiden"
- Когда прячешь объект, помечай ему k\Hiden=True
- Далее, если k\Hiden=False тогда проверять на расстояние.
|
(Offline)
|
|
10.08.2007, 17:56
|
#88
|
ПроЭктировщик
Регистрация: 25.07.2007
Сообщений: 151
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Анимация (и еще пару вопросов)
хм. надо же. работает .)) Ну теперь только взрывы сделать осталось.. и будет демка
|
(Offline)
|
|
13.08.2007, 02:13
|
#89
|
ПроЭктировщик
Регистрация: 25.07.2007
Сообщений: 151
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: Анимация (и еще пару вопросов)
никак не могу сделать нармальные взрывы. Одно дело для одной модели... и совсем другое для списка... вобщем вот примерчик. помогите пожалуйста, если не кодом, то хотябы едеей.
|
(Offline)
|
|
13.08.2007, 12:36
|
#90
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Анимация (и еще пару вопросов)
Взрывы, делаю партиклами двух видов:
1. Потухающие.
2. Движущиеся.
1 - Обновляю таким образом, чтобы создать эффект затухания, а при маленькой жизни и большом размере, эффект вспышки.
2 - Это то что отлетает, обычно обыкновенные спарки, и чуток побольше, но слабее отлитают это огненные клубочки. А так-же этот же класс использую для клубов дыма.
Создай Классы, для каждого создай функцию Создания партикла, и функцию Обновления, где будет перебор всех и обновление каждого, а так-же по истечению жизни удаление.
Так же но это уже после, создай Эмитеры, это простой класс с пивотом и параметрами, которые наследуются партиклами. Это будет Источник, который можно будет привязывать к объектам и он будет выделять партиклы.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:14.
|