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

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

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

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

Ответ
 
Опции темы
Старый 25.03.2009, 20:11   #1
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Smooth turn entity

Надо поворачивать ентити плавно.Это вообще не трудно конечно Я сделал простым применением функции CurveValue(). Но тут видимо что-то посложнее надо Дело в том что когда ентити поврачивается на заданный объект(пивот) за несколько проходов, то мы сможем наблюдать то, как ентити вовсе не всегда "выбирает" кротчайшее направление поворота! В жизни никто так не поступает, если не специально Поэтому такое поведение к примеру монстра будет выглядеть крайне неестественно
К примеру, бот развернут на 10 градусов > поступает команда развернутся к 355 градусам. И бот вместо выитания 15 градусов, начинает разворачиваться на 345 градусов в положительном направлении.

ЗЫ:::Кстати в блитце градусная система представлет из себе полуинтервал [-180; 180) - зачееем??? Неужели удобно так? Почему не сделать так как на уроках геометрии [0; 360) ???

Так короче, вы могли бы всё это не читать кроме "ЗЫ", вот код - там всё есть
Graphics3D 1280, 1024, 32, 1

cam=CreateCamera()
CameraClsColor cam, 0, 100,255
MoveEntity cam,0,0,-50
lit=CreateLight()


cube=CreateCube() : ScaleMesh cube, 10, 10 ,10

pivot=CreatePivot()
PositionEntity pivot, Rand(-500, 500), 0, Rand(-500, 500)



Repeat
	
	
	If EntityDistance(cube, pivot)< 20 Then PositionEntity pivot, Rand(-500, 500), 0, Rand(-500, 500)
	
	
	oldangx#=EntityPitch(cube)
	oldangy#=EntityYaw(cube)
	oldangz#=EntityRoll(cube)
	
	PointEntity cube, pivot
	MoveEntity cube, 0, 0, 0.6
	
	
	angx#=EntityPitch(cube)
	angy#=EntityYaw(cube)
	angz#=EntityRoll(cube)
	
	
	angx#=CurveValue(angx, oldangx, 0.02)
	angy#=CurveValue(angy, oldangy, 0.02)
	angz#=CurveValue(angz, oldangz, 0.02)
	
	RotateEntity cube, angx, angy, angz
	
	
	
	
	If KeyDown(200)=1 Then MoveEntity cam, 0,0,0.5
	If KeyDown(208)=1 Then MoveEntity cam, 0,0,-0.5
	
	RotateEntity cam, EntityPitch(cam)+MouseYSpeed()*0.2, EntityYaw(cam)-MouseXSpeed()*0.2 ,0
	
	MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
	
	
	
	
	UpdateWorld
    RenderWorld
	
    Flip 60
	
Until KeyHit(1)
End



Function CurveValue#(v#,old#,f#)
	Return old#+((v#-old#)*f#)
End Function
Ну чисто я так утрировал в том плане что вооброжаемый монстр повёртывается только по игрек-оси. На самом деле по всем бы надо просто хуже будет видно.
Чтобы хорошо наблюдать за кубом рекомендую наблюдать сверху, летите наверх - и опускайте камеру вниз.

Ну я думаю, что проблема такая распространённая, что наверняка кто-нибудь её решал. Пожалуйста поредактируйте код.

Всем спасибо
(Offline)
 
Ответить с цитированием
Старый 25.03.2009, 20:12   #2
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Smooth turn entity

см. DeltaYaw, DeltaPitch
(Offline)
 
Ответить с цитированием
Старый 25.03.2009, 20:51   #3
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Smooth turn entity

DeltaYaw'ом определяй разность углов и если она больше 180° то поворачивай в противоположную сторону.
ЗЫ:::Кстати в блитце градусная система представлет из себе полуинтервал [-180; 180) - зачееем??? Неужели удобно так? Почему не сделать так как на уроках геометрии [0; 360) ???
Меня это тоже бесило... Особенно когда делал перемещение персонажа на PhysX'е - та ещё жесть... Зачем? Марку Сибли виднее
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 25.03.2009, 20:55   #4
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Smooth turn entity

мне кажется [-180; 180) удобнее чем [0; 360)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Hulk-DS (27.03.2009)
Старый 25.03.2009, 21:25   #5
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Smooth turn entity

Всё рано не понятно... Разность углов между чем и чем...не получается у меня ничего((
Можно всё таки кодом...пожаалуйста!!..

Последний раз редактировалось ELIAS, 25.03.2009 в 21:31.
(Offline)
 
Ответить с цитированием
Старый 25.03.2009, 22:01   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Smooth turn entity

function smoothturn(ent1,ent2,speed# = 1)
s# = DeltaYaw(ent1,ent2)
turnentity ent1,0,speed * sign(s),0
endfunction
как то так
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (26.03.2009)
Старый 25.03.2009, 22:16   #7
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Smooth turn entity

Сообщение от HolyDel Посмотреть сообщение
мне кажется [-180; 180) удобнее чем [0; 360)
Нуу... Но когда где-то оно не совпадает с другим, то это кащмар!
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 25.03.2009, 22:30   #8
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Smooth turn entity

function smoothturn(ent1,ent2,speed# = 1)
s# = DeltaYaw(ent1,ent2)
turnentity ent1,0,speed * sign(s),0
endfunctionкак то так
че такое sign ?????
(Offline)
 
Ответить с цитированием
Старый 25.03.2009, 22:34   #9
jimon
 
Сообщений: n/a
Ответ: Smooth turn entity

ELIAS
прочитай справку
 
Ответить с цитированием
Старый 25.03.2009, 22:44   #10
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Smooth turn entity

sign от 0 == 0
sign от >0 == 1
sign от <0 == -1
(Offline)
 
Ответить с цитированием
Старый 25.03.2009, 23:27   #11
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Smooth turn entity

Sgn, может?
Не мешайте сяху с бейсиком!
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (26.03.2009)
Старый 25.03.2009, 23:28   #12
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Smooth turn entity

ну... тогда я неправ - тогда sgn. он бы ее еще sn назвал. или вообще - s.
(Offline)
 
Ответить с цитированием
Старый 25.03.2009, 23:32   #13
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Smooth turn entity

В классическом бейсике именно sgn, так что Марк тут оказался совершено прав
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (26.03.2009)
Старый 26.03.2009, 14:51   #14
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Smooth turn entity

Спасибо, HolyDel, АВТОМАТ !
(Offline)
 
Ответить с цитированием
Старый 27.03.2009, 01:14   #15
Hellfalcon
Нуждающийся
 
Регистрация: 13.01.2007
Сообщений: 88
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: Smooth turn entity

еще можно так
Function EntityPoint(Entity,Point)
;========================================
;b - коректирующий угол .
AngleEntityUp_Target#=pointAtxy(Entity,Point)+b
AngleEntityUp#=EntityYaw(Entity)
;============================================
;перевод углов в нормальные ~0-359
If AngleEntityUp_Target<0 Then AngleEntityUp_Target=(180-Abs(AngleEntityUp_Target))+180
If AngleEntityUp<0 Then AngleEntityUp=(180-Abs(AngleEntityUp))+180
;================================================= ======
;условия для поворота в кратчайшую сторону
If (((Abs(AngleEntityUp-AngleEntityUp_Target))<=180) And (AngleEntityUp<AngleEntityUp_Target)) Or (((Abs(AngleEntityUp-AngleEntityUp_Target))>180) And (AngleEntityUp>AngleEntityUp_Target)) Then

AngleRotate=1
Else
AngleRotate=-1
End If

RotateEntity Entity,EntityPitch(Entity,1),EntityYaw(Entity)+Ang leRotate,EntityRoll(Entity,1),1
end function

Function pointAtxy#(p1,p2)
;==============================
;!!!!!!!!!
dx#=EntityX(p1,1)-EntityX(p2,1)
dy#=EntityZ(p1,1)-EntityZ(p2,1)
;!!!!!!!!
Return ATan2#(dy,dx)

End Function
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ELIAS (27.03.2009)
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Entity does not exit's Skinsaver 3D-программирование 7 31.08.2009 18:37
engines benchmark. entity cost. HolyDel Болтовня 22 15.03.2009 14:58
Про кости в скопированном Entity Alex_Noc 3D-программирование 3 21.08.2008 01:48
Как получить цвет entity? Alex_Noc 3D-программирование 10 26.06.2008 09:51
Entity... mudriy 3D-программирование 2 13.05.2007 01:14


Часовой пояс GMT +4, время: 07:30.


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