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

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

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

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

Ответ
 
Опции темы
Старый 01.04.2009, 21:17   #1
Mark Castle
Знающий
 
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений
(для 3 пользователей)
Памагитяяяяяяяяяя...

Народ...
ExtractAnimSeq(a\entity,1,32 ) ; 1- idle
ExtractAnimSeq(a\entity,33,83 ) ; 2- look_around
ExtractAnimSeq(a\entity,84,117 ) ; 3- walk
ExtractAnimSeq(a\entity,118,134 ) ; 4- run
ExtractAnimSeq(a\entity,135,150 ) ; 5- arm
ExtractAnimSeq(a\entity,150,159 ) ; 6- shoot_forward
ExtractAnimSeq(a\entity,161,181 ) ; 7- disarm
ExtractAnimSeq(a\entity,182,197 ) ; 8- shoot_down
ExtractAnimSeq(a\entity,198,213 ) ; 9- shoot_up
ExtractAnimSeq(a\entity,214,239 ) ; 10- reload
ExtractAnimSeq(a\entity,240,270 ) ; 11- die1
ExtractAnimSeq(a\entity,271,311 ) ; 12- die2
ExtractAnimSeq(a\entity,312,325 ) ; 13- die3
Function update_bot()
	For w.bot = Each bot
MoveEntity w\entity,0,0,-0.01
If EntityCollided(w\entity,wall_type)
TurnEntity w\entity,0,Rnd(360),0
EndIf
If EntityDistance(w\entity,user)=5
Animate w\entity,1,0.3,st2,1
End If
Next
End Function
как сделать так,чтоб если враг(w\entity) меня заметил,то поворачивался в мою сторону фейсом,и анимировался
ExtractAnimSeq(a\entity,33,83 ) ; 2- look_around
ССЫЛКИ НА HELP НЕ ПРЕДЛАГАТЬ!уже все перечитал...
(Offline)
 
Ответить с цитированием
Старый 01.04.2009, 21:22   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Памагитяяяяяяяяяя...

что вы вкладываете в термин "заметил"?
1) ваше попадние на ось аппликат бота
2) 1+необохдимое расстояние
3) видимость в конусе камеры
4) 2+3
...
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 01.04.2009, 22:01   #3
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Памагитяяяяяяяяяя...

ССЫЛКИ НА HELP НЕ ПРЕДЛАГАТЬ!уже все перечитал...
Ок не предложу честное слово
Оптимально имхо в данном случае конус видимости бота + расстояние
Ссылки:

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

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

(Offline)
 
Ответить с цитированием
Старый 01.04.2009, 22:06   #4
Mark Castle
Знающий
 
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от impersonalis Посмотреть сообщение
что вы вкладываете в термин "заметил"?
1) ваше попадние на ось аппликат бота
2) 1+необохдимое расстояние
3) видимость в конусе камеры
4) 2+3
...
всмысле если я попадаю в зону видимости бота...ну чтоб Вы сделали?
(Offline)
 
Ответить с цитированием
Старый 01.04.2009, 23:11   #5
jimon
 
Сообщений: n/a
Ответ: Памагитяяяяяяяяяя...

ну чтоб Вы сделали?

поспал бы :/

Последний раз редактировалось jimon, 01.04.2009 в 23:24.
 
Ответить с цитированием
Старый 01.04.2009, 23:44   #6
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Ответ: Памагитяяяяяяяяяя...

у тебя нет ниодного конкретного вопроса... ну вот ябы сделал конус, припарентил-бы его к голове бота, сделалбы колизийй с игроком, если коллизится то типа заметил, потом включил-бы анимацию бега, заморозил-бы оси y и z сделалбы pointentity на игрока, начал-бы двигать по нормализованному вектору на себя... ну что помогло ?
(Offline)
 
Ответить с цитированием
Старый 02.04.2009, 09:55   #7
Venom
Оператор ЭВМ
 
Регистрация: 25.02.2008
Сообщений: 24
Написано 8 полезных сообщений
(для 30 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от NitE Посмотреть сообщение
ну вот ябы сделал конус, припарентил-бы его к голове бота, сделалбы колизийй с игроком, если коллизится то типа заметил
Зачем же извращатся так Как-то мне приходилось решать эту задачу. Математика выручила Надо найти скалярное произведение вектора между наблюдающим и наблюдаемым обьектов и вектора из матрицы трансформации наблюдаемого обьекта:
Local xang#, yang#
Local what%, from%, temp#, view#, dist#

Graphics3D(800, 600, 0, 2)
SetBuffer(BackBuffer())

;Наблюдаемый обьект
what = CreateSphere()
PositionEntity(what, 0.0, 0.0, 5.0)

;Наблюдающий обьект (для наглядности - камера)
from = CreateCamera()

;Угол обзора +\- 25 градусов
;косинус нужен т.к. сравниваем со скалярным произведением (фактически косинусом угла между векторами)
view = Cos(25) 

;Квадат дистанции "видимости" (сравнивать будет тоже с квадратом для оптимизации)
dist = 100 ;10 ^ 2

;Для наглядности установим такой же угол обзора у камеры
CameraZoom(from, 1.0 / Tan(25)) 

Repeat
    
    ;Управление камерой
    ;-------------------------------------
    xang = xang - MouseXSpeed() * 0.35
    yang = yang + MouseYSpeed() * 0.35
    MoveMouse(400, 300)
    xang = xang - Int(xang * 0.00277778) * 360.0
    If (xang < 0.0) Then
        xang = 360 + xang
    EndIf
    If (yang > +85.0) Then
        yang = +85.0
    EndIf
    If (yang < -85.0) Then
        yang = -85.0
    EndIf
    RotateEntity(from, yang, xang, 0.0)
    If (KeyDown(200)) Then
        MoveEntity(from, 0.0, 0.0, +0.5)
    EndIf
    If (KeyDown(208)) Then
        MoveEntity(from, 0.0, 0.0, -0.5)
    EndIf
    ;-------------------------------------
    
    RenderWorld()
    
    ;-------------------------------------
    ;Матрица трансформации
    ;  0  1  2
    ;0 xx xy xz \
    ;1 yx yy yz  - матрица трансформации (поворот + масштаб)
    ;2 zx zy zz /
    ;3 tx ty tz - вектор сдвига
    ;Вектор из from в what
    xsub = EntityX(what) - EntityX(from);GetMatElement(what, 3, 0) - GetMatElement(from, 3, 0)
    ysub = EntityY(what) - EntityY(from);GetMatElement(what, 3, 1) - GetMatElement(from, 3, 1)
    zsub = EntityZ(what) - EntityZ(from);GetMatElement(what, 3, 2) - GetMatElement(from, 3, 2)
    ;Квадрат длины вектора (квадрат дистанции между обьектами)
    temp = xsub * xsub + ysub * ysub + zsub * zsub
    ;Проверяем квадрат дистанции
    If (temp < dist) Then
        
        Text(10, 10, "Центр обьекта на расстоянии обзора")
        
        ;Обьект на расстоянии видимости, можно вычислять дальше
        ;квадратный корень и обратная величина(чтобы заменить деления умножениями)
        temp = 1.0 / Sqr(temp)
        ;Нормализация
        xsub = xsub * temp
        ysub = ysub * temp
        zsub = zsub * temp
        ;Скалярное произведение с последней строкой from матрицы трансформации
        temp = xsub * GetMatElement(from, 2, 0) + ysub * GetMatElement(from, 2, 1) + zsub * GetMatElement(from, 2, 2)
        ;Сравниваем углы и выводим сообщение
        If (temp > view) Then
        
            Text(10, 20, "Центр обьекта в поле зрения")
            
        EndIf
    EndIf
    ;-------------------------------------
    
    Flip()
Until (KeyDown(1))
End
лучше заюзать вариант на С, т.к. квадратный корень и деление не есть хорошо и можно заменить их быстрым float-magic трюком
extern long entity_in_view(float *from, float *what, float dist, float view) {
    float xsub, ysub, zsub, temp, half;
    long conv;
    xsub = what[16] - from[16];
    ysub = what[17] - from[17];
    zsub = what[18] - from[18];
    temp = xsub * xsub + ysub * ysub + zsub * zsub;
    if (dist < dist) {
        half = temp * 0.5F;
        conv = *(long*)&temp;
        conv = 0x5F3759DF - (conv >> 1);
        temp = *(float*)&conv;
        temp = temp * (1.5F - half * temp * temp);
        xsub *= temp;
        ysub *= temp;
        zsub *= temp;
        return ((xsub * from[28] + ysub * from[29] + zsub * from[30]) > view) ? 1 : 0;
    }
    return 0;
}
И на PureBasic, кому С не в радость
Structure FPTR
    f.f[0]
EndStructure

ProcedureDLL entity_in_view(*from.FPTR, *what.FPTR, dist.f, view.f)
    Static xsub.f, ysub.f, zsub.f, temp.f, half.f, conv, *int.LONG, *flt.FLOAT
    xsub = *what\f[16] - *from\f[16]
    ysub = *what\f[17] - *from\f[17]
    zsub = *what\f[18] - *from\f[18]
    temp = xsub * xsub + ysub * ysub + zsub * zsub
    If (temp < dist)
        half = temp * 0.5
        *int = @temp
        conv = *int\l
        conv = $5F3759DF - (conv >> 1)
        *flt = @conv
        temp = *flt\f
        temp * (1.5 - half * temp * temp)
        xsub * temp
        ysub * temp
        zsub * temp
        temp = xsub * *from\f[28] + ysub * *from\f[29] + zsub * *from\f[30]
        If (temp > view)
            ProcedureReturn 1
        EndIf
    EndIf
    ProcedureReturn 0
EndProcedure
правка: опечатка

Последний раз редактировалось Venom, 02.04.2009 в 17:01.
(Offline)
 
Ответить с цитированием
Старый 02.04.2009, 16:23   #8
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Памагитяяяяяяяяяя...

блин, извращенцы одни

yaw#=DeltaYaw(bot,player)

If abs(yaw)<ang
  включаем боту режим атаки. (естественно обрабатываем анимацию и тд)
EndIf
Где ang# - половина угла обзора бота. у человека обзор обычно равен 60 градусам

аффтар, рано тебе еще такие игры писать. ты спотыкаешся на самом начале лестницы, а впереди километровые скалы.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mark Castle (03.04.2009)
Старый 02.04.2009, 17:01   #9
Venom
Оператор ЭВМ
 
Регистрация: 25.02.2008
Сообщений: 24
Написано 8 полезных сообщений
(для 30 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от tormoz Посмотреть сообщение
блин, извращенцы одни

yaw#=DeltaYaw(bot,player)

If abs(yaw)<ang
  включаем боту режим атаки. (естественно обрабатываем анимацию и тд)
EndIf
Ага, а еще DeltaPitch и EntityDistance и получишь тоже самое, только медленее раз в *цать.
(Offline)
 
Ответить с цитированием
Старый 02.04.2009, 17:49   #10
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Памагитяяяяяяяяяя...

да не. не медленнее.
эти команды-же в рантаймах а не на скриптах. значит скорость будет такой-же. +\- 20%.
(Offline)
 
Ответить с цитированием
Старый 02.04.2009, 18:49   #11
Venom
Оператор ЭВМ
 
Регистрация: 25.02.2008
Сообщений: 24
Написано 8 полезных сообщений
(для 30 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от HolyDel Посмотреть сообщение
да не. не медленнее.
эти команды-же в рантаймах а не на скриптах. значит скорость будет такой-же. +\- 20%.
Какие еще скрипты?
Я конечно преувеличил насчет "*цать раз", в 2.25 раза быстрее, я не поленился и проверил (хотя и так понятно было что быстрее) все варианты:
Код на BlitzBasic:  200 мс.
Код на PureBasic:  78 мс.
Код на Pelles C (макс. опт.): 19 мс.
Код на VS9 (макс. опт.):  21 мс.
EntityDistance+DeltaYaw+DeltaPitch: 450 мс.
Замерял на P-IV 3000, 1000000 вызовов, как с RDTSC, так и с Millisecs()
ЗЫ
Такой прирост в данной задаче, имхо, существенен
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (02.04.2009)
Старый 02.04.2009, 19:12   #12
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от Venom Посмотреть сообщение
Какие еще скрипты?
Я конечно преувеличил насчет "*цать раз", в 2.25 раза быстрее, я не поленился и проверил (хотя и так понятно было что быстрее) все варианты:
Код на BlitzBasic:  200 мс.
Код на PureBasic:  78 мс.
Код на Pelles C (макс. опт.): 19 мс.
Код на VS9 (макс. опт.):  21 мс.
EntityDistance+DeltaYaw+DeltaPitch: 450 мс.
Замерял на P-IV 3000, 1000000 вызовов, как с RDTSC, так и с Millisecs()
ЗЫ
Такой прирост в данной задаче, имхо, существенен
Ну точно извращенцы

Для особенно тугих математиков: разводить геммор с кучей вычислений есть смысл на действительно медленных функциях, а не на тех, которые выполняются 1 млн за 400 мс.

Нет АБСОЛЮТНО никакого смысла во всех ваших "ускорениях" на 300-400 строк с мозголомными формулами в реальном проекте.
__________________
(Offline)
 
Ответить с цитированием
Старый 02.04.2009, 19:25   #13
Venom
Оператор ЭВМ
 
Регистрация: 25.02.2008
Сообщений: 24
Написано 8 полезных сообщений
(для 30 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от tormoz Посмотреть сообщение
Ну точно извращенцы

Для особенно тугих математиков: разводить геммор с кучей вычислений есть смысл на действительно медленных функциях, а не на тех, которые выполняются 1 млн за 400 мс.

Нет АБСОЛЮТНО никакого смысла во всех ваших "ускорениях" на 300-400 строк с мозголомными формулами в реальном проекте.
Ну и где же ты там увидел мозголомные формулы, тугой "дэвелопер" ты наш? В школе учился? Математику, геометрию проходил? Формулы и код элементарны. Лично у меня по математике выше тройки никогда и не было, но мне это как видишь не помешало
Тем более что это часть ИИ как я понял, а его оптимизировать не помешает (иначе что еще то? )
Гонору то сколько, вроде далеко не маленький уже, должен соображать что к чему
(Offline)
 
Ответить с цитированием
Старый 02.04.2009, 20:03   #14
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Памагитяяяяяяяяяя...

Товарищ, я по математике не блистал познаниями, да и прогером формально никогда не был, но уже начало вашего кода уныло чуть боее чем полностью.
Откуда эти константы (в плане - хрен ли так оформлено, а не - откуда взяты значения)? Где переменные? Почему код настолько конкретен (простая смена разрешения рушит всё к чертям)?
Вызов функции Text сжирает производительность многократно.
Уважайте чужой труд - ссылка на Carmack’s Unusual Inverse Square Root (game/code/q_math.c) не помешает
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 02.04.2009, 20:25   #15
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Памагитяяяяяяяяяя...

интересно. не покажешь функцию на блице?
похоже я переоценил скорость EntityDistance, DeltaYaw и DeltaPitch и они сделаны криво уже в рантаймах.
Вызов функции Text сжирает производительность многократно.
об этом можно много спорить, но 24x это очень круто. все таки эта функция не один раз за кадр будет вызываться.

в вартиче например обработка юнитов (а там было довольно много всяких EntityDistance и DeltaYaw-ов) занимала 5-6 мс за кадр. если бы удалось снизить до 1-2 значит в сцене (не в кадре) могло быть на 20-50% больше юнитов. плохо чтоли?

Последний раз редактировалось HolyDel, 02.04.2009 в 20:32.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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