Jump to content
  • Advertisement
Sign in to follow this  
BSOD

Vertex format problem

This topic is 2416 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

[color=#434343][font=helvetica, arial, verdana,]I read a memory block of [/font]vertex positions[color=#434343][font=helvetica, arial, verdana,] from an file but they're in this sequance [/font]X Z Y[color=#434343][font=helvetica, arial, verdana,] and the FVF format is D3DFVF_[/font]XYZ[color=#434343][font=helvetica, arial, verdana,] - what vertex format to use to fix this problem or maybe changing the coordinate axes?[/font]

Share this post


Link to post
Share on other sites
Advertisement
Hi,

There is no such vertex format as XZY. Either change the component ordering at load time to XYZ or use a swizzle in the vertex shader.

Best regards!

Share this post


Link to post
Share on other sites
What is this [color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]

[background=rgb(250, 251, 252)]swizzle - I mean can you give me an example with a function call?[/background]

[/font]


Best regards!


[color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif]

[background=rgb(250, 251, 252)]Thanks![/background]

[/font]

Share this post


Link to post
Share on other sites
Can't you just reprocess your vertex file to rearrange the vertices in the coordinate system expected by DX9? Most likely it only involves importing and exporting the file through any good 3D design package or you could even write your own script if the format isn't too complicated. Edited by Bacterius

Share this post


Link to post
Share on other sites
Lol here what I'll read this summer about -

[background=rgb(250, 251, 252)]shading. But for now here is what I do: I use a block of structures to store the vertex from the file and then I put it into the vertex buffer. Here is the code:[/background]





//The structure where I store the vertex
struct CUSTOMVERTEX {
CUSTOMVERTEX();
FLOAT X, Z, Y; FLOAT U, V, U1, V1; DWORD COLOR, COLOR1, COLOR2;
};

//The vertex format declaration

D3DVERTEXELEMENT9 dwDecl3[] =
{
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_POSITION, 0},
{0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_TEXCOORD, 0},
{0, 20, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_TEXCOORD, 1},
{0, 28, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_FOG, 0},
{0, 32, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_COLOR, 1},
{0, 36, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_COLOR, 0},
D3DDECL_END()
};

//The function creating the vertex buffer
void Room::CreateBuffers(unsigned long ptr, Map* BaseClass) {
//Some code........

CUSTOMVERTEX* vertex;
vertex=new CUSTOMVERTEX[NumVertices];

GetF(0, ptr+56+BaseClass->MapOffset, sizeof(CUSTOMVERTEX)*NumVertices, &vertex[0]); //Load the vertex positions from the file

//Create the buffer


d3ddev->CreateVertexBuffer(NumVertices*sizeof(CUSTOMVERTEX),
0,
0,
D3DPOOL_MANAGED,
&v_buffer,
NULL);

VOID* pVoid; // a void pointer

// lock t_buffer and load the vertices into it
if(v_buffer) {
v_buffer->Lock(0, 0, (void**)&pVoid, 0);
memcpy(pVoid, vertex, NumVertices*sizeof(CUSTOMVERTEX));
v_buffer->Unlock();
delete[] vertex;
}
else
vertex=NULL;

d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));
}




Any advice about this code. And I can't change the format because I don't made it - it's from a game. Edited by BSOD

Share this post


Link to post
Share on other sites
After the part

"GetF(0, ptr+56+BaseClass->MapOffset, sizeof(CUSTOMVERTEX)*NumVertices, &vertex[0]);"

Can't you just iterate through your vertices and swap the z and y components?

Such as

for(int i=0;i<NumVertices;++i)
{
std::swap(vertex.z,vertex.y);
}

Best regards! Edited by kauna

Share this post


Link to post
Share on other sites
Hmm, actually this work and the program works fast. Because I was think such of loop will slow it down and that's way I was searching for some tricks. Anyway thanks for the advice.

Share this post


Link to post
Share on other sites

Hmm, actually this work and the program works fast. Because I was think such of loop will slow it down and that's way I was searching for some tricks. Anyway thanks for the advice.


I assume that you run that loop only when you are loading your assets. Since the code isn't run while your main loop is executing, it doesn't affect the performance of your program at all.

You shouldn't be afraid of writing a piece of code which does the thing that you need it to do (especially if it is simple loop). After writing the code you may find out (by using facts from profilers and user experience etc) that the code needs to be improved performance wise.

Best regards!

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!