[ Srki_82 @ 11.08.2004. 20:37 ] @
Pravio sam male igre u Delphi-u (Yamb, puzle, x-o, poker...) i sad sam poceo da ucim C++ (MS Visual Studio .Net) i DirectX. Poceo sam da pravim sasvim obicnu i jednostavnu igru koju sam prvu napravio kad sam ucio i 2D crtanje - PONG. Verovatno znate sta je to. S obzirom da jos uvek dosta slabo poznajem i C++ i DirectX voleo bih kad bi se jos nekoliko pocetnika ukljucilo u pravljenje ove igre (iz pocetka, naravno :) ). Napravio sam neke modele za lopticu i plocice ( http://www.geocities.com/srki_82/Data.zip ) pa ako neko ima zelju da mi se pridruzi u pravljenju neka pise. Do kraja igre bi trebalo da koristimo Direct3D za crtanje loptice, plocica, terena po kojoj se loptica krece i pozadine, DirectInput za pokretanje plocica, DirectSound za... naravno, zvuk (kada loptica negde udari i za pozadinsku muziku), neke zakonitosti u kretanju lopte, i mozda DirectPlay ako budemo dosli do umrezavanja :P Da bi dosli do svega toga prvo treba da pocnemo :) Za one koji jos ne znaju kako se na najlaksi moguci nacin (valjda je najlaksi) pokrece i gasi DX aplikacije evo malo preradjenog primera iz SDK:

Code:

// Pong.cpp

#include <d3dx9.h>

//-------------------------------------------------------------------
// Global variables
//-------------------------------------------------------------------
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;

//-------------------------------------------------------------------
// Name: InitD3D()
// Desc: Initializes Direct3D
//-------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;

    D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    
    d3dpp.BackBufferWidth = 800;
    d3dpp.BackBufferHeight = 600;
    d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = hWnd;
    d3dpp.Windowed = FALSE;
    d3dpp.FullScreen_RefreshRateInHz = 75;
    d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT ;

    if( FAILED( g_pD3D->CreateDevice( 
      D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
      D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) )
    {
        return E_FAIL;
    }

    g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );

    g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff );

    return S_OK;
}




//-------------------------------------------------------------------
// Name: Cleanup()
// Desc: Releases all previously initialized objects
//-------------------------------------------------------------------
VOID Cleanup()
{
    if( g_pd3dDevice != NULL) 
        g_pd3dDevice->Release();

    if( g_pD3D != NULL)
        g_pD3D->Release();
}




//-------------------------------------------------------------------
// Name: Render()
// Desc: Draws the scene
//-------------------------------------------------------------------
VOID Render()
{
    if( NULL == g_pd3dDevice )
        return;

    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
               D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );

    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        //Ovde crtamo nasu scenu
    }

    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}




//-------------------------------------------------------------------
// Name: MsgProc()
// Desc: The window's message handler
//-------------------------------------------------------------------
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
        case WM_DESTROY:
            Cleanup();
            PostQuitMessage( 0 );
            return 0;
    }

    return DefWindowProc( hWnd, msg, wParam, lParam );
}




//-------------------------------------------------------------------
// Name: WinMain()
// Desc: The application's entry point
//-------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, 
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      "PongWindow", NULL };
    RegisterClassEx( &wc );

    HWND hWnd = CreateWindow( "PongWindow", "Pong", WS_POPUP,
      CW_USEDEFAULT, CW_USEDEFAULT,
      CW_USEDEFAULT, CW_USEDEFAULT,
      GetDesktopWindow(), NULL, wc.hInstance, NULL );

    if( SUCCEEDED( InitD3D( hWnd ) ) )
    { 
        ShowWindow( hWnd, SW_SHOWDEFAULT );
        UpdateWindow( hWnd );
        ShowCursor( FALSE );

        MSG msg; 
        ZeroMemory( &msg, sizeof(msg) );
        while( msg.message!=WM_QUIT )
        {
            if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
            {
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
            else
                Render();
        }
        ShowCursor( TRUE );
    }

    UnregisterClass( "PongWindow", wc.hInstance );
    return 0;
}


Ovo ce pokrenuti program u fullscreen 800*600*32 na 75Hz, pozadina ce biti crna i to je sve sto ce ovaj program raditi. Izlazi se sa Alt + F4 :) Ne umem jos da pronalazim koje sve modove podrzava odredjeni adapter pa bi bilo lepo da neko ovome doda i podrsku biranja odredjenog moda pre ulaska u fullscreen. Ako neko ima bilo kakve ideje u vezi sa ovom "lako za napraviti" igrom neka pise :) I, da... bilo bi lepo da ne koristimo MFC... ako moze, pls :)
[ TvrdiMijo @ 11.08.2004. 21:34 ] @
pa eto ja bi ti se volio pridružit ali ja nažalost ne znam ništa od directx-u i inim stvarima a pored toga "programiram" u delfiju.no,ako mi možeš pokazati te osnove directx-a ja ću ti rado pomoć ako se recimo nemoš sjetit nekog dobrog algoritma za problem koji te muči a ti onda kodiraj u c++-u.uzgred ako ima neko ko bi ovakvu ideju mogao i želio ostvariti u delfiju volio bi da popričamo...

i još nešto.srki_82 zašto si počeo učiti c++?zašto recimo tu igricu nepokušaš napravit u delfiju ako već znaš programirat u njemu?

no,budući da ću se i ja izgleda morati baciti na c++ ,kako si ti počeo učiti programirat u njemu?knjige ili što?

poz
[ Reljam @ 11.08.2004. 21:34 ] @
Odlicna ideja!

Ja ne mogu da se obavezem da cu radim na igri, ali zato mogu da malo pomognem sa strane.

Najlakse je ako koristimo D3DX za ucitavanje objekata, matematiku i naravno effect system (ako dodjemo do toga). Takodje, mozda bi bilo zgodno koristiti DXUT framework umesto sirovog Win32. Postoje interestantnije stvari koje treba da se nauce od toga. :)

Znaci za pocetak je ta prica o podrzavanju razlicith modova manje bitna - to uvek moze da se uradi. Ajde da umesto toga izaberemo neku igru koju realno mozemo da uradimo. Sta mislis o Scramble za pocetak ( http://www.highwaygames.com/products/scramble.php )?

Ako se vec uci, onda treba da se uci iz novih izvora. Da li imas DirectX SDK Summer Update 2004?
[ TvrdiMijo @ 11.08.2004. 21:37 ] @
reljam,jel mi možeš preporučit nešto iz čega bi makar malo mogo zać u stvarčice koje si nabrojao,ili ako ti nije muka da i ti nešto kažeš o tome

please...
[ Srki_82 @ 11.08.2004. 22:13 ] @
Mozemo i tu igru :) Bitno je samo da se uci.
Naravno da imam DirectX SDK Summer Update 2004 i Extras... patim od toga da uvek imam najnoviji softver :)

Pa... odakle predlazes da pocnemo?

P.S. Za TvrdiMijo:

Ovako... uglavnom se svi SDK-ovi pisu za C ili C++, skoro svi open source projekti su u C ili C++ i sad da ne nabrajam dalje. Dosadilo mi je da cekam da neko izbaci Delphi unit-e za recimo DirectX ili bilo sta drugo i resio sam da pocnem da ucim C++. Ucim iskljucivo iz helpa i preko foruma. Tako sam naucio i Delphi koji sad znam skoro perfektno :)
[ Reljam @ 11.08.2004. 22:41 ] @
@TvrdiMijo: prvo treba da savladas C++, tj. da mozes da se snalazis u jeziku. Znaci nadji neku od knjiga, odavno nisam citao C++ knjige, ali meni se dopadaju knjige za 21 dan i slicno. Mislim da su jako dobra polazna tacka jer ti u grubim crtama opisu bitnije delove jezika. Posle toga mozes da uzmes vec neku malo ozbiljniju knjigu. A u medjuvremenu pravi male konzolne programe, i vezbaj na tome.

@Srki
Ponavljam - ja ne mogu da se aktivno bavim pisanjem igre sada, ali zato mogu da pomognem kad zapne, da radim code review-ove, i slicno. Mislim da bi bio dobar pocetak da krenes od DXUTa, i da napravis za pocetak resource manager koji moze da ucitava mesheve i teksture, da ih vezuje za imena, i da ume da ih resolveuje. Ovo ce ti ionako trebati da bi poceo bilo sta netrivijalno kasnije da radis.

Ima li jos neko ko je za ovo zainteresovan?
[ Srki_82 @ 11.08.2004. 23:01 ] @
Ok... DXUT nisam do sad koristio jer sam se nekako navikao na DX8 gde toga nije bilo. Znao sam da se prvo prave neke opste klase za cuvanje objekata, uzimanje i oslobadjanje memorije i slicno... pa da se bacim na posao. Ako nekog bude zanimalo mogu slati source code onog sto uradim na ovu temu i, naravno, ako se nekom ne svidi ono sto budem uradio (verujem da ce mnogi imati bolja resenja od mene) neka pomogne da napravimo sto bolji program :) Pa... da se bacimo na kuckanje :)
[ Reljam @ 12.08.2004. 00:58 ] @
Evo, imamo i podrsku od graficara sa foruma :)

http://www.elitesecurity.org/tema/64391/0#409777
[ Srki_82 @ 12.08.2004. 01:29 ] @
Hmmmmm... ok... za sad jedan zainteresovan dizajner, jedan zainteresovan programer i nas menadzer :) Nadam se da ce do sutra malo vise ljudi da se zainteresuje... u svakom slucaju, bar cu ja nesto nauciti :P

Nije ovaj DXUT tako komplikovan... cak mi se i svidja... MNOGO JE DOBAR :)

Za koji dan (mozda vec i sutra) ce biti gotove klase za brod, rakete, laser i teren. Cim ih zavrsim stavicu ih ovde.

Lepo spavajte :)
[ Reljam @ 12.08.2004. 05:34 ] @
Drago mi je da ti se DXUT dopada - jedan od bitnih design goalova je da se lako koristi, jer ono sto je bilo ranije... ah, necemo o tome :)

Elem, da bi se iz ovoga izvuklo nesto, treba engine dizajnirati kao pravi - pocevsi od onog gorespomenutog resource managera, pa neki scene graph (koji ce u slucaju ove igri verovatni imati jedan nivo dubine, ali princip je bitan :) ), game loop, update za sve objekte u igri, itd. U svakom slucaju, zanimljivo!
[ Srki_82 @ 12.08.2004. 19:54 ] @
Konacno sam nasao malo vremena za kuckanje... spremam se za more, znate vec kupovina, kupovina, kupovina... :)

Nego, ovako sam osmislio memory menager: postoji jedna klasa (CMManager) koja sadrzi listu svih objekata koji su kreirani, moze da dodaje nove, da ih brise i trazi po nazivu. To je otprilike sve sto ova klasa radi. Druga klasa (CMMObject) je klasa iz koje ce se izvoditi svi ostali objekti (mesh-evi, texture, zvukovi,...). Svaki objekat sadrzi svoje ime, mesto u listi objekata i refCount (objekat se ne brise iz liste sve dok je refCount>0). refCount sam dodao iz sledeceg razloga - u igri ce biti nas mali svemirski brod i vise malih raketica i burica sa gorivom. Da nebi svaka mala raketica ucitavala mesh i texturu iz fajla svaki put (bezveze se trosi vreme i memorija), mesh i textura se ucitaju samo jednom i onda im se samo povecava refCount kad god se neka raketica kreira. Pokusacu da napravim smart pointer (warper oko CMMObject) da bi ove klase bilo lakse. Source code je zakacen uz poruku.

P.S. Verovatno sam neke stvari uradio pogresno... ili je mozda moglo bolje pa neka neko malo sredi ove klase :)
[ mjolnir @ 12.08.2004. 20:01 ] @
Da malo pripomognem...
Malo sam prepravio drugi SDK tutorijal tako
da ima dijalog za rezolucije iznad 75Hz,
bez MFC-a, izlazi se i sa ESC ;>
Moglo bi jos da se malo poboljsa, ali neka
za pocetak...

Vidite attach.

Pozdrav,
mjolnir
[ Srki_82 @ 12.08.2004. 20:52 ] @
Hvala, mjolnir, ali sad kad sam malo bolje pogledao DXUT vidim da je to prilicno lako :)

Ovo bi trebalo da posluzi kao smart pointer. U nedelju krecem na more pa me nece biti ovde oko 2 nedelje. Potrudicu se do tad da napravim neke osnovne klase za mesh-eve i texture.

Ima li neko ideju kako bi bilo najbolje da se iscrtava zemlja? Razmisljao sam da napravim triangle strig... otprilike ovako

Code:

*
                    *
     *                               *

*    *              *                *


Zvezde predstavljaju vertexe. Za svaki deo terena imamo definisana dva trougla, mozemo im dodeliti i U i V koordinate za texturu, a i odrediti koji se od delova terena vidi tako da ne moramo da crtamo ceo teren nego samo onaj vidljivi deo. Zna li neko laksi nacin da se postigne slican rezultat?
[ Reljam @ 12.08.2004. 22:14 ] @
To sto si napisao zvuci sasvim dobro. Znaci postojace jedan vertex buffer sa svim vertexima za teren u nivo (ionako ih nema mnogo, <1000), i posle prilikom poziva DrawPrimitive samo treba otprilike izabrati koji se indexi crtaju.

Sto se tice memory managera, ima tu jedna zackoljica: ako na ekranu ne postoji ni jedna raketa, to ne znaci da mesh i tekstura za raketu treba da ima refcount 0 i da se izbaci iz menagera.

Vecina igara zna unapred koji su joj resursi potrebni za level i sve ih ucita, jer bi inace bilo sporo ucitavanje on the fly.

Mislim da bi bilo bolje da uradis MemoryManager za teksture i mesheve koji radi to sto si opisao samo bez refcounta. Takodje, uradi i scene graph koji sadrzi objekte koji u sebi imaju pointere na mesheve. Jer tebi informacija koliko imas referenci na teksturu rakete i nije bitna - sigurno neces brisati tu teksturu pre kraja nivoa.

Takodje razmisli o nekoj entity klasi koju bi mogao da smestis u scene graph. Svaki entity bi mogao da ima svoje Update i Draw metode. Onda bi mogao u render loopu da prodjes kroz celo stablo i da pozivas Update za svaki entity, i onda jos jedanput i da pozivas Draw.

Food for thought: Da li je potrebno imati odvojene scene graphove za Update i za Draw fazu? Ako objekat A zavisi od objekta B (recimo da A pokusava da prati B), onda ih treba tako poredjati u grafu. Ali mozda oni imaju drugaciju vezu kod iscrtavanja. Ok, ovo sve je suvise komplikovano za scramble, zato ovde i pricamo o nekoj lakoj igri za pocetak.

U svakom slucaju imas o cemu da razmisljas na moru ;)
[ Reljam @ 12.08.2004. 22:23 ] @
Mislim da imas jedan bag u refcountu:

U konstruktoru CMMObjecta ne postavljas refCount na 1. To znaci da ako napravis objekat i odmah ga releasujes, on nece biti deletovan. :)
[ Srki_82 @ 12.08.2004. 22:50 ] @
Ja mislim da hoce... mozda ne poznajem dovoljno C++, ali kad pise:

void CMMObject::Release()
{
refCount--;
if (refCount <= 0)MemoryManager->RemoveObject( It );
};

znaci napravim objekat i refCount je 0, odmah ga releasujem refCount ce biti -1 i on ce se izbrisati iz memorije... zar ne?

Mogao bih da imam recimo listu objekata koji imaju refCount veci od nule i listu objekata koji imaju refCount = 0 tako da u svakom trenutku znam koji objekti nisu potrebni i ako ponestane memorije (sto je u ovoj igri malo verovatno, ali nema veze) mogu da oslobodim memoriju zauzetu nepotrebnim resursima. Kad se nivo zavrsi sve objekte oslobotim (tj dovedem ih do refCount = 0) i kada se novi ucitava prilikom kreiranja svakog objekta proverava se da li vec neki objekat postoji i povecava mu se refCount. Na kraju ucitavanja svi objekti sa refCount = 0 se brisu iz memorije. Nadam se da sam dobro napisao ono sto sam mislio :)

Posto jos uvek ne razumem bas najbolje sve izraze vezane za prikazivanje slike objasni mi, molim te, sta je to tacno scene graph?

P.S.
ispravio sam release tako da refCount ne moze biti manji od 0:
Code:

void CMMObject::Release()
{
    refCount--;
    if (refCount<0)refCount = 0;
    if (refCount = 0)MemoryManager->RemoveObject( It );
};
[ Srki_82 @ 13.08.2004. 21:03 ] @
Privodim kraju klase za texture i mesh-eve, ali sam naisao na neke problemcice... pa ako ima nekog koga ne mrzi da pregleda malo kod (oznacio sam mesta koja mi predstavljaju problem) molio bih ga ili je da mi malo pomogne :)
[ Srki_82 @ 13.08.2004. 22:00 ] @
Ispravio sam fajl meshobj.h i sad bar kompajler ne prijavljuje gresku... nadam se da ce to i da radi :)

Code:

#ifndef __MESHOBJ_H__
#define __MESHOBJ_H__

#include "mmanager.h"
#include "spointer.h"
#include "textureobj.h"
#include "drawobj.h"
#include <d3dx9.h>

class CMMMesh : public CMMDrawObject
{
protected:
    LPD3DXMESH Mesh;
    D3DMATERIAL9* MeshMaterials; // TODO: Da li treba dodati objekat za materijale???
    CMMPointer<CMMTexture>* MeshTextures;
    DWORD dwNumMaterials;
    void CleanUp()
    {
        SAFE_DELETE_ARRAY( MeshMaterials );
        if( MeshTextures )
        {
            for( DWORD i = 0; i < dwNumMaterials; i++ )
            {
                MeshTextures[i] = NULL;
            }
        SAFE_DELETE_ARRAY( MeshTextures );
        }
        SAFE_RELEASE( Mesh );
    };

public:
    CMMMesh( LPSTR name, LPSTR type = "MESH" ) : CMMDrawObject ( name, type )
    {
        Mesh = NULL;
        MeshMaterials = NULL;
        MeshTextures = NULL;
        dwNumMaterials = NULL;
    };

    ~CMMMesh()
    {
        CleanUp();
    };

    HRESULT LoadMesh( LPCTSTR pFilename, DWORD Options, LPDIRECT3DDEVICE9 pD3DDevice )
    {
        CleanUp();

        LPD3DXBUFFER pD3DXMtrlBuffer;

        D3DXLoadMeshFromX( pFilename, Options, pD3DDevice, NULL,
            &pD3DXMtrlBuffer, NULL, &dwNumMaterials, &Mesh);
        
        D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
        MeshMaterials = new D3DMATERIAL9[dwNumMaterials];
        MeshTextures  = new CMMPointer<CMMTexture>[dwNumMaterials];


        for( DWORD i=0; i<dwNumMaterials; i++ )
        {
            MeshMaterials[i] = d3dxMaterials[i].MatD3D;
            MeshMaterials[i].Ambient = MeshMaterials[i].Diffuse;
            MeshTextures[i] = NULL;
            if( d3dxMaterials[i].pTextureFilename != NULL &&
                lstrlen(d3dxMaterials[i].pTextureFilename) > 0 )
            {
                if( !CMMObject::MemoryManager->FindObject<CMMTexture>( d3dxMaterials[i].pTextureFilename,
                    "TEX", (CMMTexture*)&MeshTextures[i], TRUE ) )
                {
                    MeshTextures[i]->LoadTexture( pD3DDevice, d3dxMaterials[i].pTextureFilename);
                };
            };
        };
        pD3DXMtrlBuffer->Release();
    };

    void Draw( LPDIRECT3DDEVICE9 pD3DDevice )
    {
        for( DWORD i=0; i<dwNumMaterials; i++ )
        {
            pD3DDevice->SetMaterial( &MeshMaterials[i] );
            pD3DDevice->SetTexture( 0, *(CMMTexture*)&MeshTextures[i] );
            Mesh->DrawSubset( i );
        };
    };
};

#endif //#ifndef __MESHOBJ_H__
[ Srki_82 @ 13.08.2004. 23:51 ] @
Nesto definitivno ne valja u mojim klasama :) Ili samo ne znam da ih koristim...
Probao sam da na brzaka istestiram sve ovo, ali se ispostavilo da ne radi kako treba. Prvo: DXUT zahteva da projekat bude Unicode, a kad to ukljucim onda lstrcmp funkcija ne radi kako treba, a i svi stringovi su mi LPSTR, pa sam zato samo malo modifikovao jedan tutorial (samo dok ne vidimo zasto sve ne radi lepo pa cemo, ili CU, pokusati da sve nekako ubacimo u DXUT). Drugo: smart pointer izgleda ne radi kako treba... koliko sam citao help meni izgleda kao da je dobra klasa, ali... nece da radi :) Pa... posto ne znam kako vise da ispravljam kod prepustam nekom iskusnijem od mene da pokusa da ga malo sredi dok sam ja na moru... nema me dve nedelje... nadam se da ce se do tad bar neke stvari resiti :)
Izvolite i poslednji source za danas... naravno, nece da se kompajlira :P
[ Srki_82 @ 14.08.2004. 00:05 ] @
Nesto razmisljam... mozda bi bilo bolje da napisem sve iz pocetka bez template, refCount... sto je moguce lakse... mislim da ce tako i biti :)
[ brcha @ 14.08.2004. 00:42 ] @
koristite SDL i napravite igru za win/lin/mac istim udarcem
[ Srki_82 @ 14.08.2004. 00:59 ] @
Video sam SDL, ali poenta je da naucim sam da radim to sto radi SDL :)
[ Reljam @ 14.08.2004. 03:04 ] @
Srki, Unicode se lako da podrzati: sve stringove deklarisi kao WCHAR*, a ako treba da prebacis iz char* u WCHAR* string koristi mbstowcs. Dobro je da na vreme kreces sve da radis u Unicodeu, to je sigurno buducnost.

Kod ima nekoliko problema sa kompajliranjem, ali za pocetak ono sto ti smeta je red 33 u spointer.h. operator= treba da vrati referencu na tip u kome se nalazi. Znaci red 33 treba da bude:

inline CMMPointer<T>& operator= (T *o)

umesto

inline operator= (T *o)

Posle toga ima jos par problema sa kompajliranjem, sitne stvari, nedostaje return u CMMesh::LoadMesh, i sl. nista strasno.

CMMesh deluje dobro, samo namesti da tip resursa ne bude string, jer je jako naporno posle stalno porediti stringove - dovoljno je da je enum. Takodje, u CleanUpu, nemoj da SAFE_DELETEujes teksture, jer je moguce da postoji vise od jednog objekta koji referencira tu teksturu, zato treba da koristis SAFE_RELEASE.

CMMObject::Release ima bag: if (refCount=0) siguran sam da si mislio na if (refCount == 0).

Inace u pravu si za refCount. Ja sam navikao na odredjenu implementaciju COM objekata gde je refCount 1 cim se objekat napravi, a addref i release vracaju refcount.

Nemam vremena da detaljno pogledam kod, samo sam hteo da bacim pogled. Moguce je da nisam nesto video kako treba.

Inace, sto se tice D3DXLoadMeshFromX: Teoretski, trebao bi da koristis efekte umesto materijala, ali su trenutno EFFECTINSTANCE-i suvise komplikovani. U sledecoj verziji cu se potruditi da ih malo sredim (barem da sadrze ime teksture), ali cisto da znas da je zvanicni stav da je buducnost u efektima :)
[ Srki_82 @ 14.08.2004. 13:36 ] @
Mislim da cu ipak da krenem sve iz pocetka... ipak je ovo do sad previse komplikovano i meni, a verovatno i ostalim pocetnicima. Ipak cu ostaviti ovo sto sam do sad odradio da bi kasnije kad budem malo bolje ovladao C++ -om mogao da nastavim :)
Jos jedno pitanje zasto izbacuje gresku prilikom kompajliranja ovog dela koda?

Code:

if( !CMMObject::MemoryManager->FindObject<CMMTexture>( d3dxMaterials[i].pTextureFilename, "TEX", (CMMTexture*)&MeshTextures[i], TRUE ) )
{
    MeshTextures[i]->LoadTexture( pD3DDevice, d3dxMaterials[i].pTextureFilename);
};


Greska je:
FirstGame error LNK2019: unresolved external symbol "public: int __thiscall CMManager::FindObject(char const *,char const *,class CMMTexture *,int)" ([email protected]@@[email protected]@[email protected]) referenced in function "public: long __thiscall CMMMesh::LoadMesh(char const *,unsigned long,struct IDirect3DDevice9 *)" ([email protected]@@[email protected]@@Z)
[ Reljam @ 14.08.2004. 15:05 ] @
Da bi template radio, treba da bude u headeru - tacnije, kod koji koristi template mora da 'vidi' sors templatea. To jos moze i da se doradi na drugi nacin, tako sto specificno definises template koji bi zeleo da koristis u orignalnom fajlu, na taj nacin ce kompajler da instancira FindObject<CMMObject>, ali najlakse je da template funkcije definises u headeru. Ja sam pomerio FindObject implementaciju tako da se nalazi iza definicije CMMObject-a u mmanager.h

Nazalost, template-ovi u C++u nisu isto sto i generics-i u .NETu, i stvarno im se vide godine. Ovo je tipican primer gluposti sa kojima treba da se mlatis u C++u umesto da ih kompajler 'uradi' za tebe - jezik je jednostavno star.
[ Srki_82 @ 15.08.2004. 01:47 ] @
Jos malo sam menjao kod... ne koristim vise ni vector ni list (jer ne znam kako se koriste... kad me neko nauci vraticu njih posto su verovatno bolji od moje liste) i sad konacno imamo nesto sto daje znake zivota :) Posto je kod oko 180kb ne mogu ga ovde okaciti. Imate ga na http://www.geocities.com/srki_82/FirstGame.zip
Za sad program samo otvara neki X fajli (putanja fajla je hard coded pa cete morati rucno da je izmenite u fajlu FirstGame.cpp) i prikazuje ga. Ja sam ucitao sam sa jednim fajlom Ball.x kojeg mozete skinuti odavde http://www.geocities.com/srki_82/Data.zip

Jos jedna stvar... ako se neki vas mesh ne vidi probajte da podesite View i World matrice.

Toliko od mene za sad... u nedelju oko 16:00 krecem na more... ako nekog ne mrzi neka malo nastavi ovaj programcic :)

POZDRAV!!!
[ Srki_82 @ 15.08.2004. 12:44 ] @
Ako nekom nesto nije jasno u programu neka slobodno pita... mozda ce me ta pitanja dovesti do nekog boljeg resenja odredjenih delova programa. Slobodno pitajte i pisite :)
[ Srki_82 @ 15.08.2004. 13:10 ] @
Promenio sam mmmesh.h fajl i dodao klasi CMMMesh jos dve nove funkcije:

1. D3DXVECTOR3 ObjectCenter() // vraca centar mesh-a
2. float ObjectRadius(); // vraca radius lopte koja obuhvata ceo mesh

Sigurno ce biti cesto potrebno znati ove podatke (kada treba postaviti centar mesha na odredjeno mesto u svetu, kada treba menjati velicinu mesha ili nesto slicno)
[ Srki_82 @ 15.08.2004. 13:52 ] @
Jos malo modifikacija pre odlaska na odmor :)

1. FirstGame.cpp
2. mmmesh.h
3. mmanager.h

Nisam siguran kako se u C++ tacno radi sa pointerima... cini mi se da mozda imam neki memory leak... ko ima vremena i znanja neka pogleda u funkciju CMManager::DeleteNew( UINT _s ) i u CMMMesh kada se ucitavaju texture pa _texture postavljam na NULL.
[ Srki_82 @ 27.08.2004. 19:09 ] @
Pozdrav!!!

Gotovo je i ovogodisnje letovanje i ponovo smo spremni za radi (kako da ne :P).

Da nastavim tamo gde sam stao. Da li je bolje da za crtanje terena ispod letilice i za crtanje zvezda koristim vec transformisane vertexe (kao u prvom primeru sa vertexima u SDK-u) ili da koristim ne transformisane koordinate pa da podesavam matrice prilikom iscrtavanja? Sad cu poceti da radim na zvezdanom polju iza letilice (to mi je nekako najlakse) i za sad planiram samo da crtam pixele koji se krecu razlicitim brzinama pa bi izgledalo kao da su neke zvezde blize, a neke dalje... kasnije cu, mozda, umesto pixela koristiti point sprite za zvezde.
[ bkaradzic @ 27.08.2004. 20:11 ] @
Citat:
Srki_82:
Da li je bolje da za crtanje terena ispod letilice i za crtanje zvezda koristim vec transformisane vertexe (kao u prvom primeru sa vertexima u SDK-u) ili da koristim ne transformisane koordinate pa da podesavam matrice prilikom iscrtavanja?


Prvo da utvrdim terminologiju:
RHW = screen space
XZY = model space

Mislim da je bolje da koristiš XYZ prostor ako teren koji crtaš koristi stalno istu geometriju. Ali ako ti je teren uvek različit i nikada ne ponavljaš geometriju i praktično ga generišeš u toku skrolovanja ekrana, onda je jednostavnije koristiti RHW prostor. Takođe u ovom slučaju možeš koristiti jedan vertex buffer i jedan DrawPrimitive poziv (pod pretpostavkom da su ti sve teksture terena kombinovane u jednu teksturu). Tako ćeš imati bolji frame rate. Puno DrawPrimitive poziva znatno usporava celu igru jer je igra u tom slučaju tzv. driver bound, tj. provodi najviše vremena u drajveru iako CPU i GPU mogu biti značajno brži.

Citat:
Srki_82:
Sad cu poceti da radim na zvezdanom polju iza letilice (to mi je nekako najlakse) i za sad planiram samo da crtam pixele koji se krecu razlicitim brzinama pa bi izgledalo kao da su neke zvezde blize, a neke dalje... kasnije cu, mozda, umesto pixela koristiti point sprite za zvezde.


Ako napraviš dovoljno fleksibilan particle system zvezdano polje i eksplozije mogu koristiti isti code.

Npr. Paralaks zvezdano polje je particle system kojem je
- emiter predstavljen linijom
- početno stanje je random
- život partikla je uvek isti
- svaki partikl ima neograničeni broj života
- smer je uvek isti
- broj partikla je konstantan
- početna brzina varira

Kod eksplozije
- emiter je predstavljen tačkom
- početno stanje je bez partikla
- život je određen dužinom eksplozije
- svaki partikl ima samo jedan život
- smer je random
- broj partikla varira od veličine eksplozije
- početna brzina je konstantna

Što više ovakvih stavki dodaš tvoj particle system će biti fleksibilniji, mada u isto vreme znači da neće biti optimalan za svaki pojedinačni slučaj.

Branimir
[ Srki_82 @ 27.08.2004. 20:40 ] @
Za sad mislim da ne koristim particle system :) Verovatno bih mogao da ga napravim, ali je previse komplikovano za pocetak. Lako mogu posle i to dodati. Za sad planiram da uvek imam oko 100 zvezda, ekspozija da jednostavno bude jednostavno nekoliko slicica koje ce se menjati i izgledati kao eksplozija, a za teren sam mislio da se ucitava iz fajla (mada moze biti i generisan prilikom pocetka svakog nivoa) sa tacno odredjenim brojem vertexa koje cu skrolovati i kada dodjem do poslednjeg iza njega renderujem opet prvi i tako u krug. Pitao sam da li treba da bude RHW ili XYZ zato sto ce mi biti potrebno da znam da li se moj mesh sudario sa terenom (onda bi trebao da eksplodira i da igrac izgubi zivot)... Videcu kako cu to da uradim, samo da zavrsim sa zvezdicama :)
[ bkaradzic @ 27.08.2004. 23:51 ] @
Citat:
Srki_82:
ekspozija da jednostavno bude jednostavno nekoliko slicica koje ce se menjati i izgledati kao eksplozija


Ovo obično ne izgleda dobro u igrama, a i potreban ti je neko ko će kreirati te sličice. ;) Kod ovakvih svemirskih pucačina specijalni efekti su veoma važni. Mada tebi je cilj da učiš na ovoj igri, a ne da je prodaješ, pa onda može da prođe i bez mnogo specijalnih efekata.

Branimir
[ Srki_82 @ 28.08.2004. 16:22 ] @
Pa da... ova igra je cisto edukativne svrhe... niti ce se prodavati, a verovatno je niko nece ni igrati :) Ipak sam poceo da radim na nekom vrlo jednostavnom particle system-u za zvezde, a verovatno i eksploziju i vatru za raketice i svemirski brod. Malo se patim s tim, ali uspecu nekako da ga napravim :)
[ Acid.Reconected @ 30.08.2004. 14:21 ] @
ja sam voljan da ucestvujem u PROJEKTU, ali ja znam osnove dx-a u VB-u? da li to pravi problem? mada, oduvek sam hteo da pocenam ucenje c++-a.
[ Srki_82 @ 30.08.2004. 15:56 ] @
Koriscenje DX-a je relativno lako :) Cilj svega ovoga nije da samo naucis da koristis DX, vec da naucis da pravis igru. Kad znas da pravis igru, lako posle mozes da naucis i OpenGL ili neki drugi API pa da radis sa njim(mada meni je nakako najdrazi DX :) ). Kad zavrsim(o) sa ovom malom igrom, mozda bi mogli da napravimo neki mali, mali, mali, majusni engine :) Ovo sto sam ja poceo tesko da lici na bilo kakav engine, ali sta da se radi... svaki pocetak je tezak :)
[ bkaradzic @ 31.08.2004. 23:36 ] @
Citat:
Srki_82:
Pogledajte ih na:
ima svacega... cim zavrsim sa citanjem bacam se na kuckanje :)


Najbolja serija knjiga na temu razvoja igara je:
Game Programming Gems (1, 2, 3 i 4)

http://www.charlesriver.com/titles/gamegems3pack.html
$129.95 za prve tri knjige

http://www.charlesriver.com/titles/gamegems4.html
$69.95 za četvrtu

I sve knjige vrede stvarno svaki utrošeni $. ;)

Branimir
[ bkaradzic @ 01.09.2004. 00:35 ] @
Citat:

Imate 1. i 2. knjigu besplantno na


Ne radi se o besplatnoj knjizi nego o linku na ilegalan download! Razvoj igara i piraterija ne idu zajedno...

Pročitaj Pravilnik za korisnike

Citat:

14. Stop krađi softvera

Na ES forumima je zabranjeno objavljivanje serijskih brojeva ili "crack"-ova koji omogućavaju nelegalno korišćenje softvera bilo koje vrste. Takođe je zabranjeno postavljanje linkova za ilegalan download komercijalnog softvera. Ovakve teme će biti obrisane, a korisnik opomenut.


Branimir
[ Srki_82 @ 01.09.2004. 16:48 ] @
Sorry, obrisacu sam linkove... nisam znao da je nelegalna kopija. Ima li neke dobre besplatne knjige na netu za nas koji ne mozemo da izdvojimo $129.95 + $69.95 za knjige?

P.S.

Ovo je knjiga, a ne software pa nisam krsio pravila foruma :)
[ Reljam @ 01.09.2004. 17:07 ] @
Ispostavlja se da isto pravilo vazi i za knjige, filmove, mp3ove, itd. Mislim ne moras bas da postujes linkove po forumu za to, a sta nadjes na netu, to je vec samo tvoja stvar.
[ Srki_82 @ 04.09.2004. 19:17 ] @
E, ovako... sve ovo sto je bilo uradjeno do sad je uradjeno ponovo samo malo drugacije. Sve klase koje se nalaze u ovom malom "engine"-u se sada nalaze u jednom .lib fajlu. Verovatno sam ovog puta malo bolje napravio sve (izgleda da memory manager-i ovog puta rade kako treba)... da ne pricam mnogo, evo source coda za to.
[ Srki_82 @ 04.09.2004. 19:23 ] @
I, evo jednog malog programa koji koristi ovaj mali engine da nacrta neki mesh iz X fajla.

Nadam se da cu uskoro zavrsiti i onaj particle system pa cu napraviti i zvezdice :)
[ Srki_82 @ 05.09.2004. 12:09 ] @
Dodao sam klasu CMMMultiTexture. Mislim da ce nam trebati kad budemo koristili particle system da animiramo teksture cestica. Nasao sam i model nekog svemirskog brodica... bice dobar dok ne nadjemo drugi :)

Posto je fajl malo veci (oko 400kb) morate ga skinuti odavde: http://www.geocities.com/srki_82/TextureObject_letilica.zip

P.S.

Otvorio sam sobe na serbiancafe-u i krstarici: #DirectX pa ko hoce da prica na temu ove igre ili neceg drugog u vezi sas DirectX-om moze da dodje.
[ shima @ 06.09.2004. 02:00 ] @
Ako ima neko da odradi programiranje ove igre i u C#-u, Javi, VB-u, Delphiju, UML-u, 3DGS-u,
Blitz3D-u, DarkBasic-u, Blender3D-u, Virtools-u kao i koriscenjem gotovih enginea itd. sve sa
objasnjenjima pa da i pocetnici i oni koji ne rade u C++-u a i oni koji se ne bave programiranjem
enginea ponesto nauce... ;-)
Videcu i da li neko ko se bavi modelingom ima vremena da objasni pocetnicima kako se sta pravi.
[ Shadowed @ 06.09.2004. 15:32 ] @
Sto se ove igre tice u pitanju je bas pravljenje engine-a tako da je nece praviti sa vec gotovim engine-om.
Inace, dajem podrsku za rad (i) u drugim programskim jezicima. Razlog je sto je C++ veoma necitljiv onima koji ga ne znaju cak i ako znaju programiranje u nekom drugom jeziku. Na primer, ja radim u VB.NET-u ali bez nekog ucenja C#-a ja razumem kod kad ga vidim (OK, znam C (ne ++)) ali kad pogledam primere u C++-u malo sta mi je jasno. Jedino da polako desifrujem. Ako bi se radilo u VB.NET-u ili C# mislim da bi mogao vise da se stavi akcenat na DirectX nego na ostatak koda.
Takodje, mnogo je vise primera radjenih u C++-u negu u ostalim programskim jezicima pa bi ovo dosta znacilo onima koji zele da nauce i koriste DirectX a nemaju vremena da uce jos jedan programski jezik (ma koliko on dobar bio).
[ Srki_82 @ 06.09.2004. 16:48 ] @
Ja odlicno znam da radim u Delphi-u pa bih mogao da kad zavrsimo igru da je prevedem u Delphi... ne mogu bas da stignem da pisem istovremeno i C++ i Dlephi kod. Ako ima dobrovoljaca za prevodjenje koda slobodno pocnite sa ovim sto je do sad gotovo :)
[ Srki_82 @ 06.09.2004. 23:36 ] @
Malo sam zaglavio... zna li neko kako se koristi point sprite? U sustini znam kako treba da ih koristim samo ne znam koje sve state treba da postavim na koje vrednosti. Dakle... imam tacku koja odredjuje gde treba da se pojavi point sprite, svaki sprite ima svoju diffuse boju i texturu (koja je samo maska... znaci crno bela, gde je bela pojavljuje se diffuse boja, gde je slika tamnija tamo je i diffuse boja tamnija... tako otprilike). Koji sad state-ove treba da se sve podese? Posto crtamo i mesh bilo bi dobro da znam koje sve state treba da podesim i za iscrtavanje njega... nema potrebe za blendovanjem ili slicnim stvarima... samo da na njega utice svetlo, da nije flat shade, ako ima texturu da se ona vidi ako nema da se vidi diffuse boja... otprilike to. Hocu da sto manje menjam state zbog brzine (bar tu mogu malo da ustedim :) ). I jos nesto... ako je recimo podeseno da je aktivan flat shade i ja ponovo setujem state na flat shade da li ce to uticati mnogo na brzinu... mislim da li uvek prvo da proveravam sa GetRenderState da li je state onaj koji mi treba pa ako nije da pozovem SetRenderState ili mogu slobodno da pozovem samo SetRenderState, a on ce videti da li uopste treba da promeni RenderState? Nadam se da nisam jako nejasno postavio pitanje :)
[ Srki_82 @ 07.09.2004. 21:26 ] @
Napravio sam neki mali particle system... sad imam jedan problem... kako da znam koji deo prostora se vidi kada se postave sve matrice (world, view, project.)? Ustvari... problem je ovo: zelim da podesim matrice tako da gleda u 0, 0, 0 i da se pixel vidi sve dok ne predje -1 na jednoj ili 1 na drugoj strani X ili Y ose. Znaci kad napravim cestice koje se krecu sa desna na levo od -1 ona treba da se pojavi skroz na desnoj ivici ekrana i kada dodje do X koordinate -1 izlazi iz ekrana. Eto... to je otprilike to. Kod za particle system cu verovatno jos menjati (svi oni pozivi funkciji SetRenderState ne daju bas neku lepu sliku... ako neko zna neka ih promeni), ali evo ovoga sto trenutno imam.
[ Srki_82 @ 07.09.2004. 23:18 ] @
Definitivno sam nesto zeznuo sa ovim particle system-om... ko ima znanja i zelje da nekako ovo popravi neka mi pomogne jer stvarno ne znam zasto se samo x koordinata za samo prvu cesticu postvlja prilikom poziva funkcije InitParticle. Kod i za Simple engine i za First game su ovde zakaceni... ko hoce da proba neka prvo kompajlira Simple engine i zatim lib fajl koji dobije neka kopira u direktorium gde First game kod. Stvarno sam zaglavio... zezam se sa ovim vec par dana... help :)
[ Srki_82 @ 09.09.2004. 19:17 ] @
I ovaj jednostavni particle system je dovoljno uznapredovao da moze da se vidi na ekranu. Evo primera u kojem se vidi brodic i neke crvene zvezdice iza njega.

Ako nekog mrzi da kompajlira sve ovo:

EXE: http://www.geocities.com/srki_82/FirstGameEXE.zip

Mesh i textura za zvezde: http://www.geocities.com/srki_82/Media.zip
[ Srki_82 @ 09.09.2004. 22:24 ] @
Posto je ovo 2D igra... mislim da je bolje da ne koristimo 3D mesh za crtanje objekata nego da ih sve crtamo kao point sprite-ove. Brze, lakse i bolje u ovoj situaciji, zar ne? :)
[ shima @ 10.09.2004. 20:20 ] @
Zeleo bih jos da dodam da bi po meni bilo dobro da se igra radi jos i u Macromedia Flashu
(ActionScript) kao i u Macromedia Directoru (MX 2004, posebno u Lingo-u i u JavaScriptu). Tada bi
njen obrazovni aspekt (sto se tice tehnicke strane izrade) bio potpuniji.
Naravno da bi sve ovo razliciti developeri mogli da rade na razlicitim platformama dobro bi bilo
napraviti i nekakvu projektnu dokumentaciju mozda, pa da i to naucimo kako se radi. Mada posto se
radi klon postojece igre mozda je dovoljno samo videti originalnu igru.
Posto izrada igre ne obuhvata samo tehnicki nego i druge neke aspekte npr. ekonomski, pravni itd.
(od cega takodje zavisi mogucnost njene realizacije i sto takodje ima obrazovnu vrednost) moja neka
razmisljanja su sledeca:
1. Igra bi trebala da bude OpenSource (otvorenog koda) jer je pokrenuta sa obrazovnim ciljem pa bi trebalo da svako moze da vidi (i kompajlira) njen Source kod i to bez obzira da li je igra komercijalna ili ne. Ovde se jos uvek ne razmatraju licence u vezi prava na distribuciju izvrsne (exe - kompajlirane) verzije igre. Ovde sam predpostavio da je broj onih koji ce da kompajliraju igru u edukativne svrhe (ili druge svrhe) manji od ukupnog broja igraca medju kojima su i potencijalni kupci igre.
2. Igra bi svakako trebalo da ima sponzore - npr. jedan od sponzora je EliteSecurity.org portal jer
daje mogucnost za tehnicku realizaciju.
3. Moj predlog je da se ide na komercijalnu verziju igre (ako je to moguce i trzisno logicno) - ali
to je samo predlog...
4. Ako developeri i sponzori ne zele da prave komercijalnu igru (iako mozda postoje mogucnosti za
to) onda ostaje igra sa GPL ili nekom slicnom licencom, naravno ako i ovde nema nekih npr. pravnih
problema.
5. Sto se tice predloga za komercijalnu igru (moja) logika je sledeca:
Zasto nesto raditi za dzabe ako to isto moze i za novac. Ne kazem da neke stvari uopste ne treba
raditi volonterski nego govorim sada o mogucnostima za komercijalni projekat.
Kao prvo ako bi bilo dovoljno sponzora kako u radu (developera) tako i onih koji doniraju druge
stvari npr. novac onda igra moze da se radi i kao cist GPL. Naravno moze i kao cist GPL i bez novca
ali sada razmatram isplative varijenta sa stanovista ulozenog rada i predloga za komercijalnu igru.
Drugo ako se ide na cisto komercijalnu igru moj predlog u vezi ovoga je tzv. "investicioni rad".
Nemam nista protiv da ovde sada uleti neki menadzer i da kaze nasao sam investitore i platicemo
developere u potpunosti ali dok to (i ako) neko (to) ne uradi predlazem da u tom potencijalnom
komercijalnom projektu svako bude nagradjen prema kolicini i kvalitetu onoga sto je ulozio (bilo da
je u pitanju savetovanje, rad (vreme), neki resurs, novac, informacija itd.). Naravno i tu se moraju
napraviti kriterijumi za utvrdjivanje sta ulazi u projekat a sta ne. Podelu eventualne zarade od
prodate igre bih predlozio u procentualnom iznosu prema onome sto je ulozeno i odobreno za projekat.
Mozda bi ljudima za uloge (tj. investicije npr. u radu) trebalo izdavati nekakve akcije pa da se
posle prema broju akcija vrsi podela profita :)
PS: Mozda bismo mogli da zamolimo i Hakere sa foruma Cracking, Kriptografija, Securitu Coding isl.
da odrade zastitu (izvrsne verzije) za komercijalnu verziju igre.
Jeste da onaj ko kupi igru (po ceni od recimo $5 ili $10 ili nekoj drugoj) dobija i Source kod pa
moze da je kompajlira pa i (sa ovog aspekta) ilegalno distribuira to jos uvek ne znaci da se igra
zbog toga ne moze prodavati ili da nece biti zarade.
Eto, zanima me sta o ovome misle Sponzori (ljudi ispred ES-a), Developeri/Konsultanti, potencijalni
developeri, oni koji nesto znaju o celom ovakvom procesu u bilo kom delu itd... Nadam se da mi nece
biti zamereno ako ovi predlozi nisu umesni ili logicni (tj. moguci)
Ako nista drugo mislim da bi citav ovaj proces izrade komercijalne igre bio koristan u obrazovne
svrhe makar uopste ili samo delimicno uspeo.
Da li neko zna da li postoje nekakvi uslovi (npr. za dobijanje licence) za izradu klona igre
(3D)Scramble:
a) pod GLP licencom?
b) pod komercijalnom licencom?

[Ovu poruku je menjao shima dana 11.09.2004. u 04:40 GMT]
[ Shadowed @ 10.09.2004. 21:02 ] @
Ja jesam za verziju igre u vise jezika (ili razlicita igra za razlicit jezik) ali ne treba preterivati (Flash...). Verujem da bi pored C++-a bilo dovoljno uraditi u C#, VB.NET-u i Delphi-u. Naravno, to je moje misljenje i sto se mene tice samo predlog jer ja na bih aktivno mogao da ucestvujem jer DirectX ne znam (a hteo bih da naucim po nesto ovde).
Kao sto si i sam rekao ovo je u edukacione svrhe tako da mislim da ce se svi sloziti da ne treba da bude komercijalna.
[ Srki_82 @ 10.09.2004. 21:12 ] @
Hehe... sve to lepo zvuci :) Ko ne bi voleo da zaradi, ko ne bi voleo da nauci nesto novo, i sve ostalo... ali meni sve ovo vec postaje mnogo tesko, a niko se bas mnogo ne trudi da mi pomogne... vec polako razmisljam da prvu(mozda i drugu, trecu, cetvrtu...) igru napravim sa nekim vec postojecim free engine-onm. Pokusacu jos malo da radim na ovome, ali cini mi se da vec dugo stojim u mestu i samo sredjujem vec ispisani kod jer mi se jos uvek ni jedan deo programa ne svidja. Bilo bi mi zaista drago kad bi neko osim mene uradio bar deo programa :)
[ shima @ 10.09.2004. 23:21 ] @
Hej Srki, malo pre sam se setio da postoji Scramble klon radjen u obliku Java appleta (Java 1.1).

Ne znam da li ti to treba... Ja sam negde zagubio link ali ako ne mozes da ga nadjes javi mi pa cu da pokusam da ga iskopam.
Igra je naravno radjena u 2D. Malo se razlikuje od originala ali ne mnogo.
Ja se uopste ne razumem u to sto radis jer koliko kapiram programiranje enginea u DirectX-u je prilicno usko strucna oblast...
Ti si sve ostalo osim enginea isprogramirao ili umes da isprogramiras?


[Ovu poruku je menjao shima dana 11.09.2004. u 03:57 GMT]
[ Srki_82 @ 11.09.2004. 00:30 ] @
Programiranje engine-a je jedna stvar, a programiranje igara (i koriscenje napravljenog engine-a) druga... bar koliko mi se cini :) U engine-u (bar u ovom sto pokusavam da napravim) se nalaze klase, tipovi, funkcije... itd koje posle mozes da koristis za pravljenje nekoliko razlicitih igara. Quake engine je recimo koristen i za pravljenje jedne fudbalske igre (fudbal i Quake... hehe, bas imaju puno zajednickog) tako da ti engine dodje nekako kao pomoc pri pravljenju igre jer ne treba da se zezas sa mnogim stvarima jer on to radi umesto tebe. Na primer kada se ucitava mesh u slucaju ove nase male igre automatski se ucitava i textura, postavlja difuse boja, kada iscrtavas mesh dovoljno je da kazes mesh->DrawMesh i on ce se iscrtati i slicno. Dakle... u engine-u isprogramiras sve sto mislis da ce ti trebati u igrama koje pravis, od ucitavanja i snimanja fajlova, grafike, zvuka, prikazivanje svega na ekranu do fizike. Na kraju bi mogao da imas recimo engine koji moze da iz fajla ucita podatke o teniskoj loptici (izgled, elasticnost, zvuk koji treba da se cuje prilikom dodire lopte sa drugim stvarima i slicno) da dodas silu gravitacije, postavis loptu negde u vazduhu i pustis engine da radi svoje i lopta ce skakati. Sve u svemu... zeznuto je napraviti i engine, a i igru kada vec imas engine :)

Kod mene je najveci problem ne znanje... ne znanje DirectX-a, ne znanje C++-a, ne znanje nicega :)
[ bkaradzic @ 11.09.2004. 02:34 ] @
Citat:
Srki_82: Hehe... sve to lepo zvuci :) Ko ne bi voleo da zaradi, ko ne bi voleo da nauci nesto novo, i sve ostalo... ali meni sve ovo vec postaje mnogo tesko, a niko se bas mnogo ne trudi da mi pomogne...


Nemoj da odustaješ! Na pravom si putu da završiš ovo što si počeo. Sve ovo što učiš će ti kasnije biti od koristiti, čak i ako pređeš na komercijalni engine. Što se tiče komercijalizacije ovog projekta što radiš, mali su izgledi za neki veći komercijalni uspeh. Takvih igara ima već besplatnih. Ono gde možeš ovo da komercijalizuješ je neki domaći kompjuterski magazin. Napišes članak sa opisom onog šta si radio, kako si došao na ideju da to uopšte radiš, na koje probleme si naišao, objaviš source, itd. To bi moglo da se rastegne u 2-3 broja... :)

Branimir
[ shima @ 11.09.2004. 16:40 ] @
Da li 3D model npr. raketa ili brod za potrebe video igre mora biti iz jednog dela ili moze da se
sastoji iz vise delova i ako moze iz vise delova da li ti delovi moraju biti povezani nekako ili ne
moraju i zasto?
[ Srki_82 @ 11.09.2004. 16:52 ] @
Sve zavisi od engine-a koji koristis. U sustini nema veze da li su modeli iz jednog ili iz vise delova jer se obicno API pati sa tim. Video si na primer da sam ja koristio model u ovoj igri koji se sastoji iz vise delova. Kada bi umesto tog modela stavio neki drugi koji je iz jednog dela ne bi bilo potrebe da se program menja jer DirectX ucitava i modele iz jednog dela i modele iz vise delova. Uglavnom se modeli prave iz vise delova (koliko znam): glava, ruka, druga ruka, grudi, stomak, noga, druga noga, prsti... i slicno.
[ bkaradzic @ 11.09.2004. 17:45 ] @
Citat:
Srki_82: Sve zavisi od engine-a koji koristis. U sustini nema veze da li su modeli iz jednog ili iz vise delova jer se obicno API pati sa tim.


Način na koji su modeli podeljeni prilikom modelovanja, ne mora da bude isti način na koji su podeljeni tokom renderovanja. Na svim platformama je najbolje imati što manje poziva za crtanje, ali na PC-u je to posebno izraženo. Naime zbog nezavisnog hardware layera drajver provodi dosta vremena pripremajući se za renderovanje (možda si čuo izraz "driver bound"). Tj. prevodeći iz tog nezavisnog oblika u oblik koji očekuje grafička kartica. Npr. jedna od optimizacija za FSW za PC je bila da se sva vozila renderuju u jednom pozivu, dok su na Xbox-u bila renderovana u N poziva (praktično svaki točak na vozilu je bio poseban drawprimitive poziv).

Branimir
[ Srki_82 @ 12.09.2004. 13:01 ] @
Pkusavam da koristim billboard-e umesto point sprite-ova za particle system, ali nesto ne ide. Ustvari nista se ni ne vidi na ekranu kada ih iscrtavam. Source za ceo Simple Engine, moze li neko da pogleda sta nije uredu sa particle systemom?
[ Srki_82 @ 12.09.2004. 13:38 ] @
Zaboravio sam da kazem... malo sam sredio mesh klasu pa je sad lakse da se pomera po ekranu. Napravio sam malu demonstraciju pa pogledajte ako vas zanima. Treba vam ovaj kod, SimpleEngine.lib i ship.x da bi sve radilo. Strelicama se pomera brodic, nista narocito, ali se brodic pomera :)
[ bkaradzic @ 12.09.2004. 18:53 ] @
Citat:
Srki_82: Pkusavam da koristim billboard-e umesto point sprite-ova za particle system, ali nesto ne ide. Ustvari nista se ni ne vidi na ekranu kada ih iscrtavam. Source za ceo Simple Engine, moze li neko da pogleda sta nije uredu sa particle systemom?


Pogledao sam kod i odmah sam primetio da crtas particle pojedinačno. Trebaš da koristiš index buffer sa "degenerate triangles" i renderuješ sve kao jedan tri-strip.

Izgleda ovako:
0 1 2 3 3 4 4 5 6 7 7 8 8 9 10 11 11 12 12 13 14 15...

Znači na svaka 4 index-a dolazi dva koja predstavljaju spoj između dva tri-strip-a.
Iako ovo zvuči neoptimalno, u smislu da se za svaka dva vidljiva trougla crtaju dva nevidljiva, ovo je na svim platformama brže od pojedinačnog crtanja.

Ovo je samo sugestija, nije rešenje za problem... ;)

Branimir
[ Srki_82 @ 12.09.2004. 19:02 ] @
Hvala na savetu... cim poligoni pocnu da se pojavljuju bez te optimizacije ubacicu je, a do tada moram prvo da vidim zasto se uopste nista ne vidi :)
[ 4txx @ 14.09.2004. 11:41 ] @
Naidjem vam ja na ovu temu ili procitam 'Za pocetnike (i one koje hoce da nas nauce)'. A ja blage veze ne znam sa programiranjem pa ajde da procitam. I tako ja citam citam a nista ne razumem :p . I onda procitam ideju da sve to napravi u Flash MX-u. :o A ja kao web dizajner se setim da ja znam ActionScript... I eto ja seo i napravio za 3 dana.
...Cudom ispalo je mnogo bolje nego sto sam zamisljao...

http://www.despotos.edu.yu/milan/game/game-swf.zip
http://www.despotos.edu.yu/milan/game/game-exe.zip

Evo vam linkovi za download...
Pa da cujem misljenja.
Dacu vam script ali ne verujem da ce vam to koristiti u c++
[ shima @ 14.09.2004. 14:13 ] @
Svaka cast Majstore!

Evo jos nekih ideja:
1. Mozda bi bilo dobro staviti neki link na ovaj tred sa nekog od podforuma ES-a koji se bave
Flashom, web dizajnom i Directorom da dizajneri vide ovo pa mozda dobijemo jos kvalitetnih
doprinosa?

2. Jel imas neki 3D endzin za Flash? Ako imas eto ti profesionalnog izazova pa napravi ovo u 3D sa
par kamera koje se mogu menjati na pritisak dugmeta. Ako ovo nije jednostavno vidi tacku 1. pa ce
mozda neko od tvojih kolega imati neku ideju. Ja mislim da imam neki 3D endzin u Flashu ali se ne
bavim time (niti se razumem nesto) medjutim voleo bih da vidim kako to izgleda primenjeno. Kada i
ako se igra u Flashu napravi pomocu gotovog 3D engine-a tada se moze preci i na samostalnu izradu
novog 3D engine-a naravno ako ima entuzijasta koji to zele da rade :). Ovakav pristup izradi igre
meni deluje logicno i za bilo koji drugi programski jezik ili automatizovan alat.

3. Eto ja ti se razumem u Flash koliko i u C++ (citaj: ne puno:) , hocu reci skoro nimalo) pa tako
iako imam program Flash MX pa iako sam radio malo u Directoru skoro da ovaj tvoj program ne mogu ni
da vidim kako igleda u radnom okruzenju. He he, garant Srki ne bi umeo da ga "kompajlira". Ja recimo
ni nemam instaliran kompajler za C++ pa mi nije jasno ni kako da pokrenem onu Srkijevu igricu? (Onaj
jedan exe koji sam probao naravno nije radio). Pojma nemam ni sta u koji folder treba smestiti. Iako
se vec mesec dana "mlatim" sa 3D MAX-om (i par dana sa MilkShape-om 3D) jedva sam nekako ukapirao
sta im znaci ono .X fajl iako jos uvek nisam 100% siguran da bih to mogao i da korektno napravim
(konverzija iz .MAX-a u .3DS pravi cudne efekte).
Elem, ti ovo izgleda i nisi mnogo rucno kodirao nego si koristio gotove (automatizovane) skripte?
Jer ne znam gde u Flashu da pogledam kod? Ma kako se uopste ova igrica otvara u Flashu? :)

4. Sad kontam da je za bukvalno svaki doprinos izradi igre potrebno napraviti neki mini tutorijal za
apsolutne biginere ili zainteresovane kako bi ljudi mogli da se snadju.

5. Originalna igrica Scramble se skroluje non stop tj. brod ide u desno ali nije to mnogo ni bitno.

6. Igrica ti je stvarno kul. Medjutim mislim da ne bi trebalo stavljati u igru ime nasih komsija
iako time igra gubi originalnost koncepta.

7. Ima li Scramble za cini mi se "MAME" emulator? To je valda (ako sam se dobro setio naziva) neki
(valda) OpenSource Emulator za sve zive igrice sa automata. Koristi nekakve "ROM" programe (za svaku
igru) koji nisu uvek besplatni. Ako neko zna nesto o ovoma javite.
[ shima @ 14.09.2004. 17:14 ] @
> ...mislim da imam neki 3D endzin u Flashu ali se ne bavim time (niti se razumem nesto)...
Nazalost u pitanju je samo neki demo 3D automobila (bez sors) koda a i pitanje je (za mene) da li je
to stvarno 3D...
http://www.arseiam.com/fx/40.htm
Trebalo bi pitati autora....
[ Srki_82 @ 14.09.2004. 17:25 ] @
Lepo uradjeno :)
Mozda pre Scramble uradim nesto kao sto je ova flash igra.
[ 4txx @ 14.09.2004. 19:03 ] @
Hvala. E ja sam ovaj pravio igru samo 3 dana... (ukupno mozda max 12sati).

U flashu nije mnogo komlikovano pisati script. Postoji odlican help sa objasnjenjem svake komande sa PRIMEROM. Tako da veoma lako... Samo nacrtas neko simbol i uz njega dodas script (kako da se krece... tj menja svoju x i y poziciju na ekranu).

Ja sam stvarno retard za c,c++ ali znam pascal sto mi omogucuje resavanje algoritamskih problema pa to kombinujem u ActionScriptu od flash-a. Sto se tice 3D endzin-a, ne razum se u to, kao sto rekoh ja sam web dizajner, znam samo ono sto mi je potrebno od flesha. Ali mogu ja da napravim promenu kamere, nego glavni problem je ZAHTEVNOST igre. npr u ovoj mojoj kad stavish fullscrean ne da secka nego... Ja inace imam 700mhz tako da je nepodnosljivo. Zbog toga sam i dodao setting za one koji imaju shit komp.

Ja sam za to da vi nastavite da pravite to sto ste zapoceli (3d), upravo zbog zahtevnosti flesha.

Poenta igre nije da napadas nego da branis tako nije neophodno da se brod scrolluje. A ono za komsije cu da izbrisem. :p. Dodacu jos 2 nivoa tezine, par razlicitih nacina za pucanje i to bi bilo to, osim ako nemate vi jos koju ideju. I igru sam napravio i kodirao Sam.., samo sto sam ukrao model letelice.

Ako neko hoce da cuje neko objasnjenje objavicu cod. tj da dodam *.fla
Aj neko neka prosledi ovo po ostalim sorumima, posto sam ja novi pa se ne snalazim dobro.

ps. el ste probali armagedon

[Ovu poruku je menjao 4txx dana 14.09.2004. u 21:57 GMT]
[ 4txx @ 14.09.2004. 19:47 ] @
Citat:
Moj predlog je da se ide na komercijalnu verziju igre (ako je to moguce i trzisno logicno) - ali
to je samo predlog...

Tesko,tesko...

Ja napravim cyber sajt i na kraju moram da ga prodam za 2000din. Sramota
http://www.despotos.edu.yu/test/plato+

A de ces tek igricu da prodas.?!?!?!?!?!?!
[ Srki_82 @ 14.09.2004. 20:05 ] @
Hehe... zamisli kako je kod mene na ~330Mhz... nisam uspeo ni da stignem do pola armagedona jer kontrole ne reaguju bas na vreme zbog zahtevnosti igre, ali zaista lepo izgleda. Uvak mozes dodati jos zanimljivih evekata (eksplozija, nesto kao 2D matrix efekat kad unistis meteor milimetar ispred sebe ( uspori se vreme, kamera se zumira, iscrtas malo lepsu eksploziju jer ionako sve treba da ide polako... ) i slicne stvari). Ideja nikad kraja :)

Da se vratim na C++ igru... nasao sam sta je problem sa iscrtavanjem. Kada napisem ovako:
Code:

struct PARTICLEVERTEX
{
    float x, y, z;
    D3DCOLOR    color;
};

#define D3DFVF_PARTICLEVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)

PARTICLEVERTEX *buffer = new PARTICLEVERTEX[4];

buffer[0].x = -( particlesize / 2.0f );
buffer[0].y = +( particlesize / 2.0f );
buffer[0].z = 0.0f;

buffer[1].x = +( particlesize / 2.0f );
buffer[1].y = +( particlesize / 2.0f );
buffer[1].z = 0.0f;

buffer[2].x = -( particlesize / 2.0f );
buffer[2].y = -( particlesize / 2.0f );
buffer[2].z = 0.0f;

buffer[3].x = +( particlesize / 2.0f );
buffer[3].y = -( particlesize / 2.0f );
buffer[3].z = 0.0f;

buffer[0].color = buffer[1].color = buffer[2].color = buffer[3].color = 0xffffffff;

void* vlock = NULL;
vertex->Lock( 0, sizeof(buffer), (void**)&vlock, 0 );
memcpy( vlock, buffer, sizeof(buffer) );
vertex->Unlock();


Onda se u promenljivoj vertex ne nalaze podaci koji bi trebalo (ili kompajler misli da ne bi) da budu tamo nego ko zna sta, a ako napisem ovako:
Code:

struct PARTICLEVERTEX
{
    float x, y, z;
    D3DCOLOR    color;
};

#define D3DFVF_PARTICLEVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)

PARTICLEVERTEX buffer[] =
{
        { -( particlesize / 2.0f ),  +( particlesize / 2.0f ), 0.0f, 0xffffffff, },
        { +( particlesize / 2.0f ),  +( particlesize / 2.0f ), 0.0f, 0xffffffff, },
        { -( particlesize / 2.0f ),  -( particlesize / 2.0f ), 0.0f, 0xffffffff, },
        { +( particlesize / 2.0f ),  -( particlesize / 2.0f ), 0.0f, 0xffffffff, },
}

void* vlock = NULL;
vertex->Lock( 0, sizeof(buffer), (void**)&vlock, 0 );
memcpy( vlock, buffer, sizeof(buffer) );
vertex->Unlock();


Onda sve radi kako treba. U cemu je problem kod prvog nacina?
Pretpostavljam da je problem u tome sto je u prvom slucaju buffer pokazivac i sizeof(buffer) vraca velicinu pokazivaca, a ne velicinu podataka u njemu.
[ Srki_82 @ 14.09.2004. 20:12 ] @
DA, DA!!! :)
To je to... kakva pocetnicka greska :P

To je reseno... kad crtam poligone bez menjanja World matrice oni se iscrtavaju kako treba, svaki na svoje mesto. Posto je ovo 2D igra i nema neke potrebe da se billboard-i okrecu prema kameri, ali ipak zelim da napravim i automatsko okretanje billboard-a. Kada izracunam novu World matricu kako sam rekao ovde http://www.elitesecurity.org/poruka/438144 i poligoni se vise ne vide. Mozda ima veze sto koristim D3DXMatrixOrthoOffCenterLH, a ne D3DXMatrixPerspectiveFovLH?
[ shima @ 15.09.2004. 00:16 ] @
Citat:
4txx
Ja inace imam 700mhz tako da je nepodnosljivo...
Dodacu jos 2 nivoa tezine, par razlicitih nacina za pucanje i to bi bilo to, osim ako nemate vi jos koju ideju...
Ako neko hoce da cuje neko objasnjenje objavicu cod. tj da dodam *.fla

Odgovor sam stavio na forum 3D modelovanje poruka:
http://www.elitesecurity.org/poruka/439155
[ Srki_82 @ 15.09.2004. 20:31 ] @
Uhhhh... konacno particle system radi sa billboard-ima, a ne sa point sprite-ovima. Pre crtajna cuvaju se neki state-ovi (gledao sam kako radi ID3DXSprite pa sam samo neke od state-ova koje on menja sacuvao). Sve u svemu nista preterano novo nije uradjeno. Umesto perspektive koristim ortogonalnu (valjda se tako pise) matricu u glavnom programu i billboard-i se koriste za cestice, sve ostalo je isto. Sad cu raditi malo na terenu i uskoro ce i on da se mrda ispod naseg brodica :)

Fajl je malo veci od 100kb pa ga skinite odavde:

http://www.geocities.com/srki_82/Game.zip
[ bkaradzic @ 02.10.2004. 01:39 ] @
Hej šta se desilo sa igrom?

Branimir
[ 4txx @ 02.10.2004. 15:45 ] @
ne znam....

http://www.elitesecurity.org/tema/64374/2 posle 18 dana prvi post
http://www.elitesecurity.org/tema/64391/2 bez posta 10 dana
http://www.elitesecurity.org/tema/70135 bez posta
[ indaflesh @ 05.10.2004. 21:39 ] @
Lalicu, jesi li primijetio da .getBytesTotal() nije isto kao velicina fajla? Znas li kako da dobijem pravu velicinu? Glupo je da stavim kao

getBytesLoaded / (sta ja znam, velicina fajla...) kod loadera...

[ 4txx @ 06.10.2004. 13:54 ] @
Ne znam....

Nisam ni provalio, evo bas sad sam probao...kad cudo!
Jedino pravo objasnjenje je da swf kompresuje podatke, a na netu ti loadujes sve.

Pogledaj negde na nekom drugom forumu odgovor...

ps. stavi getBytesTotal()*1.3 (xaxaxa 130% otprilike je kod mene)
[ Srki_82 @ 28.11.2004. 21:31 ] @
Niko nije bio zainteresovan da nastavi to sto sam zapoceo... cccc :) Izgleda niko nece nista da uci. Poceo sam da radim na novoj igri... da li cu postovati source jos ne znam, mozda kasnije. Ideja je otprilike ista:

Kontrolise se letilica koja moze da pucka metkice i baca bombice. Gorivo se konstantno trosi i dopunjuje se tako sto se unisti rezervoar sa gorivom. U ovoj verziji nece biti raketica nego mina na zemlji i mina u vazduhu. One u vazduhu se mogu unistavati metkicima, a one na zemlji bombicama. Ako se ne uniste eksplodiraju kada se brodic nadje u njihovoj blizini i nanose mu stetu i na kraju ako ponestane energije brodic se srusi. Ako se brodic sudari u zemlju... opet je gotov. To je otprilike to. Ovog puta se sve gleda iz neke polupticije perspektive ili kako se vec kaze.

E, da... zaboravih da kazem. Mladji brat mi se ozenio, jos malo pa ce on i njegova zenica da dobiju detence, sad jos i 1. decembra ide u vojsku tako da ce biti guzve na sve strane i ne znam kad cu zavrsiti igru do kraja. Kada bude gotova postovacu izvrsni fajl. Za sada evo screenshot-a



Jos uvek nema senke pa bas i nije moguce videti na kojoj se visini nalazi brodic i letece mine (one kao zvezde). Nema nikakvog HUD-a i teksture su lose (pogotovo za brodic, ali ipak je bio free sto je najvaznije :P)
I, da, jos nesto... teren i pozicije mina i goriva su za sada hard coded jer bas i ne umem da radim sa citanjem fajlova u C++. Cim me to nauce u C++ forumu ubacicu i to, a ako ne budem mogao da naucim verovatno cu napraviti DLL u Delphi-u pa ce mi on ucitavati potrebne podatke.

P.S.
Hvala bkaradzic-u za
Citat:

Evo ga tipičan primer game developmenta u Srbiji:
http://www.elitesecurity.org/tema/64374

Ako čitaš od početka videćeš da postovi idu ovako, na početku vrlo ushićen, objavi svima kako radi na igri, onda pokušaj da se uključi što veći broj ljudi da sarađuju na projektu koji praktično i ne iziskuje više od jednog člana, onda frustracija što niko ne pomaže i onda odustane... Ovde je čak je i mene zeznuo jer sam prvo mislio da će da odustane mnogo ranije, a onda kada je bio na dobrom putu da je završi sam mislio da će ipak istrajati.

Samo hocu da kazem... ne odustajem bas lako :)
[ tomkeus @ 29.11.2004. 19:51 ] @
Evo modela broda koji sam uradio. Ukoliko ti se sviđa mogu da ti pošaljem na mail. Znam C++ i D3D, ali trenutno sam zauzet nečim drugim, tako da ne mogu da ti pomognem.

[ Nothingman @ 03.12.2004. 03:01 ] @
Model broda ti izgleda odlichno, ali ne izgleda mi bas kao fighter.
Ne deluje mi previse opasno za jednog fightera ;)
Ali to je samo moje laicko misljenje...
[ Srki_82 @ 03.12.2004. 08:06 ] @
Hehe... ni moj ni tomkeus-ov ne izgleda bas opasno (pogotovo ne moj), ali ne daj da te izgled zavara. To su ljute zverke ;)
[ tomkeus @ 03.12.2004. 09:56 ] @
Kao što sam rekao, ukoliko ti mdodel treba za igricu, poslaću ti ga. I ja sam svojevremeno hteo da napravim nešto slično, ali sam se upetljao u nešto drugo. Mogu da ti pomognem oko programiranja ako treba, pogotovu oko fizike (recimo mogu da ti napišem klasu za proračun dinamike broda).
[ Fuji @ 03.12.2004. 12:56 ] @
U kojem programu si radio te modele ?
[ tomkeus @ 03.12.2004. 17:39 ] @
max.
[ Srki_82 @ 06.12.2004. 00:08 ] @
Max je ok, samo je mnogo skup. Da mi firma nije platila program verovatno bih koristio neku free alternativu, ali posto ja nista ne placam... Visual Studio .Net i 3DS Max 7 su prave stvari za pravljenje igara ;) Nadam se da cu uskoro imati vremena da zavrsim deo igre pa da ga postujem. Budite strpljivi ;)
[ blaza @ 06.12.2004. 06:21 ] @
@Srki_82: Koja je to firma kupuje 3D Studio Max 7 i VS .Net programerima pocetnicima koji zele da nauce kako da prave igru?
No offense meant.
[ Srki_82 @ 06.12.2004. 07:37 ] @
Haha :)
Nisi valjda mislio da su meni licno kupili (ustvari, kako sam napisao prosli odgovor bas izgleda kao da su ih meni kupili) :) Ja samo koristim te programe u slobodno vreme na poslu. Da ih imam kod kuce sve bi ovo brze napredovalo.
[ Srki_82 @ 06.12.2004. 15:14 ] @
Koji je NAAAAAAAJPROSTIJIIIIIIIII nacin za crtanje senke? Ne treba da bude brz je ce samo par malih objekata da bacaju senku na teren (brodic, bomba ako je igrac baci i nekoliko letecih mina koje se vide na ekranu).
[ tomkeus @ 06.12.2004. 19:15 ] @
Najprostiji način ti je da ispod svakog objekta, a tik iznad površine podloge generišeš jedan transparentni poligon koji će imati ovalno zarnjenje. Naravno, za ovako nešto ti je potrebno da podloga bude apsolutno ravna. Druge varijante ti zahtevaju petljanje sa stencil bufferom.
[ Srki_82 @ 06.12.2004. 19:21 ] @
Podloga DEFINITIVNO nece biti ravna. Znaci stencil mi ne gine :P
[ tomkeus @ 06.12.2004. 19:44 ] @
Onda bato, zagrej stolicu i kreni da čitaš.
Evo ti modela.
[ Srki_82 @ 07.12.2004. 21:50 ] @
Mislim da cu senku raditi na osnovu ovog artikla... http://www.gamedev.net/reference/articles/article2019.asp
Ko zna... mozda ce pomoci jos nekom osim meni ;)
[ Filip Strugar @ 08.12.2004. 13:16 ] @
Ne mora podloga da ti bude 100% ravna, ako je relativno ravna samo drmni poligon sa texturom senke ispod objekta malko iznad podloge - ako natuneujes lepo nece se mnogo primetiti. To ti je najbolje za pocetak ako mene pitas. :)

Ovaj clanak koji si naveo se bavi stencil senkama, ali imas i drugu tehniku, shadow mapping. Ove dve tehnike pogadjaju problem sa dve razlicite strane i svaka, jelte, ima svoje mane i vrline.

Za stencil-based shadow volumes pravis novu geometriju koja predstavlja svaku senku (generises ga per-frame ako se objekat ili svetlo pomera). Onda imas objasnjeno u clanku koji si naveo, sta crtas i upisujes u stencil buffer da bi mogao za svaki pixel znao dal' je u senci. Najveci problem ti je pravljenje tog shadow mesh-a, da bude valjan i nema artifakte. Nisam nikad koristio ovu tehniku ozbiljnije tako da o tome nemam nista pametno da ti kazem.

Kod shadow mappinga pak shadow volume pravis u shadow map teksturi, pa posle podatke iz texture per-pixel poredis da bi znao dal' je pixel u senci. I tu ima nezgodacija, par najvecih su: 1) nedostatak rezolucije shadow mape (ogranicen si rezolucijom texture) tj losa rasporedjenost iste (da ne objasnjavam detalje) pa senke nisu ostre; 2) rucno moras da radis filtering senke (blage prelaze); 3) razni artifakti kod self-shadowinga.

Medjutim, s obzirom da tebi ne treba self shadowing i senka letelice uvek pada na podlogu koja je jednostavna, onda ti treba prostija verzija u kojoj samo projektujes shadow mapu (zapravo klasicnu light mapu - texturu u koju si iscrtao objekat gledan iz izvora svetla) na podlogu.
Time si dobio si senku plus besplatan filtering (problem 2), zaobisao problem 3 plus radi na fixed pipelineu (bez vertex/pixel shejdera).

Ako ti je kamera igre takva da je stalno pozicionirana kao na tvom screenshotu, onda nemas ni problem 1 sa rezolucijom senki i onda mi taj prosti 'shadow map projection' (il kako se vec zove) zvuci kao najbolje resenje - potrazi tutoriale po netu.

Doom3 koristi stencil, HalfLife2, FarCry shadow mapping i varijacije.

E sad znam da ti ovo sve zvuci komplikovano, ali nije ni pola price, a i ja to sve znam povrsno tako da nemam nekih pametnih saveta osim da ako se odlucis da se u to upustis nemoj da se obeshrabris, citaj tutoriale i isprobavaj pa ces vremenom skontati.

Mada ces onda odlutati od pravljenja igre, pa ti vidi sta ti se isplati :)
[ Bojan Basic @ 04.06.2006. 18:32 ] @
I dokle si stigao sa igrom posle ovih godinu i po?
[ Srki_82 @ 05.06.2006. 17:21 ] @
Batalio sam C++ i vratio se Delphi-u... komplikovano je pisati igru kad ne poznajes jezik kako treba :)
[ reject @ 05.06.2006. 18:30 ] @
Izuci ga, ozbiljno. Necu da povredim one koji rade u Delphiju, ali neces sa njime daleko dogurati.
[ tosa @ 06.06.2006. 02:24 ] @
Može se uz pomoć delphi-a napraviti solidno ozbiljan projekat. Jedino što se time prilično
vezuje kod za PC. Pravi igru u Delphi-u a usput uči C++.
[ Srki_82 @ 06.06.2006. 09:44 ] @
Sta cu... izgleda mi ne gine da ucim C++... i onako sam obecao C-H-O-T-Y da cu da mu napisem par jednostavnih igara pa cu i sam da se naucim :)
Sreca pa sve sto sam naucio u Delphi-u o OpenGL, DirectX, fmod, ode i ostalim bibliotekama moze da se primeni i C++ pa mi ostaje samo da savladam malo bolje sintax-u i da pohvatam sve prednosti C++.
[ M-84 AB1 @ 09.07.2006. 17:28 ] @
Srki, jel ti imas veze sa onim likovima iz Kikinde, Soulfly sto su pravili (ili jos prave) igru, sa Dizajn zone?
[ Srki_82 @ 13.07.2006. 10:41 ] @
Hehe... jedina veza nam je sto zivimo u istom gradu :)
[ M-84 AB1 @ 18.07.2006. 23:37 ] @
Hehe, sto napravise model puske sa 120 000 face-ova.