View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

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

9 replies to this topic

### #1Anddos  Members

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

//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
v_buffer->Unlock();

### #2phil_t  Members

Posted 28 May 2014 - 10:42 AM

### #3Anddos  Members

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.

### #4phil_t  Members

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

### #5Anddos  Members

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 ?

### #6Burnt_Fyr  Members

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.

### #7unbird  Members

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 ?

### #8mhagain  Members

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.

### #9Burnt_Fyr  Members

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.

### #10unbird  Members

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.