Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 17. říjen 2012, 15:59:14 Předmět: Chybny rendering z OBJ |
|
|
Pokracujem na svojom directx 9" engine" a mam problem z OBJ suborom.
Teraz pouzivam ako zdroj dat upraveny obj subor v -0.500000 -0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
f 1/1/1 2/2/2 3/3/3
f 3/3/3 2/2/2 4/4/4
f 3/13/5 4/14/6 5/15/7
f 5/15/7 4/14/6 6/16/8
f 5/21/9 6/22/10 7/23/11
f 7/23/11 6/22/10 8/24/12
f 7/17/13 8/18/14 1/19/15
f 1/19/15 8/18/14 2/20/16
f 2/5/17 8/6/18 4/7/19
f 4/7/19 8/6/18 6/8/20
f 7/9/21 1/10/22 5/11/23
f 5/11/23 1/10/22 3/12/24
Deklaracia vertexu
kód: |
struct FVF_CUSTOMVERTEX
{
D3DXVECTOR3 position;
//D3DXVECTOR3 normal;
//D3DXVECTOR2 texcoord;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ ) // | D3DFVF_NORMAL | D3DFVF_TEX1 ) |
cast kodu pomocov ktorej nacitam index buffer
kód: |
if (!strncmp(cBuffer, "f ", 2)) // Face - tvar
{
VERTEX_TEXTURE_NORMAL vtn;
int a = 0;
memset(&vtn,-1,sizeof(VERTEX_TEXTURE_NORMAL));
sscanf(cBuffer+2,"%i/%i/%i %i/%i/%i %i/%i/%i %i/%i/%i",&vtn.f_v[0],&vtn.f_vt[0],&vtn.f_vn[0],
&vtn.f_v[1],&vtn.f_vt[1],&vtn.f_vn[1],
&vtn.f_v[2],&vtn.f_vt[2],&vtn.f_vn[2],
&vtn.f_v[3],&vtn.f_vt[3],&vtn.f_vn[3]);
while(true)
{
if(vtn.f_v[a]==-1)
break;
else
{
f_v.push_back(vtn.f_v[a]-1);
//f_vtexture.push_back(vtn.f_vt[a]-1);
//f_vnormal.push_back(vtn.f_vn[a]-1);
}
a++;
}
|
Tu je kod pomocou ktoreho plnim vertex a index buffer.
kód: |
HRESULT HR;
//fill vertex buffer
HR = d3dDevice->CreateVertexBuffer(sizeof(D3DXVECTOR3)*VertexPosition.size(),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_MANAGED,&pModel.VertexPositionsBuffer,NULL);
if(HR) errMan->Error("Vertex buffer not created!");
VOID *pVertex;
HR = pModel.VertexPositionsBuffer->Lock(0,sizeof(D3DXVECTOR3)*VertexPosition.size(),&pVertex,0);
if(HR) errMan->Error("pModel.VertexPositionsBuffer->Lock(0,sizeof(D3DXVECTOR3)*VertexPosition.size(),&pVertex,0);");
memcpy(pVertex,&VertexPosition.at(0),sizeof(D3DXVECTOR3)*VertexPosition.size());
HR = pModel.VertexPositionsBuffer->Unlock();
if(HR) errMan->Error("HR = pModel.VertexPositionsBuffer->Unlock();");
pModel.nrVertices=VertexPosition.size();
// fill index buffer
HR = d3dDevice->CreateIndexBuffer(sizeof(int)*f_v.size(),0,D3DFMT_INDEX16,D3DPOOL_MANAGED,&pModel.IndexBuffer,NULL);
if(HR) errMan->Error("Index buffer not created!");
HR = pModel.IndexBuffer->Lock(0,sizeof(int)*f_v.size(),&pVertex,0);
if(HR) errMan->Error("pModel.IndexBuffer->Lock(0,sizeof(int)*f_v.size(),&pVertex,0);");
memcpy(pVertex,&f_v.at(0),sizeof(int)*f_v.size());
HR = pModel.IndexBuffer->Unlock();
pModel.nrIndices=f_v.size(); |
a tu je kod z renderovania
kód: |
hr = videoMan->vs->d3dDevice->Clear(0,NULL,D3DCLEAR_TARGET |D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,127),1.0F,0L);
hr = videoMan->vs->d3dDevice->BeginScene();
for(int b = 0; b < modelMan->mesh.size(); b++)
{
/* D3DXMatrixTranslation(&this->kamera->world,
modelMan->mesh.at(b).poloha.x,0.0f,
modelMan->mesh.at(b).poloha.z); //dolozit suradnice mesh-u
hr = videoMan->vs->d3dDevice->SetTransform(D3DTS_WORLD, &this->kamera->world);
*/ if(modelMan->mesh.at(b).MeshType==1)
{ // X mesh
for(DWORD a = 0; a < modelMan->mesh.at(b).pMeshMaterialsA.size(); a++ )
{
hr = videoMan->vs->d3dDevice->SetMaterial( &modelMan->mesh.at(b).pMeshMaterialsA.at(a));
hr = videoMan->vs->d3dDevice->SetTexture(0, modelMan->mesh.at(b).pMeshTexturesA.at(a));
if(!SHUTDOWN)hr = modelMan->mesh.at(b).dxMesh->DrawSubset(a);
}
}
else
{ // OBJ mesh
hr = videoMan->vs->d3dDevice->SetStreamSource(0,modelMan->mesh.at(b).model.VertexPositionsBuffer,0,sizeof(D3DXVECTOR3));
hr = videoMan->vs->d3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX);
hr = videoMan->vs->d3dDevice->SetIndices(modelMan->mesh.at(b).model.IndexBuffer);
if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,modelMan->mesh.at(b).model.nrVertices-1,0,modelMan->mesh.at(b).model.nrIndices/3);
//if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,modelMan->mesh.at(b).model.nrVertices);
}
}
this->DrawOverModel(0);
this->DrawTexts();
videoMan->vs->d3dDevice->EndScene();
videoMan->vs->d3dDevice->Present( NULL,NULL,NULL,NULL); |
Uz zopar dni sa neviem dopracovat ku spravnemu vysledku. Momentalne mi funkcia kresli 1 trojuholnik(viditelny) ale vypada byt zlozeny z nahodnych bodov.
Je pravdepodobne ze som zle pochopil ako sa nacitava index z obj suboru a ako ho spracovat v dx api.
Ked zapnem funkciu DrawPrimitive(D3DPT_POINTLIST,..... tak sa zobrazi aj zlozity objekt a vypada byt v poriadku.vtn.f_vt;
pModel.nrVertices=VertexPosition.size // X mesh
for |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 17. říjen 2012, 16:42:02 Předmět: |
|
|
Tak som prisiel na prvu mensiu chybu.
toto pouzivam na naplnenie vertex bufferu
kód: |
vector <D3DXVECTOR3> VertexPosition; |
asi by som mal pouzit vector <FVF_CUSTOMVERTEX> VertexPosition; |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 17. říjen 2012, 19:59:23 Předmět: |
|
|
Zhuleny napsal: |
Tak som prisiel na prvu mensiu chybu.
toto pouzivam na naplnenie vertex bufferu
kód: |
vector <D3DXVECTOR3> VertexPosition; |
asi by som mal pouzit vector <FVF_CUSTOMVERTEX> VertexPosition; |
No vzledem k tomu, že FVF_CUSTOMVERTEX ti pouze zaobaluje D3DXVECTOR3, neřekl bych, že ti to nějak pomůže.
Nevím, d3d vypadá opravdu dost ošklivě (nechci rozjíždět flamewar, ale asi už se stalo . Nemůže být problém v tom index bufferu? Máš D3DFMT_INDEX16, ale tvůj index je z intů (=32 bit). Zkus unsigned short místo int. |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 17. říjen 2012, 20:37:39 Předmět: |
|
|
mar ja sa z teba .....
DAKUJEM
Cumim na ten kod uz 4 dni, prepisal som uz vsetko mozne, a chyba je v blbom definovani index bufferu....
Vazne dakujem |
|
Návrat nahoru |
|
 |
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 18. říjen 2012, 14:21:44 Předmět: |
|
|
Nechce sa mi verit, ze si od DX nedostal ziaden error do Output Window. Ked si posunies treshold Error Outputu na polovicu, tak v tomto konkretnompripade dostanes aj hlasku, ze pchas iny pocet Bytes do bufferu nez si alokoval.
Dufam, ze mas zapnute DX Debug kniznice, bez nich je development ruska ruleta !
XNA ti v tomto pripade garantovane vyhodi exception. DX ti minimalne vyhodi HRESULT error.
Ktory ocividne nesledujes - inak by ti zistenie problemu zabralo 4 minuty a nie 4 dni  |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 19. říjen 2012, 14:44:28 Předmět: |
|
|
Mozno sa ti to nezda VladR ale hr si sledujem, mam zapnutu debug verziu dx, ale hlasil mi len ze mi nesedi pocet vertexov, alebo indexov. ale pri vytvarani bufferu nebola ziadna hlaska. Mozno este nieco nemam zapnute tak sa idem pozriet co sa da este zapnut na debug.
Teraz mam ale dalsi problem.
[img]www.penzionorava.eu/predaj/chybamodelu.png[/img]
Model mam z tejto stranky http://www.reinerstilesets.de/3d-grafiken/3d-character/ je to Guard, hned druhy. |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 19. říjen 2012, 15:12:06 Předmět: |
|
|
Nemůže to být tím, že to kreslíš jako triangle list, ale když má face 4 vrcholy, tak tam máš jenom 4 indexy místo 6ti? |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 19. říjen 2012, 15:18:44 Předmět: |
|
|
Zabudol som uviest este
kód: |
if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP,0,0,modelMan->mesh.at(b).model.nrVertices,0,modelMan->mesh.at(b).model.nrIndices-2); |
TRIANGLELIST ROBIL ovela vacsie chyby.
Ale co som pochopil tak mesh z texturov sa neda renderovat pomocov indexu, tak teraz pracujem na kode ktory mi vytvory vertexy z f parametrov. |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 19. říjen 2012, 15:35:53 Předmět: |
|
|
Zhuleny napsal: |
Zabudol som uviest este
kód: |
if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP,0,0,modelMan->mesh.at(b).model.nrVertices,0,modelMan->mesh.at(b).model.nrIndices-2); |
TRIANGLELIST ROBIL ovela vacsie chyby.
Ale co som pochopil tak mesh z texturov sa neda renderovat pomocov indexu, tak teraz pracujem na kode ktory mi vytvory vertexy z f parametrov. |
No dá se renderovat dokud tu texturu nezměníš, ale to přece nesouvisí s indexy?
A to ti funguje pokud to renderuješ jako triangle strip? To si sám děláš přeskládání na stripy? Z toho kódu to nevypadá... |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 19. říjen 2012, 15:59:12 Předmět: |
|
|
Samozrejme som to neprekladal, ale renderovat to renderovalo ale hrozne.
Toto je moj prvy pokus o nacitanie OBJ a renderovanie.
Mozes mi teoreticky vysvetlit ako mesh v ktorom je iny pocet uv koordinatov ako vertexov renderovat cez drawindexedprimitive? nenasiel som na internete doposial ziadne vysvetlenie ak oto urobit.
Teraz som pokusne nacital vertexy a texture coords, a potom som vytvoril nove pole do ktoreho som ulozil udaje z indexu vo f riadkoch. vysledok o5 nic moc :/
Render prebieha pomocov drawprimitive a trianglestrip.
edit: Este chcem povedat ze kocku ktora je uvedena v prvom poste, mi uz renderovalo bezchybne. |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 19. říjen 2012, 16:10:42 Předmět: |
|
|
Zhuleny napsal: |
Mozes mi teoreticky vysvetlit ako mesh v ktorom je iny pocet uv koordinatov ako vertexov renderovat cez drawindexedprimitive? nenasiel som na internete doposial ziadne vysvetlenie ak oto urobit.
|
No pokud vím, tak tohle ani nejde. Takže si to budeš muset rozbalit tak, aby každý vertex měl u sebe i uv.
EDIT: opět to ale nesouvisí s indexy
Zhuleny napsal: |
Teraz som pokusne nacital vertexy a texture coords, a potom som vytvoril nove pole do ktoreho som ulozil udaje z indexu vo f riadkoch. vysledok o5 nic moc :/
Render prebieha pomocov drawprimitive a trianglestrip.
edit: Este chcem povedat ze kocku ktora je uvedena v prvom poste, mi uz renderovalo bezchybne. |
Můžeš postnout nový kód? |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 19. říjen 2012, 16:33:31 Předmět: |
|
|
toto je trieda pomocov ktorej sa pokusam nacitat obj
kód: |
// ver 0.2
#include <vector>
#include <stdio.h>
using namespace std;
struct MODEL
{
IDirect3DVertexBuffer9 *VertexPositionsBuffer; // Models vertex buffer
IDirect3DIndexBuffer9 *IndexBuffer; // Models index buffer
unsigned int nrVertices;
unsigned int nrIndices;
IDirect3DVertexBuffer9 *testVertexBuffer; // Models vertex buffer
unsigned int testnrVertices;
//IDirect3DIndexBuffer9 *testIndexBuffer; // Models index buffer
};
struct FVF_CUSTOMVERTEX
{
D3DXVECTOR3 position;
// D3DXVECTOR3 normal;
D3DXVECTOR2 texcoord;
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_TEX1)// | D3DFVF_NORMAL | D3DFVF_TEX1 )
struct VERTEX_TEXTURE_NORMAL
{
int f_v[5];
int f_vt[5];
int f_vn[5];
};
class CObjMeshLoader
{
public:
CObjMeshLoader(char *cName,LPDIRECT3DDEVICE9 Device,MODEL& pModel);
~CObjMeshLoader();
private:
void FillVertexPositionBuffer(D3DXVECTOR3 dxv){VertexPosition.push_back(dxv);};
void FillVertexNormalBuffer(D3DXVECTOR3 dxv){VertexNormal.push_back(dxv);};
void FillTextureCoordinateBuff(D3DXVECTOR2 tc){TextureCoordination.push_back(tc);};
vector <D3DXVECTOR3> VertexPosition;
vector <D3DXVECTOR2> TextureCoordination;
vector <D3DXVECTOR3> VertexNormal;
vector <int> f_v;
vector <int> f_vtexture;
vector <int> f_vnormal;
char MaterialLib[20];
LPDIRECT3DDEVICE9 d3dDevice;
vector <FVF_CUSTOMVERTEX> Vertex;
};
CObjMeshLoader::CObjMeshLoader(char *cName,LPDIRECT3DDEVICE9 Device,MODEL& pModel)
{
errMan->Oblast("CObjMeshLoader::CObjMeshLoader(char *cName,LPDIRECT3DDEVICE9 Device,MODEL& pModel)");
d3dDevice = Device;
char cBuffer[256];
FILE *subor = fopen(cName, "r");
if (subor)
{
while (fgets(cBuffer, 256, subor))
{
if (!strncmp(cBuffer, "v ", 2)) // Geometric vertices - geometrické vrcholy
{
float x,y,z;
sscanf(cBuffer+2, "%f %f %f", &x, &y, &z);
this->FillVertexPositionBuffer(D3DXVECTOR3(x,y,z));
}
if (!strncmp(cBuffer, "vt ", 2)) // Texture vertices - vrcholy textúry
{
float u,v;
sscanf(cBuffer+2,"%f %f",&u,&v);
this->FillTextureCoordinateBuff(D3DXVECTOR2(u,v));
}
if (!strncmp(cBuffer, "vp ", 2)) // Parameter space vertices -
{
}
if (!strncmp(cBuffer, "vn ", 2)) // Vertex normals -
{
float x,y,z;
sscanf(cBuffer+2, "%f %f %f", &x,&y,&z);
this->FillVertexNormalBuffer(D3DXVECTOR3(x,y,z));
}
if (!strncmp(cBuffer, "f ", 2)) // Face - tvar
{
VERTEX_TEXTURE_NORMAL vtn;
int a = 0;
memset(&vtn,-1,sizeof(VERTEX_TEXTURE_NORMAL));
/*
Test for numbers to read and define what kind of f format is in use
//TODO optimize code
*/
int test = sscanf(cBuffer+2,"%i/%i/%i",&vtn.f_v[0],&vtn.f_vt[0],&vtn.f_vn[0]);
if(test==2)
{ //f v/vt v/vt v/vt v/vt
sscanf(cBuffer+2, "%i/%i %i/%i %i/%i %i/%i",&vtn.f_v[0], &vtn.f_vt[0],
&vtn.f_v[1], &vtn.f_vt[1],
&vtn.f_v[2], &vtn.f_vt[2],
&vtn.f_v[3], &vtn.f_vt[3]);
while(true)
{
if(vtn.f_v[a]==-1)
break;
else
{
f_v.push_back(vtn.f_v[a]-1);
f_vtexture.push_back(vtn.f_vt[a]-1);
// pokus
FVF_CUSTOMVERTEX vertx;
vertx.position=VertexPosition.at(vtn.f_v[a]-1);
vertx.texcoord=TextureCoordination.at(vtn.f_vt[a]-1);
Vertex.push_back(vertx);
}
a++;
}
}
if(test==1)
{
int test2 = sscanf(cBuffer+2,"%i %i %i %i",&vtn.f_v[0], &vtn.f_v[1],&vtn.f_v[2],&vtn.f_v[3]);
if(test2==1)
{//f v//vn v//vn v//vn v//vn
sscanf(cBuffer+2, "%i//%i %i//%i %i//%i %i//%i ",&vtn.f_v[0],&vtn.f_vn[0],
&vtn.f_v[1],&vtn.f_vn[1],
&vtn.f_v[2],&vtn.f_vn[2],
&vtn.f_v[3],&vtn.f_vn[3]);
while(true)
{
if(vtn.f_v[a]==-1)
break;
else
{
f_v.push_back(vtn.f_v[a]-1);
f_vnormal.push_back(vtn.f_vn[a]-1);
}
a++;
}
}
else
while(true)
{ //f v v v v
if(vtn.f_v[a]==-1) break;
else
{
f_v.push_back(vtn.f_v[a]-1);
}
a++;
}
}
if(test==3)
{
//f v/vt/vn v/vt/vn v/vt/vn v/vt/vn
sscanf(cBuffer+2,"%i/%i/%i %i/%i/%i %i/%i/%i %i/%i/%i",&vtn.f_v[0],&vtn.f_vt[0],&vtn.f_vn[0],
&vtn.f_v[1],&vtn.f_vt[1],&vtn.f_vn[1],
&vtn.f_v[2],&vtn.f_vt[2],&vtn.f_vn[2],
&vtn.f_v[3],&vtn.f_vt[3],&vtn.f_vn[3]);
while(true)
{
if(vtn.f_v[a]==-1)
break;
else
{
f_v.push_back(vtn.f_v[a]-1);
f_vtexture.push_back(vtn.f_vt[a]-1);
f_vnormal.push_back(vtn.f_vn[a]-1);
}
a++;
}
}
}
if (!strncmp(cBuffer, "mtllib ",6))
{
sscanf(cBuffer+6,"%s",&MaterialLib);
}
}
fclose(subor);
HRESULT HR;
HR = d3dDevice->CreateVertexBuffer(sizeof(FVF_CUSTOMVERTEX)*Vertex.size(),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_MANAGED,&pModel.testVertexBuffer,NULL);
VOID *pVertex;
HR = pModel.testVertexBuffer->Lock(0,sizeof(FVF_CUSTOMVERTEX)*Vertex.size(),&pVertex,0);
memcpy(pVertex,&Vertex.at(0),sizeof(FVF_CUSTOMVERTEX)*Vertex.size());
HR = pModel.testVertexBuffer->Unlock();
pModel.testnrVertices=Vertex.size();
//fill vertex buffer
/*
HR = d3dDevice->CreateVertexBuffer(sizeof(FVF_CUSTOMVERTEX)*VertexPosition.size(),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_MANAGED,&pModel.VertexPositionsBuffer,NULL);
if(HR) errMan->Error("Vertex buffer not created!");
VOID *pVertex;
HR = pModel.VertexPositionsBuffer->Lock(0,sizeof(D3DXVECTOR3)*VertexPosition.size(),&pVertex,0);
if(HR) errMan->Error("pModel.VertexPositionsBuffer->Lock(0,sizeof(D3DXVECTOR3)*VertexPosition.size(),&pVertex,0);");
memcpy(pVertex,&VertexPosition.at(0),sizeof(D3DXVECTOR3)*VertexPosition.size());
HR = pModel.VertexPositionsBuffer->Unlock();
if(HR) errMan->Error("HR = pModel.VertexPositionsBuffer->Unlock();");
pModel.nrVertices=VertexPosition.size();
*/
// fill index buffer
HR = d3dDevice->CreateIndexBuffer(sizeof(int)*f_v.size(),0,D3DFMT_INDEX32,D3DPOOL_MANAGED,&pModel.IndexBuffer,NULL);
if(HR) errMan->Error("Index buffer not created!");
HR = pModel.IndexBuffer->Lock(0,sizeof(int)*f_v.size(),&pVertex,0);
if(HR) errMan->Error("pModel.IndexBuffer->Lock(0,sizeof(int)*f_v.size(),&pVertex,0);");
memcpy(pVertex,&f_v.at(0),sizeof(int)*f_v.size());
HR = pModel.IndexBuffer->Unlock();
pModel.nrIndices=f_v.size();
//this->ComputeFaces();
}
}
CObjMeshLoader::~CObjMeshLoader()
{
}
|
no a renderovanie
kód: |
{ // OBJ mesh
//hr = videoMan->vs->d3dDevice->SetStreamSource(0,modelMan->mesh.at(b).model.VertexPositionsBuffer,0,sizeof(D3DXVECTOR3));
hr = videoMan->vs->d3dDevice->SetStreamSource(0,modelMan->mesh.at(b).model.testVertexBuffer,0,sizeof(FVF_CUSTOMVERTEX));
hr = videoMan->vs->d3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX);
hr = videoMan->vs->d3dDevice->SetIndices(modelMan->mesh.at(b).model.IndexBuffer);
hr = videoMan->vs->d3dDevice->SetTexture(0, modelMan->mesh.at(b).pMeshTexturesA.at(0));
//if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP,0,0,modelMan->mesh.at(b).model.nrVertices,0,modelMan->mesh.at(b).model.nrIndices-2);
if(!SHUTDOWN)hr = videoMan->vs->d3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,modelMan->mesh.at(b).model.testnrVertices-2);
} |
|
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 19. říjen 2012, 18:02:24 Předmět: |
|
|
Nemůžu si pomoct ale to přece nemůže fungovat
Zkus se vrátit k index bufferu, ale udělej ho 16-bitový. Takhle ti to aspoň pojede všude.
Udělal bych to takhle:
přidej relační operátor < do FVF_CUSTOMVERTEX
udělej si mapu FVF_CUSTOMVERTEX na size_t
a vector FVF_CUSTOMVERTEX
při načítání faců se nejdřív podívej do mapy, a když tam bude, tak ulož second jako index
když ne, vlož to do mapy insert( FVF_CUSTOMVERTEX, verts.size() ) a tyhle indexy pro face si ulož někam lokálně, třeba do pole vi[4]
pak to rozhoď na trojůhelníky:
kód: |
for (int i = 1; i<num_face_verts-1; i++)
{
indices.push( vi[0] );
indices.push( vi[i] );
indices.push( vi[i+1] );
}
|
nebo tak něco.
No a na závěr to vyrenderuješ přes drawindexedprimitive.
Taky by bylo dobré si to rozhodit do skupin podle materiálu a ty budeš renderovat, skupina bude mít texturu, startovní pozici v index bufferu a počet vertexů (nebo primitiv? - nevím už přesně jak to je v d3d), pokud tedy budeš pracovat s meshi s víc materiály, ale to bych asi nechal až na závěr.
Snad to pomůže. |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 20. říjen 2012, 15:25:30 Předmět: |
|
|
Vdaka Mar.
Za pomoci tvojich rad som dnes vyrenderoval postavicku a uz ma aj na sebe texturu. Bohuzial zatial to robim bez index bufferu.
www.penzionorava.eu/predaj/guardok.png
No a teraz sa pustit a spojazdnit to cez index buffer. |
|
Návrat nahoru |
|
 |
mar
Založen: 16. 06. 2012 Příspěvky: 610
|
Zaslal: 20. říjen 2012, 15:56:23 Předmět: |
|
|
Zhuleny napsal: |
Vdaka Mar.
Za pomoci tvojich rad som dnes vyrenderoval postavicku a uz ma aj na sebe texturu. Bohuzial zatial to robim bez index bufferu.
www.penzionorava.eu/predaj/guardok.png
No a teraz sa pustit a spojazdnit to cez index buffer. |
Pěkné, gratuluji Jestli to chceš optimalizovat, chtělo by to fps counter (nebo aspoň vykreslovat frame time v něčem rozumném - ms?)
A můžes zkusit i mipmapping, aspoň směrové světlo (vypadá to unlit - pletu se?). |
|
Návrat nahoru |
|
 |
|