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

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

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

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

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

Товарисч Веном, извольте выложить ваши тесты.
Я выражаю сомнение в их адекватности (хотя отдаю должное вашему математическому гению) )))))
__________________
(Offline)
 
Ответить с цитированием
Старый 02.04.2009, 22:28   #17
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Памагитяяяяяяяяяя...

кстати да, тесты фстудию!
(Offline)
 
Ответить с цитированием
Старый 03.04.2009, 10:00   #18
Venom
Оператор ЭВМ
 
Регистрация: 25.02.2008
Сообщений: 24
Написано 8 полезных сообщений
(для 30 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от impersonalis Посмотреть сообщение
Товарищ, я по математике не блистал познаниями, да и прогером формально никогда не был, но уже начало вашего кода уныло чуть боее чем полностью.
И чем же оно "уныло"? Цитаты приведи с пояснениями или только ля-ля-тополя?
Сообщение от impersonalis Посмотреть сообщение
Откуда эти константы (в плане - хрен ли так оформлено, а не - откуда взяты значения)? Где переменные?
В упор не вижу констант, где ты их там нашел? Или ты иеешь ввиду угол и дальность обзора? Так я их для примера взял. Непонимаю.
Сообщение от impersonalis Посмотреть сообщение
Почему код настолько конкретен (простая смена разрешения рушит всё к чертям)?
Что она рушит? Прямо сейчас сменил разрешение - все работает как работало. Тоже непонимаю
Сообщение от impersonalis Посмотреть сообщение
Вызов функции Text сжирает производительность многократно.
Помоему это даже любому нубу понятно что функции Text использованы не более чем для наглядности, для проверки работает или нет.
Сообщение от impersonalis Посмотреть сообщение
Уважайте чужой труд - ссылка на Carmack’s Unusual Inverse Square Root (game/code/q_math.c) не помешает
Ну если этот быстрый обратный корень Кармак придумал - честь и хвала ему, я не знал, припомнить откуда я этот трюк вычитал я уже не смогу, давно это было.

ЗЫ
Хотите тесты? Их есть у меня!
;kernel32.decls:
;
;.lib "kernel32.dll"
;Sleep(time%)
;QueryPerformanceCounter(count*)
;QueryPerformanceFrequency(frequency*)

;Для расчета времени из 64-битных значений RDTSC:
;Код на PureBasic:
;ProcedureDLL.f Time(*cnt1.QUAD, *cnt2.QUAD, *freq.QUAD)
;    ProcedureReturn (*cnt2\q - *cnt1\q) * 1000.0 / *freq\q
;EndProcedure

;Оригинал
Function entity_in_view1%(from%, what%, dist#, view#)
    If (EntityDistance(from, what) < dist) Then
        If ((Abs(DeltaYaw(from, what)) < view) And (Abs(DeltaPitch(from, what)) < view)) Then
            Return 1
        EndIf
    EndIf
    Return 0
End Function

;Аналог
Function entity_in_view2%(from%, what%, dist#, view#)
    Local xsub#, ysub#, zsub#, temp#
    xsub = EntityX(what) - EntityX(from)
    ysub = EntityY(what) - EntityY(from)
    zsub = EntityZ(what) - EntityZ(from)
    temp = xsub * xsub + ysub * ysub + zsub * zsub
    If (temp < dist) Then
        temp = 1.0 / Sqr(temp)
        xsub = xsub * temp
        ysub = ysub * temp
        zsub = zsub * temp
        temp = xsub * GetMatElement(from, 2, 0) + ysub * GetMatElement(from, 2, 1) + zsub * GetMatElement(from, 2, 2)
        If (temp > view) Then
            Return 1
        EndIf
    EndIf
    Return 0
End Function

Const CDIST# = 10.0 ;Расстояние обзора
Const CVIEW# = 25.0 ;Угол обзора (+\-)

Local from%, what%, dist#, view#
Local cnt1%, cnt2%, freq%, pass%, res1#, res2#

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

;Два обьекта
from = CreateCube()
what = CreateCube()

;Отодвигаем немного
PositionEntity(from, 0.0, 0.0, +3.0)
PositionEntity(what, 0.0, 0.0, -3.0)

;Банки для RDTSC
cnt1 = CreateBank(8)
cnt2 = CreateBank(8)
freq = CreateBank(8)

;Оригинал -------------------------------------------------
dist = CDIST
view = CVIEW

Sleep(25)
QueryPerformanceCounter(cnt1)
For pass = 1 To 1000000
    entity_in_view1(from, what, dist, view)
Next
QueryPerformanceCounter(cnt2)
QueryPerformanceFrequency(freq)
res1 = Time(cnt1, cnt2, freq)
;--------------------------------------------------------

;Аналог -------------------------------------------------
dist = CDIST * CDIST
view = Cos(CVIEW)

Sleep(25)
QueryPerformanceCounter(cnt1)
For pass = 1 To 1000000
    entity_in_view2(from, what, dist, view)
Next
QueryPerformanceCounter(cnt2)
QueryPerformanceFrequency(freq)
res2 = Time(cnt1, cnt2, freq)
;--------------------------------------------------------

RuntimeError("Оригинал: " + Str(res1) + Chr(13) + "Аналог: " + Str(res2))
End
К сожалению RDTSC юзают 64-битные переменные, потому пришлось написать вспомогательную DLL для расчета, исходник на PureBasic в начале приведен, там же и нужный decls.

Ну или качайте аттач с dll и деклсами, у кого PureBasic нету или кому просто лень
Вложения
Тип файла: zip Time.zip (1.3 Кб, 307 просмотров)

Последний раз редактировалось Venom, 03.04.2009 в 10:08.
(Offline)
 
Ответить с цитированием
Старый 03.04.2009, 12:20   #19
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Памагитяяяяяяяяяя...

Graphics3D(300, 400, 0, 2)
а так? окно появится в центре - мышка же упорно позиционируется за пределами окна. В фуллскирне вроде как будет работать, но при этом курсор "очень удобно" весит где-то в углу (причём в зависимости от разрешения) - проджектед по нему не взять, и ещё кучка бонусов, вызванная несимметричностью позиционирования.
Константы:
25
100
10
25
0.35
400
300
0.00277778
+85.0 (плюс! 85 целых ноль(!) десятых)
-85.0
200,208 (ладно - спишем, что это типа пример. хотя тогда непонятно, почему в других местах педантичность зашкаливает за пределы разумного)
+0.5 (опять)
-0.5
Про TEXT понтно нубам? Нет! Для кого вообще написан семпл. Код представляет собой стилистический оксюморон, который, как правило, выдаёт в авторе компилятора (в литератнуом плане) чужих работ, неспособного создать монолит кода.
Вам непонятно чем код уныл? Обзор в предыдущем посте, ещё подробнее - в настоящем.
Абстракция кода убита напрочь мощными выпадами конкретики: это и бесконечные константы (каждый раз когда я вижу все эти циферки, начинаю думать, что автору некорректно преподавли в школе - ибо концепция т.н. ленивых вычислений нервно курит; разобраться затем что и откуда и и можно ли это сократит с тем - будет чертовски сложно, это как при решении задачи сразу вместо именованных констант их значения подставить - ох веслуха. Это типа goto-стайл, единственное оправдание которому тут: http://forum.boolean.name/showthread.php?t=8035), это и ничем неоправданная избыточность:
If (yang > +85.0) Then
yang = +85.0
EndIf
If (yang < -85.0) Then
yang = -85.0
EndIf
у вас что - бот будет иметь несимметричны портал обзора (т.е. разный обзор левого
правого глаза, раз мы говорим про вращение вокруг ординаты)? это есть в ТЗ или описании? Может лучше всё же:
If (Abs(yang)>yaw_max)
yang=Sgn(yang)*yaw_max
EndIf
И тут же - хренак! Корень видите ли тормозит! Ну дак возьми сколько тебе нужно членов степенного ряда и не мучайся со сборкой и вставкой в проект ДЛЛ (ох полегчало)..
И т.д. и т.п. по-моему я и так потратил на доказательство вам того, что вы принципиально не будете воспринимать достаточно своего времени.
С уважением, Философствующее Говно можете не обижаться, мой пост - реакция на ваши немеренные амбиции (т.е. я мог бы пройти мимо, но не после поста 13)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?

Последний раз редактировалось impersonalis, 03.04.2009 в 12:25.
(Offline)
 
Ответить с цитированием
Старый 03.04.2009, 12:51   #20
Android
Бывалый
 
Регистрация: 29.03.2007
Сообщений: 662
Написано 199 полезных сообщений
(для 448 пользователей)
Ответ: Памагитяяяяяяяяяя...

Во молодежь пошла, не импера, не тормоза не уважают =\
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (03.04.2009)
Старый 03.04.2009, 13:10   #21
Mark Castle
Знающий
 
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: Памагитяяяяяяяяяя...

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

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

Сообщение от impersonalis Посмотреть сообщение
Graphics3D(300, 400, 0, 2)
а так? окно появится в центре - мышка же упорно позиционируется за пределами окна.
Издеваешься? Тямы вынести разрешение в константы и использовать в MoveMouse не хватает?
Const SCREEN_W = 300
Const SCREEN_H = 400
Const CENTER_X = SCREEN_W / 2
Const CENTER_Y = SCREEN_H / 2
...
Graphics3D(SCREEN_W, SCREEN_H, 0, 2)
...
MoveMouse(CENTER_X, CENTER_Y)
По поводу непонятных тебе циферок - читай что я раньше написал, все что надо было я прокомментировал, остальное данной задачи не касается.

Сообщение от impersonalis Посмотреть сообщение
у вас что - бот будет иметь несимметричны портал обзора (т.е. разный обзор левого
правого глаза, раз мы говорим про вращение вокруг ординаты)?
Почему не симметричный, вверх обзор 85 градусов, вниз обзор 85.
В представлении -180...+180 это будет -85...+85 градусов.

ЗЫ
Вроде как под обсуждением находится алгоритм и его код,
а не код примера набросаный на скорую руку только чтобы показать что он работает.
Поэтому твои придирки считаю неадекватными как и тебя самого, более обьясняться не намерен,
кому надо тот поймет что к чему и использует код по назначению, а кому язык почесать - идите лесом.
(Offline)
 
Ответить с цитированием
Старый 03.04.2009, 13:48   #24
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Памагитяяяяяяяяяя...

кому надо тот поймёт и без твоего кода разберётся),а с твоим:
ладно сдаюсь...хелпы фстудию!...
Const SCREEN_W = 300
Const SCREEN_H = 400
Const CENTER_X = SCREEN_W / 2
Const CENTER_Y = SCREEN_H / 2
я и говорю - тут не пример на скору руку,а банальное незнание ряда базовых функций. Спорить, о том что константы зло, и про причудливого программиста, который зачем-то в примерах пишет криво, потому что это пример,а не серьёзный проект - бессмысленно - это статистика.

Почему не симметричный, вверх обзор 85 градусов, вниз обзор 85.
Потому и не имеет смысла описывать эти границы отдельно - см. мой код, хотя ты реально не читаешь что я пишу, а лишь оправдываешься.
Вроде как под обсуждением находится алгоритм и его код,
а не код примера набросаный на скорую руку только чтобы показать что он работает.
именно! но у тебя с одной стороны черновик с другой педантичность - не понятно как его рассмаривать, то-ли копипастить как оталженный и провернный, толи с нуля переписывать. Что тебе Тормоз и сказал - у тебя классический случай "пришивание польто к пуговице","за дереьвями леса не видно".
а кому язык почесать - идите лесом.
ну так и почитай свои посты)
Поэтому твои придирки считаю неадекватными как и тебя самого,
как знаешь)
думаю, код мы обсудили в достаточной степени, а личности - обсуждать бессмысленно
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Arles (03.02.2010), tormoz (03.04.2009)
Старый 03.04.2009, 14:13   #25
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от Android Посмотреть сообщение
Во молодежь пошла, не импера, не тормоза не уважают =\

да не - я недолюбливаю систему авторитетов (кроме той, что собирается на базе статистики). Не хочу, чтоб форум стал повторением инцидента на ИзвестномФоруме.
Однако непуганные пользователи - ещё не знают, что такое придирки, но придираются сами.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
newman (03.04.2009)
Старый 03.04.2009, 16:19   #26
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Памагитяяяяяяяяяя...

Собстно нормально оформленных тестов не увидел

создай бб-ешник с 2 функциями - проверка стандартны и твоим методом, сделай в цикле вызов проверки достаточное число раз (например 1000), сделай переключение между методами по клавише и вывод результата на экран.

вот это будет корректный тест

и если разница на 1000 вызовов будет менее 1 мс то я считаю что я прав, а ты изобрел очередной велосипед с квадратными колесами
__________________
(Offline)
 
Ответить с цитированием
Старый 03.04.2009, 16:28   #27
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Памагитяяяяяяяяяя...

меня больше смутило это - "$5F3759DF". понятно, что это как то связано с квадратным корнем, но непонятно как.

эх, ексешничков бы... а то не у всех пуребасик стоит.

Импер, я тоже думаю, что грамотно и по всем правилам оформалять исходник примера, где рассматриваются достаточно продвинутые вещи это лишнее. Любители итак разберутся а нубам нафиг не упала производительность в таких довольно специфических частях, ибо они будут косячить в другом (загружать модели в цикле, создавать камеру в цикле, использовать текстуры 2673 на 3415, и т.д).

Venom, поаккуратней на поворотах, ладно? у каждого может быть свое мнение и считать неадекватным человека только из-за того что его мнение не совпадает с твоим - это имхо невежество как минимум.

Последний раз редактировалось HolyDel, 03.04.2009 в 16:46.
(Offline)
 
Ответить с цитированием
Старый 03.04.2009, 16:36   #28
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от tormoz Посмотреть сообщение
Собстно нормально оформленных тестов не увидел

создай бб-ешник с 2 функциями - проверка стандартны и твоим методом, сделай в цикле вызов проверки достаточное число раз (например 1000), сделай переключение между методами по клавише и вывод результата на экран.

вот это будет корректный тест
Надо добавить паузу от 3000 до 10000 мсек (в зависимости от производительности системы в целом, а также настройки - фулскрин\виндовед) перед началом теста в проге. Блитц тормозит в начале (отладчик + прочий стаф). Проверено многократно, после того,как на эту ошибку указал AsmLover (сорри, если ошибка в нике).
Вроде как тут это неговорено.


меня больше смутило это - "$5F3759DF". понятно, что это как то связано с квадратным корнем, но непонятно как.
http://en.wikipedia.org/wiki/Fast_inverse_square_root
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (03.04.2009)
Старый 03.04.2009, 18:17   #29
Venom
Оператор ЭВМ
 
Регистрация: 25.02.2008
Сообщений: 24
Написано 8 полезных сообщений
(для 30 пользователей)
Ответ: Памагитяяяяяяяяяя...

Сообщение от tormoz Посмотреть сообщение
Собстно нормально оформленных тестов не увидел

создай бб-ешник с 2 функциями - проверка стандартны и твоим методом, сделай в цикле вызов проверки достаточное число раз (например 1000), сделай переключение между методами по клавише и вывод результата на экран.

вот это будет корректный тест

и если разница на 1000 вызовов будет менее 1 мс то я считаю что я прав, а ты изобрел очередной велосипед с квадратными колесами
А я что привел? Может тебе к окулисту сходить, зрение проверить, а?

Вот еще один тест "риалтайм", специально для impersonalis ввел константы с понятными именами, а так-же прокомментировал (а то может по названиям непонятно *ROFL*):
; режим работы экрана
Const SCREEN_MODE% = 0

; разрешение экрана
Const SCREEN_WIDTH% = 800
Const SCREEN_HEIGHT% = 600

; центр экрана
Const SCREEN_X_CENTER% = SCREEN_WIDTH / 2
Const SCREEN_Y_CENTER% = SCREEN_HEIGHT / 2

; сдвиг наблюдаемого обьекта по оси Z от камеры
Const ENTITY_Z_OFFSET_FROM_CAMERA# = 5.0

; полный угол в градусах
Const FULL_CIRCLE_IN_DEGREES# = 360.0

; обратная величина полного угла в градусах
Const INVERSE_FULL_CIRCLE_IN_DEGREES# = 1.0 / FULL_CIRCLE_IN_DEGREES

; резкость управления мышью
Const MOUSE_X_SENSITIVITY# = 0.25
Const MOUSE_Y_SENSITIVITY# = 0.25

; ограничение угла обзора камеры по оси ординат
Const CAMERA_PITCH_THRESHOLD# = 85.0

; скорость движения камеры вперед\назад
Const CAMERA_FORWARD_VELOCITY# = 0.05
Const CAMERA_BACKWARD_VELOCITY# = -0.05

; половина угла и дистанция обзора камеры для стандартного метода
Const HALF_FIELD_OF_VIEW_FOR_STANDART_TEST# = 25.0
Const DISTANCE_OF_VIEW_FOR_STANDART_TEST# = 10.0

; половина угла и дистанция обзора камеры для собственного метода
Const HALF_FIELD_OF_VIEW_FOR_CUSTOM_TEST# = 0.906308 ;Cos(HALF_FIELD_OF_VIEW_FOR_STANDART_TEST)
Const DISTANCE_OF_VIEW_FOR_CUSTOM_TEST# = 100.0 ;DISTANCE_OF_VIEW_FOR_STANDART_TEST ^ 2

; кол-во итераций
Const ITERATION_QUANTITY% = 1000

Local xang#, yang#
Local from%, what%
Local frames%, timer%, fps%
Local method%, count%, result%

Graphics3D(SCREEN_WIDTH, SCREEN_HEIGHT, 0, SCREEN_MODE)
SetBuffer(BackBuffer())

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

;Наблюдающий обьект
from = CreateCamera()
CameraZoom(from, 1.0 / Tan(HALF_FIELD_OF_VIEW_FOR_STANDART_TEST))
CameraRange(from, 1.0, DISTANCE_OF_VIEW_FOR_STANDART_TEST)

MoveMouse(SCREEN_X_CENTER, SCREEN_Y_CENTER)
Repeat

    ; -----------------------------------------------------
    ; Управление камерой
    ; -----------------------------------------------------
    xang = xang - MouseXSpeed() * MOUSE_X_SENSITIVITY
    yang = yang + MouseYSpeed() * MOUSE_Y_SENSITIVITY
    MoveMouse(SCREEN_X_CENTER, SCREEN_Y_CENTER)
    
    ; модуль для чисел с плавающей запятой
    xang = xang - Int(xang * INVERSE_FULL_CIRCLE_IN_DEGREES) * FULL_CIRCLE_IN_DEGREES
    ; ограничиваем отрицательное значение угла по оси абсцисс
    If (xang < 0.0) Then
        xang = FULL_CIRCLE_IN_DEGREES + xang
    EndIf
    
    ; impersonalis ты доволен? *ROFL*
    If (Abs(yang) > CAMERA_PITCH_THRESHOLD) Then
        yang = Sgn(yang) * CAMERA_PITCH_THRESHOLD
    EndIf

    RotateEntity(from, yang, xang, 0.0)
    If (KeyDown(200)) Then
        MoveEntity(from, 0.0, 0.0, CAMERA_FORWARD_VELOCITY)
    EndIf
    If (KeyDown(208)) Then
        MoveEntity(from, 0.0, 0.0, CAMERA_BACKWARD_VELOCITY)
    EndIf
    ; -----------------------------------------------------
    
    RenderWorld()
    
    If (KeyHit(57)) Then
        method = 1 Xor method
    EndIf

    If (method = 0)
        Text(10, 10, "Стандартный метод")
        
        For count = 1 To ITERATION_QUANTITY
            result = StandartTest(from, what, DISTANCE_OF_VIEW_FOR_STANDART_TEST, HALF_FIELD_OF_VIEW_FOR_STANDART_TEST)
        Next
    EndIf
    
    If (method = 1)
        Text(10, 10, "Собственный метод")
        
        For count = 1 To ITERATION_QUANTITY
            result = CustomTest(from, what, DISTANCE_OF_VIEW_FOR_CUSTOM_TEST, HALF_FIELD_OF_VIEW_FOR_CUSTOM_TEST)
        Next
    EndIf

    Text(10, 20, Str(fps))
    
    If (result) Then
        Text(10, 30, "Обьект в поле зрения")
    EndIf
    
    Flip(False)
    
    ; -----------------------------------------------------
    ; Счетчик кол-ва кадров в секунду
    ; -----------------------------------------------------
    frames = frames + 1
    If (MilliSecs() > timer) Then
        fps = frames
        frames = 0
        timer = MilliSecs() + 999
    EndIf
    ; -----------------------------------------------------
Until (KeyDown(1))
End

; -------------------------
; Стандартный метод
; -------------------------
Function StandartTest%(from%, what%, dist#, view#)
    If (EntityDistance(from, what) < dist) Then
        If ((Abs(DeltaYaw(from, what)) < view) And (Abs(DeltaPitch(from, what)) < view)) Then
            Return True
        EndIf
    EndIf
    Return False
End Function

; -------------------------
; Собственный метод
; -------------------------
Function CustomTest%(from%, what%, dist#, view#)
    Local xsub#, ysub#, zsub#, temp#
    xsub = EntityX(what) - EntityX(from)
    ysub = EntityY(what) - EntityY(from)
    zsub = EntityZ(what) - EntityZ(from)
    temp = xsub * xsub + ysub * ysub + zsub * zsub
    If (temp < dist) Then
        temp = 1.0 / Sqr(temp)
        xsub = xsub * temp
        ysub = ysub * temp
        zsub = zsub * temp
        temp = xsub * GetMatElement(from, 2, 0) + ysub * GetMatElement(from, 2, 1) + zsub * GetMatElement(from, 2, 2)
        If (temp > view) Then
            Return True
        EndIf
    EndIf
    Return False
End Function
ЗЫ
Хочу заметить что стандартным методом получается прямоугольное поле обзора (четырехугольная пирамида, из-за раздельной проверки по осям), а собственным методом конус, что имхо лучше для данной задачи.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Venom за это полезное сообщение:
h1dd3n (03.04.2009), HolyDel (03.04.2009), impersonalis (03.04.2009)
Старый 03.04.2009, 18:28   #30
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Памагитяяяяяяяяяя...

стандартный 35-37
свой - 62

это на 100000 итераций.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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