Jump to content

  • Log In with Google      Sign In   
  • Create Account

Writing vertices to my own file format


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
9 replies to this topic

#1 Anddos   Members   -  Reputation: 515

Like
0Likes
Like

Posted 28 May 2014 - 10:20 AM

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=auto:0]

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();
 

Attached Thumbnails

  • vertices_d3d9.jpg
  • vertices_hardcoded_d3d9.jpg

:)

Sponsor:

#2 phil_t   Crossbones+   -  Reputation: 4094

Like
1Likes
Like

Posted 28 May 2014 - 10:42 AM

Why is your vertsArray only 23 elements instead of 24?



#3 Anddos   Members   -  Reputation: 515

Like
0Likes
Like

Posted 28 May 2014 - 11:09 AM

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


Edited by Anddos, 28 May 2014 - 11:11 AM.

:)

#4 phil_t   Crossbones+   -  Reputation: 4094

Like
0Likes
Like

Posted 28 May 2014 - 11:12 AM

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];



#5 Anddos   Members   -  Reputation: 515

Like
0Likes
Like

Posted 28 May 2014 - 11:32 AM

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


:)

#6 Burnt_Fyr   Members   -  Reputation: 1248

Like
0Likes
Like

Posted 28 May 2014 - 12:05 PM

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.



#7 unbird   Crossbones+   -  Reputation: 6012

Like
0Likes
Like

Posted 28 May 2014 - 12:22 PM

...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 ?



#8 mhagain   Crossbones+   -  Reputation: 8277

Like
1Likes
Like

Posted 28 May 2014 - 12:39 PM

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.


It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.


#9 Burnt_Fyr   Members   -  Reputation: 1248

Like
0Likes
Like

Posted 28 May 2014 - 04:00 PM

 

...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.



#10 unbird   Crossbones+   -  Reputation: 6012

Like
1Likes
Like

Posted 28 May 2014 - 05:17 PM

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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS