Skocz do zawartości

Rekomendowane odpowiedzi

Napisano

Ale co ci po kontroli, jak żeby cokolwiek osiągnąć musisz naklepać kodu jak głupi osioł. Trzeba jeszcze wziąść pod uwagę, że współczesne systemy operacyjne są bardziej retrykcyjne co do takich programów hasających po pamieci i używających poleceń niskiego poziomu i może się okazać, że nasze super optymalizację w assemblerze są nietrawione przez SO.

  • Odpowiedzi 141
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

Nie mylisz się pisanie w wyżyszm języku to (może użyję złego słowa) posługiwanie się swoistymi makroinstrukcjami assmeblera.

Napisano

To za mocne stwierdzenie. Kompilacja jest znacznie bardziej skomplikowana i nie polega na zwyklej translacji z jednego jezyka na drugi.

Napisano

Zatem spróbuj ronin cos napisać w C++ co obsługiwało by teksturowanie w czasie rzeczywistym (model 6000 faces, 1024x1024x32) bez użycia procesora tylko układów karty graficznej......

 

My mieliśmy z tym problem bo sie okazało, że C++ potrzebuje wtedy karty z 1GB pamieci :)

 

natomiast bezpośrednio w Assemblerze odbyło się to bez \"zmiłuj się\". Oczywiście zapomnijmy o DirectX bo engine używał głównie OpenGL i FireGL.

 

pozdrawiam [piwo]

Napisano

Boowa - A czy ja pisalem, ze assemblera sie nie uzywa? Wiadomo, ze kod w assemblerze jest zazwyczaj duzo szybszy od kodu w jezykach wyzszego poziomu. Podejrzewam , ze calego programu nie klepiecie w aassemblerze, tylko funkcje ktore ostro cos licza.

Napisano

Oto jak wyglada kompilacja przykladowego programu w C. Raczej trudno tu mowic o translacji 1-1.

 

int g1, g2, g3, g4;

 

int przyklad(int p1, int p2)

{

g1 = g1 + p1;

g2 = p1 - p2;

return g1;

}

 

int main(int argc, char* argv[])

{

g1 = 10;

g2 = 20;

g3 = przyklad(5, 9);

g4 = przyklad(6, 18);

 

printf(\"Wynik %dn\", g1, g2, g3, g4);

return 0;

}

 

7: int przyklad(int p1, int p2)

8: {

00401020 push ebp ;; zapisanie łącza dynamicznego

00401021 mov ebp,esp ;; ustawienie nowej wartości BP

00401023 sub esp,40h ;; przesunięcie wierzchołka stosu na koniec rekordu

aktywacji

00401026 push ebx ;; zachowanie wartości

00401027 push esi ;; rejestrów edi, esi, ebx

00401028 push edi

00401029 lea edi,[ebp-40h]

0040102C mov ecx,10h

00401031 mov eax,0CCCCCCCCh

00401036 rep stos dword ptr [edi]

 

9: g1 = g1 + p1;

00401038 mov eax,[g1] ;; odwołanie do zmiennej

globalnej

0040103D add eax,dword ptr [ebp+8] ;; odwołanie do parametru względem rejestru BP

00401040 mov [g1],eax

 

10: g2 = p1 - p2;

00401045 mov ecx,dword ptr [ebp+8]

00401048 sub ecx,dword ptr [ebp+0Ch]

0040104B mov dword ptr [g2 (004235c0)],ecx

 

12: return g1;

00401051 mov eax,[g1 (004235bc)]

13: }

00401056 pop edi ;; odtworzenie wartości

00401057 pop esi ;; rejestrów edi, esi, ebx

00401058 pop ebx

00401059 mov esp,ebp ;; przesunięcie SP tak aby

;; wskazywał adres łącza

;; dynamicznego

0040105B pop ebp ;; odtworzenie łącza

;; dynamicznego

0040105C ret ;; powrót

 

 

15: int main(int argc, char* argv[])

16: {

00401070 push ebp

00401071 mov ebp,esp

00401073 sub esp,40h

00401076 push ebx

00401077 push esi

00401078 push edi

00401079 lea edi,[ebp-40h]

0040107C mov ecx,10h

00401081 mov eax,0CCCCCCCCh

00401086 rep stos dword ptr [edi]

 

17: g1 = 10;

00401088 mov dword ptr [g1],0Ah ;; przypisanie wartości do g1

 

18: g2 = 20;

00401092 mov dword ptr [g2],14h ;; przypisanie wartości do g2

 

19: g3 = przyklad(5, 9);

0040109C push 9

0040109E push 5 ;; zapis parametrów na stosie

004010A0 call @ILT+0(przyklad) ;; wywołanie funkcji

004010A5 add esp,8 ;; zdjęcie parametrów ze stosu

004010A8 mov [g3],eax ;; podstawienie wartości

;; zwróconej do zmiennej g3

 

20: g4 = przyklad(6, 18);

004010AD push 12h

004010AF push 6 ;; zapis parametrów na stosie

004010B1 call @ILT+0(przyklad) ;; wywołanie funkcji

004010B6 add esp,8 ;; zdjęcie parametrów ze stosu

004010B9 mov [g4 (004235c8)],eax ;; podstawienie wartości

zwróconej do zmiennej g3

 

22: printf(\"Wynik %dn\", g1 + g2 + g3 + g4);

004010BE mov eax,[g1 (004235bc)]

004010C3 add eax,dword ptr [g2]

004010C9 add eax,dword ptr [g3]

004010CF add eax,dword ptr [g4]

004010D5 push eax

004010D6 push offset string \"Wynik %dn\"

004010DB call printf (00401160)

004010E0 add esp,8

 

23: printf(\"Wynik %d % d %dn\", g1, g2, g1 + g2 + g3 - g4);

004010E3 mov ecx,dword ptr [g1]

004010E9 add ecx,dword ptr [g2]

004010EF add ecx,dword ptr [g3]

004010F5 sub ecx,dword ptr [g4] ;; wyliczenie wartości

czwartego parametru

aktualnego

 

004010FB push ecx ;; położenie na stosie

czwartego parametru

004010FC mov edx,dword ptr [g2]

00401102 push edx ;; położenie na stosie

trzeciego parametru

00401103 mov eax,[g1]

00401108 push eax ;; położenie na stosie

;; drugiego parametru

00401109 push offset string \"Wynik %d % d %dn\"

;; położenie na stosie

;; pierwszego parametru

0040110E call printf (00401160) ;; wywołanie funkcji

 

00401113 add esp,10h ;; zdjęcie parametrów ze stosu

 

24: return 0;

00401116 xor eax,eax ;; wyzerowanie eax -

;; wartość zwracana = 0

25: }

Napisano

zgadzam sie z Aleksander. znam troche c++ i asemblera i rzeczywiscie maja one ze soba wiele wspolnego. w c++ najfajniejsze jest to ze pozwala na wykorzystywanie go w stopniu w jakim sie opanowalo tzn: mozna pisac programy niskopoziomowe (jak w asemblerze), strukturalne (jak w pascalu) czy zorientowane obiektowo. mozna uzywac albo zwyklych struktur albo klas czy szablonow.

Napisano

Obiecany bohater w low poly - 2141 faces

bohater1.jpg

bohater2.jpg

bohater3.jpg

bohater4.jpg

 

I scenariusz:

NIBU - LEGENDA CIEMNEGO SAMURAJA.

 

Fabuła

 

Spokojny dzień.

Na terenie należącym do ciemnego samuraja panuje spokój i cisza.

Słychać tylko jedną postać - ciemnego samuraja.

Wojownika bezszelestnie wykonującego ciosy swoją wspaniałą bronią - dwiema włóczniami. Starannie i precyzyjnie wykonuje wcześniej poznane ruchy.

 

Nastało zakończenie szkolenia, czas odpocząć. Odkłada swoją broń i udaje się po garnek zimnej wody.

Ale jego spokój zostaje przerwany nagłym atakiem nieznanego przeciwnika. Przeciwnik zaatakował go własną bronią.

Jednak nasz bohater zna tą broń od lat, odbiera ją napotkanemu wrogowi i pokonuje go. Przed jego śmiercią chce się jeszcze dowiedzieć, dlaczego został zaatakowany.

Jedyne, co udało mu sie dowiedzieć, to fakt, że to sprawka bardzo potężnej kobiety, która zapragnęła posiadania jego broni uważając, że dzięki niej uda jej się uwolnić ludzi

pokonując takich typów jak nasz ciemny samuraj (w przeszłości popełnił wiele złych czynów pod wpływem swojej broni, gdyż posiada ona złowieszczą moc.

Z czasem nauczył się kontrolować tą moc, dzięki czemu znów uzyskał kontrolę na umydłem).

 

Ponieważ owy przeciwnik nic więcej nie wiedział - lub nie chciał powiedzieć - nasz bohater lekko się zdenerwował i załatwił uprczywego gostka.

Samuraj był sprytny i przeszukał rzeczy napastnika. Znalazł przy nim zwój z obrazami jego włóczni - dokładnego dowzorowania kwształtu grotów i ozdób - oraz zwój z jego podobizną.

Na każdym z nich didniała pieczęć, ewidentnie postawiona przez jakąś ważną osobistość.

 

Postanowił więc opóścić spokojne życie i znów stawić czoło niebezpieczeństwu.

Wiedział, że prędzej czy później pojawią się kolejni napstnicy wystarczyło jedynie podążać przed siebie a dotrze do celu.

Napisano

Scenariusz wogule mi sie nie podoba. Sprowadza sie do tego samego co w 95% gier. Nie mowie ze bym wymyslil lepszy ale ten mnie nie przekonal. Pozatym fajnie by bylo jakbys zalorzyl oddzielny topic o swojej grze. pozdr

Napisano

Ma twarz ukrytą za hełmem - jak dam upgrade`a to zobaczycie go oteksturowanego.

 

Jak już wcześniej wspominałem to ma być prosta gierka. Zrobiona tak dla mnie - nie ma to byc drugie ff.

Fabuła tutaj obecna ulegnie zmianie pod wpływem dalszych poczynań bohatera - po prostu nie chciałem zdradzać wszystkich szczegółów, ale zrobię to jak tylko znajdę mój zeszyt z notatkami P:P:P:P.

 

Każdy ma własne zdanie - nie wszystkim musi się podobać. Ale wielkie dzięki za odpowiedź - postaram się coś zmienić.

 

Giorgione:D:D:D:D:D:D:

 

 

Napisano

Bo to ciemny samuraj - jak być oglądał japońskie anime, np. ninja scroll - to być wiedział:P:P:P:P:P[lol2][lol2][lol2][lol2][lol2][lol2][lol2]

Katany itp. to będą mieli jego przeciwnicy.

Giorgione

 

Napisano

Malutki upgaradzik:

 

postać ninja - przed i po oteksturowaniu.

 

Boss2-1.jpg

Boss2-2.jpg

Boss2-3.jpg

 

Jakiś samuraj:

Boss1-1.jpg

Boss1-2.jpg

Boss1-3.jpg

 

 

Jeden z bossów - jeszcze bez teksturki

Boss3-1.jpg

Boss3-2.jpg

Boss3-3.jpg

 

 

Kolejny boss - już gotowy

Boss4-1.jpg

Boss4-2.jpg

Boss4-3.jpg

 

 

To na rzie wszystko - a i małe założenia:

 

Założenia

 

Z biegiem czasu - po przejściu kolejnych leweli będzie się zmieniać fabuła. Postać po pokonaniu kolejnych bossów będzie dowiadywać się o ich celach w tej walce, własnych ambicjach i posłuszeństwie względem głównego przeciwnika.

Bohater(lub antyboheter - jak kto woli :] ) dowie się, że jego głowny wróg wcale nie chce poświęcić się uwolnieniu ludzi od złych demonów. Chce jesynie pozbyć się ciemnego samuraja, gdyż wie, że tylko on i jego kontrola nad bronią może zagrozić w jej planie.

Dlatego też wysyła siedmiu nieustraszonych wojowników (wraz z ich kompanią) do pomocy przy zrealizowaniu planu - przy okazji nie zdradzając wszystkich szczegółów akcji. Resztę nie zdradzę!

 

Pomiędzy kolejnymi lewelami umieszczone będą krótkie przerywniki - animacje 3d przedstawiające poczynania akcji.

Oczywiście bossowie będą równych wielkości o różnym stopniu trudności.

Oprócz bossów na swojej drodze napotka 12 rodzajów przeciwników + kilku sub-bossów.

 

Po pokonaniu kolejnych bossów pasek życia bohatera ulegnie wydłużeniu.

Po pokonaniu kolejnych przeciwników będzie się zwiększał pasek umiejętności - gdy pasek napełni się postać zyskuje nowy specjalny cios.

W sumie oprócz 15 zwykłych ciosów postać będzie miała do dyspozycji 10 ciosów specjalnych oraz 1 supercios dostępny po zabiciu 85% przeciwników z danego lewelu.

 

postać1 - 1044 faces

postać2 - 1398 faces

boss1 - 1304 faces

boss2 - 1274 faces

 

Napisano

giorgione wiesz co o tym myśle...[wow][wow][wow][boje się][boje się][boje się]...założ oddzielny topic i pokazuj go ludziom bo naprawde jest wart uwagi :D

 

pozdro...

Napisano

cO?? Chyba żartujesh :D zakładaj topic bo tutaj to jakoś dziwnie...a na swoim będziesz zbierał krytyke i inne...a przeciesh nikt nie oczekuje że ty to zrobish z dnia na dzień:D

 

pozdro...

Napisano

Yo,

Ja tu tylko tak chwilowo i dziwnie trafilem, ale chyba mam wiecej doswiadczenia w programowaniu gier niz wszyscy tutaj sie wypowiadajacy razem wzieci :)

Po pierwsze - 32bitowy (ass)embler, czyli taki, w ktorym sie pisze, zeby to dzialalo pod ukochanym przez wszystkich windowsem moze i jest szybki. W tym sek, ze sie w nim nie pisze. Boowa tutaj zarzucil, ze karta potrzebowalaby 1gb ramu, zeby oteksturowac postac zrobiona z ilustam faceow (wybaczcie, ze nie pamietam) i tekstura 1024x1024 - chyba masz niedoswiadczonych programistow :) Teksturki 1024x1024 to jest normalny, zwykly standard, a 6000 faceow to wcale nie tak duzo. Juz sam efekt falujacej wody tworzonej na podstawie czystej matematyki, z uwzglednieniem fizyki itp. rzeczy ma 50000 faceow i jesli sie uzywa dobrego engineu, na moim sprzecie (cel500, gf2mx) wyciaga 70 klatek.

C++ jest jezykiem, ktorego sie uzywa zawsze do duzych projektow. Wiadomo, ze engine musi miec jezyk skryptowy (Python, LUA czy cos takiego) ale asma sie nie uzywa. Dlaczego? Uzyj asma i uruchom program pod Win98 - wszystko bedzie dobrze. Uruchom go pod Win2000 albo XP i zaczynaja sie rozne rzeczy dziac. Chodzi o sposob dostepu do sprzetu i pamieci. Wiec w tym momencie juz nie chodzi o optymalizacje na poziomie jezyka, jak w czasach DOSu, gdzie wstawki asm byly konieczne. Teraz chodzi o optymalizacje na poziomie kodu. Programisci piszacy engine\'y _wierza_, ze API, ktorego uzywaja potrafi odpowiednio wykorzystac sprzet i tak jest. Gdybys chcial pisac pixel shadery w asmie, to mniej niz 120.000 linii kodu bys nie napisal dla zwyklego bump mappingu. A Cg (jezyk stworzony przez nVidia do oprogramowania pixel shaderow) potrafi to zrobic w 10 linijkach. Moge sobie dac reke uciac, jesli w engine Unreal jest jakas wstawka asmowa odpowiadajaca za obsluge renderingu. Na pewno uzywaja C++ (co widac jak sie zdebuguje exeka), na pewno jakiegos jezyka skryptowego (mozliwe, ze wlasnej produkcji) i jakiegos jezyka do pixel shaderow. Nie sadze, zeby tego bylo wiecej.

 

Z tego co widzialem na tym topicu prace do tej gry, to takiego grafika chcialby kazdy zespol zajmujacy sie tworzeniem amatorskich gierek w Polsce. Na Twoim miejscu wiec looknalbym na warsztat.pac.pl (ktos rzucil linka i slusznie), gdzie jest naprawde duzo osob, ktore pisza wlasne engine albo potrafia wykorzystac istniejacy. Jak chcesz sie zabrac za robienie gry samemu... musisz sie nauczyc C++ i to dobrze. Do tego albo sie uczysz jakiegos low-level API typu DirectX albo OpenGL albo uczysz sie obslugiwac istniejacy engine (tu moge polecic http://www.qubesoft.com - naprawde rzadzacy, jesli chodzi o uzyskiwane efekty i http://ogre.sf.net - opensource, darmowy bardzo dobry engine). Niestety nauka tych rzeczy zajmie Ci bardzo dlugo, a wielu juz probowalo napisac zbyt duze jak na ich mozliwosci gry i zgineli marnie ;) Naprawde wymaga do bardzo dobrej znajomosci jezyka i API, niezlej znajomosci algorytmiki i trzeba byc niezle stuknietym :) Ja tu jestem przykladem niestety tylko tego ostatniego, ale w przeciwienstwie do wielu programistow, udalo mi sie napisac kilka gierek (co prawda 2d, ale mam juz 10.000 linijek nowej gierki full 3d :) i wiem jakie to jest trudne, ile wymaga czasu, wyrzeczen i paczek wypalonych papierosow :) Wiec dobrze sie zastanow zanim sie za to zabierzesz, mimo wszystko raczej polecalbym podpiecie sie do jakiejs gierki w charakterze grafika, bo naprawde ladne rzeczy robisz. Juz czuje jakby moj grafik zrobil takich kolesi w tylu face\'ach ;)

 

Dobra, pewnie bede podpisany jako Guest, jak to zwykle bywa na takich forach, wiec sie podpisze :)

 

--

MC Gnoyek ..:: slackware 9.0 user

Ortalion Entertainment Programmer

mail: [email protected]

http://www.ortalion.prv.pl

 

Jak chcecie sobie oblookac, to tam sa gierki, ktore napisalem, mocno kretynskie i wydaja sie masakrycznie proste, ale to nie jest takie latwe jak sie wydaje. Gdzies tam jest cos takiego jak Operation Thormentor i sa zrodla tej gierki w archiwum, mozecie sobie zobaczyc jak to wyglada. Gierka byla pisana w ciagu 24h, wiec prosze sie nie smiac z kodu (to do tych, ktorzy maja doswiadczenie w programowaniu :)

 

PS. Huh, a jednak musialem sie zalogowac :)

Napisano

C++ bez watpienia najlepszy,

ale powiedzcie Wy mi jak obiekty 3d uzywac w grach pisanych w Pascal\'u :)

Z tego co wiem to maksymalna rozdzielczosc to 320x240 (13h) :) Z ciekawosci pytam ;)

Napisano

Pascal to już chyba przezytek... na tym sie tylko dzieci uczy programowania w podstawowce i niektorych liceach, i najczesciej nawet nie tyka sie biblioteki Graph

Napisano

Klobuch: przy pomocy biblioteki graph to moze sobie kolka rysowac no i kwadraciki :D:D, a co z tym eksportowaniem plikow z max\'a do pascala??

Napisano

;) wiem co potrafi Pascalowy Graph, ale to nie zmienia faktu, że w toku nauczania programowania nawet nie dochodzi się do takiego poziomu, nie mówiąc już o takich rzeczach jak tryb 13h. Teraz jednak Pascal powinien pójść w odstawke zdecydowanie. Na szczescie w liceum mialem juz Delphi, chociaz zdecydowanie wolalbym C++, niestety nie mi było to wybierac.

Napisano

w liceum :D:D w liceum teraz w I klasie mają Technologie Informacyjną... ehh zamiast uczyc ich tego co najpopularniejsze i najlepsze (C++/Assembler).

P.S. Assembler chyba nie jest popularny ale najlepszy/najszybszy(!) z pewnoscia :]

Napisano

z tego co mi wiadomo to napisanie kodu !calego! w asm graniczy z cudem, wiec pisze sie w c++ np. z wstawkami assemblerowymi co wolniejszych funkcji...

Napisano

zesmy sie rozgadali :D:D, jednak nie ustalilismy w jaki sposob i czy wogole jest mozliwos eksportowania i wykorzystywania modeli wykonanych w maxie w programowaniu w pascalu :D:D

Napisano

Niezle sie usmialem z coponiektorych postow jakie tu widzialem ;)

Oczywiscie na post Mc_Gnoyka nikt (prawie) uwagi nie zwrocil ;)

 

loo: nie da sie \"wyeksportowac modeli z maxa do pascala\" bo jak sobie wyobrazasz niby zamienienie modelu na kod ?

Jak chcesz odczytac siatke w jakis sposob to najlepiej napisac sobie do maxa plugin ktory wyimportuje geometrie w takiej postaciw jakiej sobie zarzyczysz.

 

Co do tej klutni o jezykach to uczestnicy (oprocz Mc_Gnoyka rzecz jasna) nie wzieli pod uwage faktu ze w chwili obecnej to tak naprawde najwazniejsze jest API graficzne umozliwiajace korzystanie z dobrodziejstw akceleratorow. Mamy tu do wyboru DirectX lub OpenGL. Mozna ich uzyc w praktycznie kazdym jezyku programowania pod windows. Do prostych amatorskich gier naprawde nie potrzeba pisac ani w asm ani w c++ ani w delphi, moze byc chociazby VB. Wazne zeby znac dany jezyk.

 

Chcialbym jeszcze zauwazyc ze wsrod programistow panuje podobna opinia o grafikach, tzn. ze sa to rzadne kasy typy, ktore nic za darmoche nie zrobia ;)

Prawda jest taka ze programisci i graficy zyja w 2 roznych swiatach. Proby zrobienia gier przez grafikow bez jakiejs koncepcji technicznej sa rownie zalosne jak proby zrobienia gier przez samych programistow ktorym sie wydaje ze po scenie moga latac kwadraciki i wszystko bedzie ql.

 

Pozdrawiam

Napisano

acha co do pierwszej czesci posta, to wierz ze (chyba) nikt nie obral takiego toku myslenia... ja myslalem o czyms, co by eksportowwalo modele 3ds powiedzmy do jkichs p3d(pascal3d :D) i potem prosta funkcja load_model(dupa.p3d) by sie go wczytwalo gdziestam... wiem, ze jest to 30000x trudniejsze, ale ja myslalem o czyms takim... po prostu o jakiejs funkcji ktora wymaga jakiegostam formatu pliku i loo poszukuje konwertera do tego formatu konkretnego... a nie wiem jak to wyglada od strony programistycznej.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności