Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


SDKMesh Vertex format + DirectX 11 mesh load and animator


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
5 replies to this topic

#1 RythBlade   Members   -  Reputation: 152

Like
0Likes
Like

Posted 22 March 2012 - 08:32 AM

Hi folks,
I've been looking for a quick and easy way to load in a model of a person and animate them for a simulator I'm working on.

Oh before I forget, I'm using DirectX 11.

I've been looking at the SDKMesh class in DXUT as it seems the fastest simplest way for me to achieve this, but I'm a little confused over the vertex format stuff.
I've looked at a few different examples using the class and each has a different, seemingly global, vertex format, but they all use the SDKMesh class. E.g. the old multi-animation example only has position and texture coordinates, but in the DXUT tutorials they add the normals as well. I'm new to dealing with meshes loaded from file in DirectX, I'm usually hard coding spheres for examples :P

Does the SDKMesh class deal with the vertex format separately - or is it that the vertex format is embedded in the .sdkmesh file, and you have to mirror it in the code??

I notice that the intel multi animation example using threaded building blocks includes some animation data as part of their vertex format and yet in the folder structure I can see an sdkmesh file - presumably the actual mesh - and an sdkmesh_anim file - which I assume is the animation data. I'm just wandering how they all deal with this....

This isn't something I'm interested in programming at the moment, nor do I have the time - my uni deadline is fast approaching :s
Basically I need a way to call load on something to get a mesh and call animate on it to make it move :P and then I'll move the object around the world as it animates. Lazy I know, but animation is not the theme of my project but I'd like it in there for completeness and an added facet of realism.

Sorry its a bit disjoint - I'm not really sure how to ask what I need :s
Hopefully you'll understand
Thanks very much!!
I've got a new blog!! I post details of my projects, useful things I find around and about the place and some tutorials on various technologies I'm experimenting with.

Sponsor:

#2 Asesh   Members   -  Reputation: 268

Like
1Likes
Like

Posted 23 March 2012 - 11:36 PM

Have never gone through SDKMESH format I use md5 format. Here's a tutorial no how to work with md5 file format: http://www.braynzarsoft.net/index.php?p=DX11Lessons

#3 kubera   Members   -  Reputation: 963

Like
0Likes
Like

Posted 24 March 2012 - 10:40 AM

I am setting the vertex format explicitely before callind the rendering function of SDKMesh
and everything works fine.

#4 daddis   Members   -  Reputation: 107

Like
1Likes
Like

Posted 20 September 2012 - 07:53 AM

Does the SDKMesh class deal with the vertex format separately - or is it that the vertex format is embedded in the .sdkmesh file, and you have to mirror it in the code??


This is probably way too late for your uni project... but yes. You need to mirror the vertex buffer format in code.

If you use the ContentExporter tool (source available in the June 2010 SDK), you can run it with a logging level that outputs the vertex format when it creates your sdkmesh:

ContentExporter.exe MyModel.FBX -loglevel 4

This will give you some very useful output, such as:

Triangle list mesh: 51 verts, 270 indices, 1 subsets
D3DX mesh operations increased vertex count from 51 to 53.
Vertex size: 36 bytes; VB size: 1908 bytes
Element 0 Stream 0 Offset 0: Position.0 Type Float3 (12 bytes)
Element 1 Stream 0 Offset 12: BlendWeight.0 Type UByte4N (4 bytes)
Element 2 Stream 0 Offset 16: BlendIndices.0 Type UByte (4 bytes)
Element 3 Stream 0 Offset 20: Normal.0 Type Dec3N (4 bytes)
Element 4 Stream 0 Offset 24: TexCoord.0 Type Float16_2 (4 bytes)
Element 5 Stream 0 Offset 28: Tangent.0 Type Dec3N (4 bytes)
Element 6 Stream 0 Offset 32: Binormal.0 Type Dec3N (4 bytes)


Which you can use to create your vertex layout in code:

// Create our vertex input layout
const D3D11_INPUT_ELEMENT_DESC layout[] =
{
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "WEIGHTS", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "BONES", 0, DXGI_FORMAT_R8G8B8A8_UINT, 0, 16, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "NORMAL", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, DXGI_FORMAT_R16G16_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "TANGENT", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 28, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "BINORMAL", 0, DXGI_FORMAT_R8G8B8A8_UNORM, 0, 32, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};


And of course you'll need to match that in your vertex shader, too:

struct VSSkinnedSceneIn
{
float3 Pos : POSITION; //Position
float4 Weights : WEIGHTS; //Bone weights
uint4 Bones : BONES; //Bone indices
float3 Normal : NORMAL; //Normal
float2 Tex : TEXCOORD; //Texture coordinate
float3 Tan : TANGENT; //Normalized Tangent vector
float3 Binormal : BINORMAL; //Binormal
};


Hope this helps someone!

#5 Anddos   Members   -  Reputation: 515

Like
0Likes
Like

Posted 21 September 2012 - 11:28 AM

Have never gone through SDKMESH format I use md5 format. Here's a tutorial no how to work with md5 file format: http://www.braynzars...p?p=DX11Lessons


that site is really nice, i didnt even know about it
:)

#6 Anddos   Members   -  Reputation: 515

Like
0Likes
Like

Posted 21 September 2012 - 11:45 AM

in this tutorial , D3D11_MD5_Animation how do you make the model change animation tracks?
:)




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