Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - MofC

Strony: 1 [2] 3
16
DirectX / Odp: Zła kolejność rysowania
« dnia: Marzec 03, 2014, 15:12:52 »
Dobra, mój błąd, zapomniałem o tym napisać, przepraszam. Wszystko rysuje płasko tzn. w tej samej odległości od kamery, z jednakową wartością współrzędnej z. Używam projekcji ortogonalnej(chyba tak to się nazywa po polsku)
XMMatrixOrthographicOffCenterLH( 0.0f, Width, 0.0f, Height, 0.1f, 100.0f );
I czytałem w tutkach że przy rysowaniu na płaszczyźnie bufor głębokości powinien być wyłączony i że wtedy powinno się rysować według kolejności umieszczania w buforze. Jest jeszcze tak że gdy wywołuje metodę DrawIndexed osobno dla każdego obiektu to kolejność jest poprawna ale tylko w tedy gdy czyszczę bufor głębokości na końcu całego rysowania.

EDIT:
Problem rozwiązany, brakowało wywołania funkcji OMSetDepthStencilState :/

17
DirectX / Odp: Zła kolejność rysowania
« dnia: Marzec 02, 2014, 21:31:18 »
Mam cztery płaskie obiekty rysowane( dodawane do bufora) po kolei na ekranie od lewej do prawej. Metoda DrawIndexed wywoływana jest na końcu. Gdybym to Ja je rysował na kartce to ten najbardziej z prawej byłby na samym wierzchu, natomiast w programie jest odwrotnie. Nie rozumiem dlaczego DirectX rysuje je odwrotnie i dlaczego rysuje poprawnie jak sknocę  depthBufferDesc.

18
DirectX / Zła kolejność rysowania
« dnia: Marzec 02, 2014, 20:28:40 »
Cześć, mam kolejny problem z DirectXem. Polega on na tym że DirectX rysuje moje prymitywy w kolejności odwrotnej do kolejności wypełniania bufora. Wywołując metodę DrawIndexed dla każdego obiektu osobno kolejność jest poprawna tj. obiekty rysowane wcześniej są zasłaniane przez te rysowanego później. Bufor głębokości jest wyłączony. Zauważyłem że jeżeli poprzestawiam coś w depthBufferDesc,  metoda CreateDepthStencilView zwraca błąd ale program działa dalej i kolejność rysowania jest poprawna.

DepthBufor:
D3D11_TEXTURE2D_DESC depthBufferDesc;
ZeroMemory(&depthBufferDesc, sizeof(depthBufferDesc));

// Set up the description of the depth buffer.
// Set up the description of the depth buffer.
depthBufferDesc.Width = Width;
depthBufferDesc.Height = Height;
depthBufferDesc.MipLevels = 1;
depthBufferDesc.ArraySize = 0;
depthBufferDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
depthBufferDesc.SampleDesc.Count = 1;
depthBufferDesc.SampleDesc.Quality = 0;
depthBufferDesc.Usage = D3D11_USAGE_DEFAULT;
depthBufferDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
depthBufferDesc.CPUAccessFlags = 0;
depthBufferDesc.MiscFlags = 0;

// Create the texture for the depth buffer using the filled out description.
d3d11Device->CreateTexture2D(&depthBufferDesc, NULL, &depthStencilBuffer);


//Describe our Depth/Stencil Buffer
D3D11_DEPTH_STENCIL_DESC depthStencilDesc;

depthStencilDesc.DepthEnable = false;
depthStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
depthStencilDesc.DepthFunc = D3D11_COMPARISON_LESS;
depthStencilDesc.StencilEnable = false;
depthStencilDesc.StencilReadMask = 0xFF;
depthStencilDesc.StencilWriteMask = 0xFF;
depthStencilDesc.FrontFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilDepthFailOp = D3D11_STENCIL_OP_INCR;
depthStencilDesc.FrontFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.FrontFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
depthStencilDesc.BackFace.StencilFailOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilDepthFailOp = D3D11_STENCIL_OP_DECR;
depthStencilDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;

hr = d3d11Device->CreateDepthStencilState(&depthStencilDesc, &depthStencilState);
CheckError(hr,"CreateDepthStencilState");

hr = d3d11Device->CreateDepthStencilView(depthStencilBuffer, NULL, &depthStencilView);
CheckError(hr,"CreateDepthStencilView");

//Create our Render Target
hr = d3d11Device->CreateRenderTargetView( BackBuffer, NULL, &renderTargetView );
CheckError(hr,"CreateRenderTargetView");


//Set our Render Target
d3d11DevCon->OMSetRenderTargets( 1, &renderTargetView, depthStencilView );

Proszę o pomoc

19
DirectX / Odp: Problem z rysowanie quadów
« dnia: Marzec 02, 2014, 16:47:27 »
Po wielu godzinach spędzonych nad kompilatorem i przeczesywaniu internetu w poszukiwaniu kodów z przykładami DirectX, znalazłem taki który mi pomógł. Długo mi to zajęło bo okazuje się że większość osób przy rysowaniu spriteów używa statycznego bufora.

Po pierwsze, nadawałem złe wartości Indeksom. Powinno być:
QuadIndices[0] = 0;
QuadIndices[1] = 1;
QuadIndices[2] = 2;
QuadIndices[3] = 0;
QuadIndices[4] = 2;
QuadIndices[5] = 3;

QuadIndices[6] = 4;
QuadIndices[7] = 5;
QuadIndices[8] = 6;
QuadIndices[9] = 4;
QuadIndices[10] = 6;
QuadIndices[11] = 7;

Po drugie, w funkcji Memcpy trzeba przesunąć miejsce docelowe do wolnej pozycji w buforze. Z dokumentacji
msdn zrozumiałem że DirectX sam to robi, no ale tak nie jest.

D3D11_MAPPED_SUBRESOURCE resource;
ZeroMemory(&resource,sizeof(resource));

hr= pd3d11DevCon->Map(VertBuffer, 0, MapType, 0, &resource);
CheckError(hr,"Map");

char* bufferData = static_cast<char*>(resource.pData);
memcpy(bufferData+QuadCount*sizeof(quad), &quad, sizeof(quad));
    pd3d11DevCon->Unmap(VertBuffer, 0);

Teraz wszystko działa tak jak być powinno :D

20
DirectX / Problem z rysowanie quadów
« dnia: Marzec 01, 2014, 15:54:41 »
Cześć, postanowiłem sobie napisać prosty moduł do generowania grafiki 2D w DirectX 11, używając  quadów. Wzorowałem się na tym tutorialu http://www.braynzarsoft.net/index.php?p=DX11Lessons z tym że w nim do rysowania prymitywów używany jest statyczny bufor wierzchołków, natomiast Ja używam dynamicznego. Mam zamiar zrobić tak jak w tutorialu Xionahttp://xion.org.pl/productions/texts/coding/game-programming/gfx2d/ tzn. skopiować kilka quadów mających przypisaną tą samą teksturę do bufora i dopiero gdy pojawi się obrazek z inną teksturą, rysować. Na razie umieszczam w buforze dwa obrazki i chce je narysować. I pojawia się problem taki że pierwszy obrazek się nie rysuje :(



Trochę z metody inicjalizującej


Init()
{
        //jakiś kod

QuadIndices[0] = 0;
QuadIndices[1] = 1;
QuadIndices[2] = 2;
QuadIndices[3] = 0;
QuadIndices[4] = 2;
QuadIndices[5] = 3;

QuadIndices[6] = 0;
QuadIndices[7] = 1;
QuadIndices[8] = 2;
QuadIndices[9] = 0;
QuadIndices[10] = 2;
QuadIndices[11] = 3;

inuseTexture=0;
QuadCount=0;

MapType=D3D11_MAP_WRITE_DISCARD;

        D3D11_BUFFER_DESC indexBufferDesc;
ZeroMemory( &indexBufferDesc, sizeof(indexBufferDesc) );

indexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
indexBufferDesc.ByteWidth = sizeof(DWORD) * 12;
indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
indexBufferDesc.CPUAccessFlags = 0;
indexBufferDesc.MiscFlags = 0;

D3D11_SUBRESOURCE_DATA iinitData;

iinitData.pSysMem = QuadIndices;

hr = pd3d11Device->CreateBuffer(&indexBufferDesc, &iinitData, &IndexBuffer);
CheckError(hr,"Create indexBuffer");

pd3d11DevCon->IASetIndexBuffer( IndexBuffer, DXGI_FORMAT_R32_UINT, 0);

//BUFOR WIERZCHOLKOW


ZeroMemory( &vertexBufferDesc, sizeof(vertexBufferDesc) );

vertexBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
vertexBufferDesc.ByteWidth = sizeof( Vertex ) * 40;
vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
vertexBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
vertexBufferDesc.MiscFlags = 0;

hr = pd3d11Device->CreateBuffer( &vertexBufferDesc, 0, &VertBuffer);
CheckError(hr,"Create vertexBuffer");

        //jakis kod

Metoda dodająca obrazek do bufora
Vertex quad[4];

quad[0]=Vertex( posx, posy-image->texHeight,0.5f, 0.0f, 1.0f);
quad[1]=Vertex( posx, posy,0.5f, 0.0f, 0.0f);
quad[2]=Vertex(  posx + image->texWidth,posy, 0.5f, 1.0f, 0.0f);
quad[3]=Vertex(  posx + image->texWidth, posy-image->texHeight,0.5f, 1.0f, 1.0f);

D3D11_MAPPED_SUBRESOURCE resource;
ZeroMemory(&resource,sizeof(resource));

hr= pd3d11DevCon->Map(VertBuffer, 0, MapType, 0, &resource);
CheckError(hr,"Map");
memcpy(resource.pData, &quad, sizeof(quad));
    pd3d11DevCon->Unmap(VertBuffer, 0);

inuseTexture = image->Texture;

QuadCount++;
MapType=D3D11_MAP_WRITE_NO_OVERWRITE;

Metoda rysująca
UINT stride = sizeof( Vertex );
UINT offset = 0;
pd3d11DevCon->IASetVertexBuffers( 0, 1, &VertBuffer, &stride, &offset );


float blendFactor[] = {0.5f, 0.5f, 0.5f, 1.0f};

//Set the default blend state (no blending) for opaque objects
pd3d11DevCon->OMSetBlendState(0, 0, 0xffffffff);

//Create the Input Layout
hr = pd3d11Device->CreateInputLayout( layout, numElements, VertexShader->ReturnVSBuffer()->GetBufferPointer(), VertexShader->ReturnVSBuffer()->GetBufferSize(), &VertLayout );
CheckError(hr,"CreateInputLayout");

//set Renderstate
pd3d11DevCon->RSSetState(WireFrame);

//Set the Input Layout
pd3d11DevCon->IASetInputLayout( VertLayout );

//Set Primitive Topology
pd3d11DevCon->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );

//Clear our backbuffer to the updated color
D3DXCOLOR bgColor( red, green, blue, 1.0f );

World = XMMatrixIdentity();

WVP = World * camView * camProjection;

cbPerObj.WVP = XMMatrixTranspose(WVP);

pd3d11DevCon->UpdateSubresource( cbPerObjectBuffer, 0, NULL, &cbPerObj, 0, 0 );

pd3d11DevCon->VSSetConstantBuffers( 0, 1, &cbPerObjectBuffer );

pd3d11DevCon->PSSetShaderResources( 0, 1, &inuseTexture );
pd3d11DevCon->PSSetSamplers( 0, 1, &CubesTexSamplerState );

pd3d11DevCon->ClearRenderTargetView(prenderTargetView, bgColor);
pd3d11DevCon->ClearDepthStencilView(pdepthStencilView, D3D11_CLEAR_DEPTH|D3D11_CLEAR_STENCIL, 1.0f, 0);

pd3d11DevCon->DrawIndexed( 6*QuadCount , 0, 0 );
//Present the backbuffer to the screen
pSwapChain->Present(0, 0);

MapType=D3D11_MAP_WRITE_DISCARD;
QuadCount=0;
inuseTexture = 0;

Bardzo proszę o pomoc

21
Projekty zaawansowane / Odp: Szybki test na dziś
« dnia: Listopad 06, 2013, 13:14:13 »
Czy serwer będzie jeszcze kiedyś dostępny ?

22
Konfigurator / Jednostka centralna za 1000zł
« dnia: Październik 11, 2012, 21:27:44 »
Chciałbym zapytać osób które dobrze znają się na składaniu komputerów co sądzą o moim zestawie i czy mogą zaproponować coś lepszego . Ma to być zestaw za około 1000 zł, bez obudowy, dysku twardego i odtwarzaczy.
 
Procesor:              AMD Athlon II x4 651
Płyta główna:       Gigabyte GA-A75-D3H
Karta graficzna :   GAINWARD GeForce GTS450 1024MB DDR5
Pamięć:                 2x 2GB DDR3 1600MHz np. Kingston albo GoodRAM
Zasilacz:               450W np. Cooler Master albo ChiefTec
 
Więcej szczegółów:
Procesor-http://www.agito.pl/procesor-amd-athlon-ii-x4-651-fm1-box-81-543533.html?utm_content=543533&utm_source=skapiec.pl&utm_medium=Feed&utm_campaign=wszystkie
Płyta główna-http://www.gigabyte.pl/products/page/mb/ga-a75-d3hrev_10
Karta graficzna-http://www.gainward.com/main/vgapro.php?id=409

23
DirectX / Odp: DX9 Index Buffer
« dnia: Maj 30, 2012, 12:53:29 »
renderer->CreateVertexBuffer(sizeof(swiat),0,D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &buforw,NULL);
renderer->CreateIndexBuffer(sizeof(kwadrat1),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&bufori1,NULL);
renderer->CreateIndexBuffer(sizeof(kwadrat2),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&bufori2,NULL);

VOID* pVertices;

buforw->Lock(0,sizeof(swiat),(void**)&pVertices,NULL);
memcpy(pVertices,swiat,sizeof(swiat));
buforw->Unlock();

bufori1->Lock(0,sizeof(kwadrat1),(void**)&pVertices,NULL);
memcpy(pVertices,kwadrat1,sizeof(kwadrat1));
bufori1->Unlock();

bufori2->Lock(0,sizeof(kwadrat2),(void**)pVertices,NULL);
memcpy(pVertices,kwadrat2,sizeof(kwadrat2));
bufori2->Unlock();

24
DirectX / Odp: DX9 Index Buffer
« dnia: Maj 30, 2012, 11:17:50 »
Backface culling jest już wyłączony a po wrzuceniu do jednego bufora indeksów wszystko działa tak jak powinno.

25
DirectX / DX9 Index Buffer
« dnia: Maj 29, 2012, 14:24:15 »
Więc tak, mam bufor wierzchołków w którym mam zadeklarowane 8 wierzchołków

CUSTOMVERTEX swiat[]=
{

{ 0.0f, 0.0f, 0.0f, 0xff00ff00, }, //0
{ 0.0f, 0.0f, 5.5f, 0xff00ff00, }, //1
{ 5.0f, 0.0f, 0.0f, 0xff00ff00, }, //2
{ 5.0f, 0.0f, 5.0f, 0xff00ff00, }, //3


{ 1.0f, 0.0f, 1.0f, 0xff0000ff, }, //4
{ 1.0f, 0.4f, 1.0f, 0xff0000ff, }, //5
{ 1.0f, 0.0f, 0.5f, 0xff0000ff, }, //6
{ 1.0f, 0.4f, 0.5f, 0xff0000ff, }  //7


};

Następnie tworze dwa bufory indeksów w których deklaruje dwa kwadraty (pionowy i poziomy)

WORD kwadrat1[]={0,1,2, 3,2,1};
WORD kwadrat2[]={4,5,6, 5,7,6};

I renderuje scene

renderer->Clear( 0, NULL,  D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,50), 1.0f, 0 );
renderer->BeginScene();
renderer->SetStreamSource(0,buforw,0,sizeof(CUSTOMVERTEX));
renderer->SetFVF( D3DFVF_CUSTOMVERTEX );
renderer->SetIndices(kwadrat1);
renderer->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,0,2);


renderer->SetIndices(kwadrat2);
renderer->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,4,4,0,2);



renderer->EndScene();
renderer->Present( NULL, NULL, NULL, NULL );

i problem w tym że widać tylko ten pionowy, a gdy skasuje rysowanie go to tamten(poziomy) widać z powrotem.
I chciałbym jeszcze zapytać czy takie podejście z jednym Vertex Buffer(dla całej sceny) i Index Buffer'ami dla każdego obiektu jest dobrym rozwiązaniem?

26
Sprzedam / Odp: [sprzedam] 3 książki o programowaniu gier
« dnia: Grudzień 23, 2011, 15:11:29 »
Biorę Perełki Tom 1, idę wpłacić kase

27
Szkółka / Odp: Particle
« dnia: Październik 12, 2011, 16:02:08 »
Chodzi mi o blending takie coś jak jest np. w OpenGL czy DirectX jest też w SFML (sf::bledn::mode(Alpha,Add,Multiply,None))

28
Szkółka / Particle
« dnia: Październik 12, 2011, 13:49:44 »
Chcę napisac sobie system cząsteczkowy w SDL i  chce sie dowiedzieć czy jest jakis prosty sposób na mieszanie kolorów sprite'ów przy użyciu tej biblioteki?

29
Matematyka i fizyka / Odp: zderzenia dwóch kul
« dnia: Sierpień 17, 2011, 14:54:18 »
Chodzi mi o odbicia wielokątów z obrotem.

30
Matematyka i fizyka / Odp: zderzenia dwóch kul
« dnia: Sierpień 15, 2011, 22:08:08 »
A co do http://chrishecker.com/images/e/e7/Gdmphys3.pdf to mógłby mi ktoś wytłumaczyć jak to liczyć bo próbuje sam coś z tego zrozumieć i mi nie wychodzi.

Strony: 1 [2] 3