Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

VertexBuffer problem ili sta???:S

[es] :: GameDev - Razvoj Igara :: VertexBuffer problem ili sta???:S

[ Pregleda: 1508 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

manyana
Nemanja Alavanja
Beograd,Zemun

Član broj: 138061
Poruke: 11
*.cpe.vektor.net.



Profil

icon VertexBuffer problem ili sta???:S27.06.2007. u 13:04 - pre 204 meseci
Pozdrav svima...Pocecu od opisa same strukture igre.
Osnova igre je neka vrsta strategije i ako ste igrali dotu to bi trebalo tako da izgleda samo sto nije multiplayer nego singleplayer da ne davim dalje sa tim.
Sada imam 3 objekta koja u jednom trenutku pokusavam da renderujem na sceni.
Teren koji je klasicno generisan teren pomocu heightmape i renderuje se iz hlsl-a koji renderuje 2 teksture.(manje vise klasika)
nakon toga renderujem kolekciju mesh objekata(neko drvece, siprazije i sl.) koje cuvam u generickoj listi.
e problem nastaje kad pokusavam na tu scenu da dodajam animirani mesh
ovo sam uzeo od tom millera i kada pustim animirani mesh onog cuvenog tiny.x koji dolazi uz sam DirectX sdk
on pravi ogromne problem.Mesh se iscrtava.Transformacije , skaliranja i ostalo nije problem dopeglao sam da radi i to funkcionise.
Ali pojavljuje mi se tona nekih verteksa poprilicno izduzenih svuda po ekranu koji se pomeraju cudno ali izgleda da prate bone strukturu(bone animation) samo razbacani su svuda po sceni?????
Nije mi jasno sta se dogadja kada ugasim samo iscrtavanje kolekcije mesheva (drveca) napominje ugasim iscrtavanje objekti i dalje postoje ali se samo ne iscrtavaju ,animirani mesh se ponasa normalno(hoda u prostoru iznad terena bez dodatnih linija razbacanih svuda)
Pretpostavljam da se oslobadja deo VertexBuffera u kome se dogadjaju preklapanja vertexa animirane mreze i ostalih mreza

Stvarno mi treba pomoc oko ovoga ako neko moze da mi pomogne poslacu mu kod ili sta vec ,ili ako je neko imao slican problem bio bih zahvalan da me posavetuje...
Probao sam da menjam redosled iscrtavanja i svatio sam da je definitivno problem u VertexBufferu uredjaja verovatno mi se dogodi da negde ne lokujem podatke vertexBuffera ili nesto slicno samo nikako ne mogu da ulovim.
Rado bih objavio kod ali ogroman je pa stoga kazem da ako neko stvarno misli da moze da mi pomogne neka pusti pp sa mailom na koji da mu posaljem kod.

P.S takodje bi mi znacilo ako bi neko imao slican kod ili link da mi posalje i postuje ovde...

Hvala unapred
 
Odgovor na temu

bkaradzic
Branimir Karadžić
ArenaNet
Seattle, WA

Član broj: 14953
Poruke: 1630
67.151.201.*

Sajt: https://github.com/bkarad..


+11 Profil

icon Re: VertexBuffer problem ili sta???:S27.06.2007. u 18:48 - pre 204 meseci
Ovo može da bude više različitih problema. Preporučujem ti da prvo otvoriš DirectX Control Panel i koristiš debug verziju D3D-a. Onda ćeš videti da li imaš greške u API pozivima, koji mogu da prouzrokuju ovakvo ponašanje... DX Control Panel je ranije bio u Windows Control Panel-u, od nedavno se nalazi u DXSDK folderu.

 
Odgovor na temu

dragansm
Dragan Smiljanic

Član broj: 38170
Poruke: 191
212.200.123.*



Profil

icon Re: VertexBuffer problem ili sta???:S28.06.2007. u 10:54 - pre 204 meseci
Pokusaj da iskomentarises deo po deo koda koji renderuje drvece - delove gde postavljas "rendering state"-ove.
Saljem ti parce svakako nezavrsenog koda koji mozda moze da ti da ideju kako da pojednostavis debug-ovanje DX aplikacija.
F-ja RestoreStates bi trebalo (ovako nedovrsena ne radi nista) da vrati na default vrednosti "state"-ova, ili da joj ime bude CheckStates i da proverava koji od "state"-ova nisu "resetovani".
Naravno, da bi ovo radilo umesto m_pDevice->SetTexture() treba da pozivas DXDevice_n::SetTexture i da prosiris listu sa svim f-jama koje koristis. Mozda deluje da ima preterano posla za pisanje ovog vrapera, ali vrlo brzo se ulozeni trud isplati. Takodje, ako si ukljucio "full debug" DX poziva, ovako ces izbeci reku poruka po "reudantnom postavljanju stejtova"
Code:

#include "dxDevice.h"
#include <d3d9.h>
#include <map>
#include <set>
#include <assert.h>

namespace DXDevice_n
{
    struct StateValue_s
    {
        DWORD Value;
        DWORD Default;
    };
    typedef std::map< DWORD, StateValue_s > StateMap_t;
    typedef StateMap_t::iterator StateMapIter_t;
    typedef std::pair< DWORD, StateValue_s > StatePair_t;

    typedef std::set< DWORD > StateSet_t;
    typedef StateSet_t::iterator StateSetIter_t;

    StateMap_t n_TextureStageState[8];
    StateMap_t n_RenderStatesMap;
    StateMap_t n_SamplerState[8];

    
    StateSet_t n_ChangedTextureStageStatesSet[8];
    StateSet_t n_ChangedRenderStatesSet;
    LPDIRECT3DBASETEXTURE9 n_Texture[8];
}

void DXDevice_n::Init()
{
    static DWORD sTSSTable[] =
    {
        D3DTSS_COLOROP,                 D3DTOP_DISABLE,
        D3DTSS_COLORARG1,               D3DTA_TEXTURE, 
        D3DTSS_COLORARG2,               D3DTA_CURRENT, 
        D3DTSS_ALPHAOP,                 D3DTOP_DISABLE,
        D3DTSS_ALPHAARG1,               D3DTA_TEXTURE, 
        D3DTSS_ALPHAARG2,               D3DTA_CURRENT, 
        D3DTSS_BUMPENVMAT00,            0,             
        D3DTSS_BUMPENVMAT01,            0,             
        D3DTSS_BUMPENVMAT10,            0,             
        D3DTSS_BUMPENVMAT11,            0,             
        D3DTSS_TEXCOORDINDEX,           0,             
        D3DTSS_BUMPENVLSCALE,           0,             
        D3DTSS_BUMPENVLOFFSET,          0,             
        D3DTSS_TEXTURETRANSFORMFLAGS,   D3DTTFF_DISABLE,
        D3DTSS_COLORARG0,               D3DTA_CURRENT, 
        D3DTSS_ALPHAARG0,               D3DTA_CURRENT, 
        D3DTSS_RESULTARG,               D3DTA_CURRENT, 
        D3DTSS_CONSTANT,                D3DTA_CONSTANT,

    };

    static DWORD sRSTable[] =
    {
        D3DRS_CULLMODE,                     D3DCULL_CCW,
        D3DRS_FOGCOLOR,                     0,
        D3DRS_FOGTABLEMODE,                 D3DFOG_NONE,
        D3DRS_FOGSTART,                     0,
        D3DRS_FOGEND,                       1,
        D3DRS_FOGDENSITY,                   1,
        D3DRS_RANGEFOGENABLE,               FALSE,
        D3DRS_AMBIENT,                      0,
        D3DRS_COLORVERTEX,                  TRUE,
        D3DRS_FOGVERTEXMODE,                D3DFOG_NONE,
        D3DRS_CLIPPING,                     TRUE,
        D3DRS_LIGHTING,                     TRUE,
        D3DRS_LOCALVIEWER,                  TRUE,
        D3DRS_EMISSIVEMATERIALSOURCE,       D3DMCS_MATERIAL,
        D3DRS_AMBIENTMATERIALSOURCE,        D3DMCS_MATERIAL,
        D3DRS_DIFFUSEMATERIALSOURCE,        D3DMCS_COLOR1,
        D3DRS_SPECULARMATERIALSOURCE,       D3DMCS_COLOR2,
        D3DRS_VERTEXBLEND,                  D3DVBF_DISABLE,
        D3DRS_CLIPPLANEENABLE,              0,
        D3DRS_POINTSIZE_MIN,                1,
        D3DRS_POINTSPRITEENABLE,            FALSE,
        D3DRS_POINTSCALEENABLE,             FALSE,
        D3DRS_POINTSCALE_A,                 1,
        D3DRS_POINTSCALE_B,                 0,
        D3DRS_POINTSCALE_C,                 0,
        D3DRS_MULTISAMPLEANTIALIAS,         TRUE,
        D3DRS_MULTISAMPLEMASK,              0xffffffff,
        D3DRS_PATCHEDGESTYLE,               D3DPATCHEDGE_DISCRETE,
        D3DRS_POINTSIZE_MAX,                1,
        D3DRS_INDEXEDVERTEXBLENDENABLE,     FALSE,
        D3DRS_TWEENFACTOR,                  0,
        D3DRS_POSITIONDEGREE,               D3DDEGREE_CUBIC,
        D3DRS_NORMALDEGREE,                 D3DDEGREE_LINEAR,
        D3DRS_MINTESSELLATIONLEVEL,         1,
        D3DRS_MAXTESSELLATIONLEVEL,         1,
        D3DRS_ADAPTIVETESS_X,               0,
        D3DRS_ADAPTIVETESS_Y,               0,
        D3DRS_ADAPTIVETESS_Z,               1,
        D3DRS_ADAPTIVETESS_W,               0,
        D3DRS_ENABLEADAPTIVETESSELLATION,   FALSE,
        D3DRS_ZENABLE,                      D3DZB_FALSE,
        D3DRS_SPECULARENABLE,               FALSE,
        D3DRS_FILLMODE,                     D3DFILL_SOLID,
        D3DRS_SHADEMODE,                    D3DSHADE_GOURAUD,
        D3DRS_ZWRITEENABLE,                 TRUE,
        D3DRS_ALPHATESTENABLE,              FALSE,
        D3DRS_LASTPIXEL,                    TRUE,
        D3DRS_SRCBLEND,                     D3DBLEND_ONE,
        D3DRS_DESTBLEND,                    D3DBLEND_ZERO,
        D3DRS_ZFUNC,                        D3DCMP_LESSEQUAL,
        D3DRS_ALPHAREF,                     0,
        D3DRS_ALPHAFUNC,                    D3DCMP_ALWAYS,
        D3DRS_DITHERENABLE,                 FALSE,
        D3DRS_FOGSTART,                     0,
        D3DRS_FOGEND,                       1,
        D3DRS_FOGDENSITY,                   1,
        D3DRS_ALPHABLENDENABLE,             FALSE,
        D3DRS_DEPTHBIAS,                    0,
        D3DRS_STENCILENABLE,                FALSE,
        D3DRS_STENCILFAIL,                  D3DSTENCILOP_KEEP,
        D3DRS_STENCILZFAIL,                 D3DSTENCILOP_KEEP,
        D3DRS_STENCILPASS,                  D3DSTENCILOP_KEEP,
        D3DRS_STENCILFUNC,                  D3DCMP_ALWAYS,
        D3DRS_STENCILREF,                   0,
        D3DRS_STENCILMASK,                  0xffffffff,
        D3DRS_STENCILWRITEMASK,             0xffffffff,
        D3DRS_TEXTUREFACTOR,                0xffffffff,
        D3DRS_WRAP0,                        0,
        D3DRS_WRAP1,                        0,
        D3DRS_WRAP2,                        0,
        D3DRS_WRAP3,                        0,
        D3DRS_WRAP4,                        0,
        D3DRS_WRAP5,                        0,
        D3DRS_WRAP6,                        0,
        D3DRS_WRAP7,                        0,
        D3DRS_WRAP8,                        0,
        D3DRS_WRAP9,                        0,
        D3DRS_WRAP10,                       0,
        D3DRS_WRAP11,                       0,
        D3DRS_WRAP12,                       0,
        D3DRS_WRAP13,                       0,
        D3DRS_WRAP14,                       0,
        D3DRS_WRAP15,                       0,
        D3DRS_LOCALVIEWER,                  TRUE,
        D3DRS_EMISSIVEMATERIALSOURCE,       D3DMCS_MATERIAL,
        D3DRS_AMBIENTMATERIALSOURCE,        D3DMCS_MATERIAL,
        D3DRS_DIFFUSEMATERIALSOURCE,        D3DMCS_COLOR1,
        D3DRS_SPECULARMATERIALSOURCE,       D3DMCS_COLOR2,
        D3DRS_COLORWRITEENABLE,             0x0000000f,
        D3DRS_BLENDOP,                      D3DBLENDOP_ADD,
        D3DRS_SCISSORTESTENABLE,            FALSE,
        D3DRS_SLOPESCALEDEPTHBIAS,          0,
        D3DRS_ANTIALIASEDLINEENABLE,        FALSE,
        D3DRS_TWOSIDEDSTENCILMODE,          FALSE,
        D3DRS_CCW_STENCILFAIL,              D3DSTENCILOP_KEEP,
        D3DRS_CCW_STENCILZFAIL,             D3DSTENCILOP_KEEP,
        D3DRS_CCW_STENCILPASS,              D3DSTENCILOP_KEEP,
        D3DRS_CCW_STENCILFUNC,              D3DCMP_ALWAYS,
        D3DRS_COLORWRITEENABLE1,            0x0000000f,
        D3DRS_COLORWRITEENABLE2,            0x0000000f,
        D3DRS_COLORWRITEENABLE3,            0x0000000f,
        D3DRS_BLENDFACTOR,                  0xffffffff,
        D3DRS_SRGBWRITEENABLE,              0,
        D3DRS_SEPARATEALPHABLENDENABLE,     FALSE,
        D3DRS_SRCBLENDALPHA,                D3DBLEND_ONE,
        D3DRS_DESTBLENDALPHA,               D3DBLEND_ZERO,
        D3DRS_BLENDOPALPHA,                 D3DBLENDOP_ADD
    };
    
    static DWORD sSSTable[] =
    {
        D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP,
        D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP,
        D3DSAMP_ADDRESSW, D3DTADDRESS_WRAP,
        D3DSAMP_BORDERCOLOR, 0x00000000,
        D3DSAMP_MAGFILTER,  D3DTEXF_POINT,
        D3DSAMP_MINFILTER,  D3DTEXF_POINT,
        D3DSAMP_MIPFILTER,  D3DTEXF_NONE,
        D3DSAMP_MIPMAPLODBIAS, 0,
        D3DSAMP_MAXMIPLEVEL, 0,
        D3DSAMP_MAXANISOTROPY, 1,
        D3DSAMP_SRGBTEXTURE,  0,
        D3DSAMP_ELEMENTINDEX, 0,
        D3DSAMP_DMAPOFFSET, 0
    };

    // TextureStageState
    for ( int i = 0; i < 8; ++i )
    {
        int nCount = sizeof( sTSSTable )/( 2*sizeof( DWORD ) );
        for ( int j = 0; j < nCount; ++j )
        {
            StateValue_s sSV;
            sSV.Default = sSV.Value = sTSSTable[ 2*j + 1 ];
            n_TextureStageState[i].insert( StatePair_t( sTSSTable[ 2*j + 0 ], sSV ) );
        }
    }

    // RenderStates
    int nCount = sizeof( sRSTable )/( 2*sizeof( DWORD ) );
    for ( int j = 0; j < nCount; ++j )
    {
        StateValue_s sSV;
        sSV.Default = sSV.Value = sRSTable[ 2*j + 1 ];
        n_RenderStatesMap.insert( StatePair_t( sRSTable[ 2*j + 0 ], sSV ) );
    }

    // SamplerState
    for ( int i = 0; i < 8; ++i )
    {
        int nCount = sizeof( sSSTable )/( 2*sizeof( DWORD ) );
        for ( int j = 0; j < nCount; ++j )
        {
            StateValue_s sSV;
            sSV.Default = sSV.Value = sSSTable[ 2*j + 1 ];
            n_SamplerState[i].insert( StatePair_t( sSSTable[ 2*j + 0 ], sSV ) );
        }
    }


    // Textures
    ZeroMemory( n_Texture, sizeof( n_Texture ) );
}

void DXDevice_n::RestoreStates()
{
    // TextureStageState
    {
        for ( int i = 0; i < 8; ++i )
        {
            StateSetIter_t iterChanged = n_ChangedTextureStageStatesSet[i].begin();
            while( iterChanged != n_ChangedTextureStageStatesSet[i].end() )
            {
                DWORD dwChangedState = *iterChanged;
                StateMapIter_t iter = n_TextureStageState[i].find( dwChangedState );

                assert( iter != n_TextureStageState[i].end() );
                if ( iter != n_TextureStageState[i].end() )
                {
                    StateValue_s &sSV = iter->second;
                    sSV.Value = sSV.Default;
                    g_pd3dDevice->SetTextureStageState( i, (D3DTEXTURESTAGESTATETYPE)dwChangedState, sSV.Default );
                }
                ++iterChanged;
            }
        }
    }
    // RenderStates
    {
        StateSetIter_t iterChanged = n_ChangedRenderStatesSet.begin();
        while( iterChanged != n_ChangedRenderStatesSet.end() )
        {
            DWORD dwChangedState = *iterChanged;
            StateMapIter_t iter = n_RenderStatesMap.find( dwChangedState );
            
            assert( iter != n_RenderStatesMap.end() );
            if ( iter != n_RenderStatesMap.end() )
            {
                StateValue_s &sSV = iter->second;
                sSV.Value = sSV.Default;
                g_pd3dDevice->SetRenderState( (D3DRENDERSTATETYPE)dwChangedState, sSV.Default );
            }
            ++iterChanged;
        }
        n_ChangedRenderStatesSet.clear();
    }
  // sampler states
  // ...
}

HRESULT DXDevice_n::SetTextureStageState( 
    DWORD Stage, 
    D3DTEXTURESTAGESTATETYPE Type,
    DWORD Value )
{
    assert( Stage >= 0 && Stage <= 7 );
    if ( Stage < 0 || Stage > 7 ) return E_FAIL;

    StateMapIter_t iter = n_TextureStageState[ Stage ].find( Type );
    assert( iter != n_TextureStageState[ Stage ].end() );
    if ( iter == n_TextureStageState[ Stage ].end() ) return E_FAIL;

    StateValue_s &sSV = iter->second;

    if ( sSV.Value != Value )
    {
        sSV.Value = Value;
        return g_pd3dDevice->SetTextureStageState( Stage, Type, Value );
    }
    return S_OK;
}

HRESULT DXDevice_n::SetRenderState( 
    D3DRENDERSTATETYPE State, 
    DWORD Value )
{
    StateMapIter_t iter = n_RenderStatesMap.find( State );
    if ( iter != n_RenderStatesMap.end() )
    {
        StateValue_s &sSV = iter->second;
        if ( sSV.Value != Value )
        {
            sSV.Value = Value;
        }
        else
        {
            return S_OK;
        }
    }
    return g_pd3dDevice->SetRenderState( State, Value );
}

HRESULT DXDevice_n::SetSamplerState(
  DWORD Sampler,
  D3DSAMPLERSTATETYPE Type,
  DWORD Value )
{
    if ( Sampler >= 0 && Sampler <= 7 )
    {
     // ....
    }
   // ...
}

HRESULT DXDevice_n::SetTexture(
  DWORD Sampler,
  LPDIRECT3DBASETEXTURE9 pTexture )
{
    if ( Sampler >= 0 && Sampler <= 7 )
    {
        if ( n_Texture[Sampler] == pTexture )
        {
            return S_OK;
        }
        n_Texture[Sampler] = pTexture;
    }
    return g_pd3dDevice->SetTexture( Sampler, pTexture );
}
 
Odgovor na temu

[es] :: GameDev - Razvoj Igara :: VertexBuffer problem ili sta???:S

[ Pregleda: 1508 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.