Sign in to follow this  

Writing vertices to my own file format

This topic is 1329 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

I am abit stuck on how to read vertices from a binary file,here is my code,the result is in the picture i have added

 

[code]

struct CUSTOMVERTEX

{

FLOAT X, Y, Z;

D3DVECTOR NORMAL;

FLOAT U, V;

};

 

// create the vertices using the CUSTOMVERTEX struct
    CUSTOMVERTEX vertices[] =
    {
        { -3.0f, -3.0f, 3.0f,  0.0f, 0.0f, 1.0f,  0.0f, 0.0f, },    // side 1
        { 3.0f, -3.0f, 3.0f,  0.0f, 0.0f, 1.0f,  1.0f, 0.0f, },
        { -3.0f, 3.0f, 3.0f,  0.0f, 0.0f, 1.0f,  0.0f, 1.0f, },
        { 3.0f, 3.0f, 3.0f,  0.0f, 0.0f, 1.0f,  1.0f, 1.0f, },
 
        { -3.0f, -3.0f, -3.0f,  0.0f, 0.0f, -1.0f,  0.0f, 0.0f, },    // side 2
        { -3.0f, 3.0f, -3.0f,  0.0f, 0.0f, -1.0f,  0.0f, 1.0f, },
        { 3.0f, -3.0f, -3.0f,  0.0f, 0.0f, -1.0f,  1.0f, 0.0f, },
        { 3.0f, 3.0f, -3.0f,  0.0f, 0.0f, -1.0f,  1.0f, 1.0f, },
 
        { -3.0f, 3.0f, -3.0f,  0.0f, 1.0f, 0.0f,  0.0f, 0.0f, },    // side 3
        { -3.0f, 3.0f, 3.0f,  0.0f, 1.0f, 0.0f,  0.0f, 1.0f, },
        { 3.0f, 3.0f, -3.0f,  0.0f, 1.0f, 0.0f,  1.0f, 0.0f, },
        { 3.0f, 3.0f, 3.0f,  0.0f, 1.0f, 0.0f,  1.0f, 1.0f, },
 
        { -3.0f, -3.0f, -3.0f,  0.0f, -1.0f, 0.0f,  0.0f, 0.0f, },    // side 4
        { 3.0f, -3.0f, -3.0f,  0.0f, -1.0f, 0.0f,  1.0f, 0.0f, },
        { -3.0f, -3.0f, 3.0f,  0.0f, -1.0f, 0.0f,  0.0f, 1.0f, },
        { 3.0f, -3.0f, 3.0f,  0.0f, -1.0f, 0.0f,  1.0f, 1.0f, },
 
        { 3.0f, -3.0f, -3.0f,  1.0f, 0.0f, 0.0f,  0.0f, 0.0f, },    // side 5
        { 3.0f, 3.0f, -3.0f,  1.0f, 0.0f, 0.0f,  0.0f, 1.0f, },
        { 3.0f, -3.0f, 3.0f,  1.0f, 0.0f, 0.0f,  1.0f, 0.0f, },
        { 3.0f, 3.0f, 3.0f,  1.0f, 0.0f, 0.0f,  1.0f, 1.0f, },
 
        { -3.0f, -3.0f, -3.0f,  -1.0f, 0.0f, 0.0f,  0.0f, 0.0f, },    // side 6
        { -3.0f, -3.0f, 3.0f,  -1.0f, 0.0f, 0.0f,  1.0f, 0.0f, },
        { -3.0f, 3.0f, -3.0f,  -1.0f, 0.0f, 0.0f,  0.0f, 1.0f, },
        { -3.0f, 3.0f, 3.0f,  -1.0f, 0.0f, 0.0f,  1.0f, 1.0f, },
    };
 
//Write to out outstream file as a new binary format
outfile.write((char*)vertices,sizeof(CUSTOMVERTEX)*24);
outfile.close();
 
//Now read from the newly created file
CUSTOMVERTEX vertsArray[23];
infile.read((char*)VertsArray,sizeof(CUSTOMVERTEX)*24);
 
 
//Now load the data that was fetched from the binary in to the directx vertexbuffer
// create a vertex buffer interface called v_buffer
    d3ddev->CreateVertexBuffer(24*sizeof(CUSTOMVERTEX),
                               0,
                               CUSTOMFVF,
                               D3DPOOL_MANAGED,
                               &v_buffer,
                               NULL);
 
    VOID* pVoid;    // a void pointer
 
    // lock v_buffer and load the vertices into it
    v_buffer->Lock(0, 0, (void**)&pVoid, 0);
   // memcpy(pVoid, vertices, sizeof(vertices)); //loading from a hardcoded struct array which works fine
memcpy(pVoid, VertsArray, sizeof(CUSTOMVERTEX)*24); //loading from an array loaded with ifstream
    v_buffer->Unlock();
 

Share this post


Link to post
Share on other sites

oh your right,i was thinking 0 to 23 is 24 allocations

Edited by Anddos

Share this post


Link to post
Share on other sites

That's incorrect. The code you have right now is reading file data in one beyond the end of the array. The number in the array declaration specifies the size of the array, not the last index. It needs to be:

 

CUSTOMVERTEX vertsArray[24];

Share this post


Link to post
Share on other sites

would it be possible to write the "texture.jpg" as data to the binary file and load it that way ?

Share this post


Link to post
Share on other sites

do you mean write the texture itself, or write a locator like a path or a filename? it's a yes in both cases, but the former may be a lot of work. Take a look at the OBJ format to see how materials can be bundled with geometry.

Share this post


Link to post
Share on other sites

...but the former may be a lot of work...

 

Hmmm, I sort of disagree. In the simplest form you write the size of the sub-blob (and also a format tag for proper dispatch at loading) and then the blob itself. Think of concatenating files to one file (or rather non-compressing archivers like tar). At loading the size and tag help you split it up again. 

 

Or am I missing something ?

Share this post


Link to post
Share on other sites

oh your right,i was thinking 0 to 23 is 24 allocations

 

0 to 23 is 24 allocations, but you need to declare the array with size 24, not size 23 which is what you've done:

 

CUSTOMVERTEX vertsArray[23];

 

This isn't 0 to 23, this is 0 to 22.  The "[23]" isn't the last element in the array, it's the size of the array, so this array only has space for 23 CUSTOMVERTEX structs.

Share this post


Link to post
Share on other sites

 

...but the former may be a lot of work...

 

Hmmm, I sort of disagree. In the simplest form you write the size of the sub-blob (and also a format tag for proper dispatch at loading) and then the blob itself. Think of concatenating files to one file (or rather non-compressing archivers like tar). At loading the size and tag help you split it up again. 

 

Or am I missing something ?

 

I was thinking  parsing a single field that can be passed directly to a ::load() function would be less work, but after reading your thoughts it does seem quite comparable in difficulty.

Share this post


Link to post
Share on other sites
Yeah, depends on what functions/library you have at your disposal. Assuming D3DX9 is used, this is really simple, since the texture functions come with overloads for both files and memory. One can even (ab)use them to convert texture formats in-memory.

Share this post


Link to post
Share on other sites

This topic is 1329 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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this