Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Вниз

А не устраивать ли нам небольшие конкурсы по кодингу?   Найти похожие ветки 

 
NailMan ©   (2004-07-20 15:23) [600]

КиТаЯц ©
Да хоть так, только движение по инерции и правильная математика столкновений типа Сфера-Сфера не такие уж простые как кажутся в условия этой самой инерции.

К тому же если я и возьмусь за такой конкурсный проект, то делать буду только в half-3D(как у WildTangent-овской вариации) и под современное железо(поинтспрайты и т.д.) так что дохлые тачки судей как-то не катят.

---
WBR, NailMan aka 2:5020/3337.13


 
ПсихЪ_задумчивый   (2004-07-20 15:52) [601]


> NailMan ©   (20.07.04 15:23) [600]

Да ладно, простейшая реализация инерционного движения занимает 2-3 строчки, а столкновение сфера-сфера упирается в нахождение расстояния между центрами. Быструю функцию нахождения этого расстояния предложил Андре Ламонт. Как для 2D, так и 3D реализации. Погрешность 3,5%, но скорость не впример высокая. Исключительно смещение битов, и никакх тебе корней.
Так что в таком задании можно будет сосредоточится исключительно на красивостях, что ни есть гуд.


 
NailMan ©   (2004-07-20 17:47) [602]

ПсихЪ_задумчивый
Простейшая инерция для играбельности не катит(я сейчас как раз занимаюсь правильной инерцией для своего UT).

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

Что же касается определения факта столкновения сфера-сфера(3D), то:

Function CheckCollisionSphereToSphere(V1:td3dvector;r1:single;V2:td3dvector;r2:single):boolean;
var sQ:Single;
begin
sQ:=Sqr(v2.x-v1.x) + Sqr(v2.y-v1.y) + Sqr(v2.z-v1.z);
If sq<=((r1+r2)*(r1+r2)) then  result:=true else  result:=false;
end;

V,r - Координаты центра и радиус соответсвенно.

Словами переводя формулу - если квадрат расстояния между точками в пространстве меньше либо равно квадрату суммы радиусов двух сфер, то типа столкнулись! Точность 100% с 50% вероятностью(true/false)...   :-))

Формула кажется Пифагора...

ЗЫ: Сорри за оффтопиковый код...по идее это секреты  ;-))

---
WBR, NailMan aka 2:5020/3337.13


 
NailMan ©   (2004-07-20 17:51) [603]

Красивости само собой - без этого никуда, только вот думаю 2Д реализация будет менее привлекательна в силу ограничения по размер итогового дистрибутива(анимация взрывов будет затруднительна).
Но это это добавит интригу - 2Д против half-3D(не путать с 2D-over-3D).

---
WBR, NailMan aka 2:5020/3337.13


 
ПсихЪ_задумчивый   (2004-07-20 18:04) [604]


> NailMan ©   (20.07.04 17:51) [603]

В конкурсах нет ограничений на раелизацию. За 3D плюсов не поставят. А приведённая тобой функция тормозная, как старая черепаха. Двемерная реализация этой функции есть у меня в исходники для второго конкурса.


 
NailMan ©   (2004-07-20 18:12) [605]

ПсихЪ_задумчивый
Чем тормозная? Ни одного корня, умножения и сложения/вычитания, двумерная реализация еще проще, откинув Z и вместо Single юзать Integer. Вообще получится быстрее поноса(понос на заметку быстрее мысли, а мысль мгновенна)  :-))


> За 3D плюсов не поставят

Даже и не надеюсь - просто мне так проще.

---
WBR, NailMan aka 2:5020/3337.13


 
Zer0 ©   (2004-07-20 18:19) [606]

ГыГыГы

в моей деме одновременно отбражались и сталкивались со с всеми физическими законами 120 обьектов в реальном времени. 30 фпс на p2-300.


 
Zer0 ©   (2004-07-20 18:28) [607]

p.s. никаких оптимизаций, кроме прямого использования fpu =)


 
RagE ©   (2004-07-20 19:01) [608]

даешь конкурс :). а то сяду старые делать :)


 
ПсихЪ_задумчивый   (2004-07-21 09:23) [609]


> sQ:=Sqr(v2.x-v1.x) + Sqr(v2.y-v1.y) + Sqr(v2.z-v1.z);

Тут по твоему нет корней?


 
RagE ©   (2004-07-21 10:21) [610]

ПсихЪ_задумчивый   (21.07.04 09:23) [609]
Как бы ты не отказывался верить а нет :). корень sqrt а sqr это x*x.


 
NailMan ©   (2004-07-21 10:55) [611]

ПсихЪ_задумчивый
> > sQ:=Sqr(v2.x-v1.x) + Sqr(v2.y-v1.y) + Sqr(v2.z-v1.z);
>
> Тут по твоему нет корней?

Как и сказал RagE - нету тут корней, хорошло могу написать так:

sQ:=(v2.x-v1.x)*(v2.x-v1.x) + (v2.y-v1.y)*(v2.y-v1.y) + (v2.z-v1.z)*(v2.z-v1.z);

те же яйца только в профиль...так даже быстрей получится - нет лишних вызовов функции


 
ПсихЪ_задумчивый   (2004-07-21 11:24) [612]

Э... ГЫ! Туплю, в общем... (:
Но всё равно вот это:

function Fast_Distance_2D( x : int; y : int ) : int;
var
 mn : int;
begin
 x := abs( x );
 y := abs( y );

 if x < y then
   mn := x
 else
   mn := y;

 Result := ( x+y-( mn shr 1 )-( mn shr 2 )+( mn shr 4 ) );
end;

быстре будет. Вызывается как:

Fast_Distance_2D( x1-x2, y1-y2 );


 
wiz (at work)   (2004-07-21 13:29) [613]

2 ПсихЪ_задумчивый:

если мы "чиста канкретна" бьёмся за скорость :), тогда это
---cut---
x := abs( x );
y := abs( y );
---cut---

надо заменить на:

---cut---
if x<0 then x:=-x;
if y<0 then y:=-y;
---cut---
так мы избавились от двух вызовов функции abs

:)))


 
cyborg ©   (2004-07-21 13:41) [614]


> [613] wiz (at work)   (21.07.04 13:29)

Ещё быстрее будет:

X:=X and 7FFFFFFF;
Y:=Y and 7FFFFFFF;


 
NailMan ©   (2004-07-21 14:52) [615]

cyborg ©
При условии что это Integer...

---
WBR, NailMan aka 2:5020/3337.13


 
cyborg ©   (2004-07-21 15:04) [616]


> [615] NailMan ©   (21.07.04 14:52)

оно там интегер ;)


 
NailMan ©   (2004-07-21 15:46) [617]

cyborg ©
А ну да. Ступил.

Все таки интересен вариант с Single. Буду наверно прав если юзать вместо Single - Extended - это все таки родной для FPU формат числа, а не Single -> меньше конвертаций Single->Extended->Single

---
WBR, NailMan aka 2:5020/3337.13


 
cyborg ©   (2004-07-21 15:51) [618]


> [617] NailMan ©   (21.07.04 15:46)

А я думал, что сингл сопроцессор тоже жуёт, как процессор жуёт байты и слова, разве не так? Не знал.


 
RagE ©   (2004-07-21 16:08) [619]

Вот чувствую опять настанут выходные прийду на рабочее место а конкурс уже идет вовсю, вместо того чтобы в свободное время занятся разработкой :) Выберем задание конкурса таки или нет?


 
Darthman ©   (2004-07-21 16:13) [620]

Давайте решать, в самом деле :D
Последнее слово беру за собой, как устроитель ;) но темы от вас оч. хочу услышать самые желаемые. Пусть каждый напишет по 2-3 темы, которые бы он стал делать, которые кажутся интересными точнее. Вот.


 
cyborg ©   (2004-07-21 16:23) [621]

Интересно было бы сделать диалог из РПГшных игр, то-сё, туда-сюда, дай то, дай сё. Можно только в консоли делать, никто не останется в обиде ;). Только срока на такой конкурс нужно минимум месяц давать.


 
NailMan ©   (2004-07-21 16:55) [622]

cyborg ©  
> А я думал, что сингл сопроцессор тоже жуёт, как процессор
> жуёт байты и слова, разве не так? Не знал.

Сингл это упрощенный формат. Сопроцессор имеет внутренний формат числа Extended, и когда дельфи сует ему сингл, то автоматом оно конвертится в extended и при выходе наоборот. При этом теряется точность(к вопросу о сравнениях чисел с плавающей точкой). так чта...

Другой вопрос что в API(D3D,OGL) юзают сингл как основной формат - для экономии места и из-за того что Single весит 32бит, что для сопроцессора ЦПУ и сопроцессора видеоадаптера более удобно чем Extended(кажется 80бит весом).

Darthman ©
Могу лишь голосовать за Asteroids. И то под сомнением мое участие - работы у меня сейчас много.

---
WBR, NailMan aka 2:5020/3337.13


 
ПсихЪ_задумчивый   (2004-07-21 17:25) [623]


> Darthman ©   (21.07.04 16:13) [620]

Я уже писал, то, что по моему сможет адекватно соответствовать самой идее конкурсов. А посему подписываюсь ещё и к предложению cyborg"а. Имя под этим в виду, что гораздо продуктивней будет заданием конкурса считать реализацию какой-то одной части игры (меню, диалоги, консоль и т.д.).


 
Darthman ©   (2004-07-21 18:55) [624]

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


 
DeadMeat ©   (2004-07-21 19:05) [625]

А мне ещё Earth Scorch нравится... У меня 3D вариант есть, правда вот найти не могу... Там всё также играется как и в 2D, только добавилось дополнительное управление по сторонам горизонта... Целится также как и раньше, но сначала непривычно, а потом в самый раз...
Я за Earth Scorch... А так, можно ещё о чем-нибудь подумать на досуге...

---
...Death Is Only The Begining...


 
Darthman ©   (2004-07-21 19:15) [626]

Надеюсь вы не обидитесь, что это не Scorched Earth =) Идея имхо интересная. Спасибо тому, кто подсказал.
Условия:
http://code.rpro.ru/_xonix.html


 
DeadMeat ©   (2004-07-21 19:36) [627]

Ну чтож... Будем делать Xonix... Сразу говорю, можете меня заранее оштрафовать по размеру... Если опять таки успею вовремя. Хотя в этот раз расчитываю успеть.


 
OSokin   (2004-07-21 20:47) [628]

OK. Сделаем. У меня есть типа такой, но без исходников. Буду делать по ее образу и подобию, но упрощенно.


 
Zak3D[@Tm] ©   (2004-07-21 22:28) [629]

: ) А я посмотрю как вы отризание делать будете ( Моя тема как раз о нём :)))))


 
Darthman ©   (2004-07-22 00:47) [630]

А это как раз самое интересное ;)


 
ПсихЪ_задумчивый   (2004-07-22 10:12) [631]


> Zak3D[@Tm] ©   (21.07.04 22:28) [629]


> Darthman ©   (22.07.04 00:47) [630]

Это я уже описывал в "заковской" теме...
Да, если не заморачиваться со всякими там дазигнами, то действительно интересно будет реализовывать сею игру. ТОлько вот у меня комп почти здох, поэтому буду делать на рабочем компе после работы. Я участвую точно!!!


 
Darthman ©   (2004-07-22 10:24) [632]

Я, почти 100% тоже в этот раз приму участие.


 
MegaVolt   (2004-07-22 10:45) [633]

Вот образец вдобавок не просто с шариками а с наворотами http://webfile.ru/32423


 
ПсихЪ_задумчивый   (2004-07-22 11:25) [634]


> MegaVolt   (22.07.04 10:45) [633]

Дома у меня Хonix3D стоит. Правда очень древняя не крятнутая шаровара. Графика убогая, доступен толь Лёгкий режим игры, но наворотов там полно. Бонусы всякие, когда вражий шар врезается в твою линию, то от места удара начиает расползаться волна и пока она не достигла тебя ты ещё можешь завершить отрезание... Ну и прочие радости.


 
RagE ©   (2004-07-22 12:57) [635]

Мне задание нравится, я с вами


 
Darthman ©   (2004-07-22 14:05) [636]

Ну вообщем-то оно не тривиальное, тут задачки и косяки будут.


 
Darthman ©   (2004-07-23 10:27) [637]

up


 
wiz ©   (2004-07-23 17:53) [638]

немного не в тему, но...

выдалась на работе свободная минутка, решил попробовать сравнить недавно обсуждавшиеся тут алгоритмы поиска расстояния... в целом написал прогу делающую один миллион вычислений расстояния (на входе - случайные числа) и вычисляющую время выполнения (через QueryPerformanceCounter)... получил на работе следующие результаты (пишу на память - ногами не бить):

ПсихЪ ver - 586 нс/выч
wiz ver - 546 нс/выч
cyborg ver - 526 нс/выч
nailman non-sqrt ver - 415 нс/выч
nailman sqrt ver - 802 нс/выч

машина - Intel Pentium-4 2.2Ghz / ram512Mb
(причём P4-Mobile если я правильно понимаю, т.к. ноутбук)

хотел послать результаты с работы, но все уже уходили, так что послал exe"шник домой и сделал то же самое дома:

ПсихЪ ver - 464 нс/выч
wiz ver - 487 нс/выч
cyborg ver - 434 нс/выч
nailman non-sqrt ver - 312 нс/выч
nailman sqrt ver - 1075 нс/выч

машина - P3-1200 / ram256Mb

сравнивая результаты... ВОПРОС!!!!!! почему P4 почти везде пасётся? почему нет ожидаемого улучшения на P3 (ПсихЪ->wiz->cyborg)? кто-нибудь занимался подобными вещами???

PS: если кому интересно - могу завтренько с утреца выложить бинарники/исходники


 
wiz ©   (2004-07-23 17:55) [639]

PPS: кстати, и там и там win2k-sp4 (если вдруг возникла мысль, что ОС может влиять на результат)


 
wiz ©   (2004-07-23 18:12) [640]

PPPS: для тех кто не хочет ждать до завтра пример:

//ПсихЪ code
function Fast_Distance_2D( x : integer; y : integer ) : integer;
var
mn : integer;
begin
x := abs( x );
y := abs( y );

if x < y then
  mn := x
else
  mn := y;

Result := ( x+y-( mn shr 1 )-( mn shr 2 )+( mn shr 4 ) );
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
 x,y,len:integer;
 worktime,dummy:double;
begin
dummy:=0;

TimerInit;
for i:=1 to max_iter do
 begin
 x:=random(10000)-5000;
 y:=random(10000)-5000;

 len:=Fast_Distance_2D(x,y);
 dummy:=dummy+len;
 end;
TimerTick;

edit1.text:=floattostr(dummy);
worktime:=timer_counter/max_iter * 10E9;
edit1.text:=format("%4.4f нс/выч",[worktime]);
end;

TimerInit, TimerTick - вызовы QueryPerformanceCounter;
dummy - чтобы компилер не "забил" на len;
edit1.text:=floattostr(dummy); - чтобы компилер не "забил" на dummy;
max_iter - очевидно количество итерации (1 000 000)



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 16 17 18 
19 20 21 22 23 24 25 26 27 
вся ветка

Форум: "Игры";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 1.6 MB
Время: 0.494 c
3-1101895067
Zloy_dima
2004-12-01 12:57
2004.12.26
SQL запрос


3-1101232909
SergP
2004-11-23 21:01
2004.12.26
DBGridEh. как запретить перемещение столбцов мышью


1-1102693122
_Дельфин_
2004-12-10 18:38
2004.12.26
Как сделать прозрачным фон TAnimate?


9-1091648899
DeadMeat
2004-08-04 23:48
2004.12.26
Статистика


8-1096460472
alexk
2004-09-29 16:21
2004.12.26
Титры в avi файле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский