No replies to this topic
Members - Reputation: 108
Posted 14 January 2013 - 05:47 AM
I am currently doing sth to warp the VB and IB so that I could load some other model formats such as .mesh in Ogre.
Some of formats may use different VT_Sementics such as Normal \ Tangent and sth else, so I am trying to determin my vertex declartion type dynamicly when read the formats, so I just add a basic interface : IVertexType(I am using XNA 3.1 and this interface is just does the same thing with XNA 4.1 does), and I would dynamicly choose the typical vertex type on the way.
But what really matters is , I need to update and set the VB and IB to the device, I had to iterate all the vertex data maybe VertexPositionNormalColor array, and need to check if a specific element exists.
Just like what I am current doing:
Vector3 position = (Vector3)originVertexData.GetValueByElementName("position");
public object GetValueByElementName(String name)
public void SetValueByElementName(String name, object value)
Vector3 position = (Vector3)value;
mPosition = position;
Color color = (Color)value;
mColor = color;
Vector3 normal = (Vector3)value;
mNormal = normal;
Vector2 texcoord = (Vector2)value;
mTexcoord = texcoord;
Vector3 tangent = (Vector3)value;
mTagent = tangent;
Vector3 transformedPos = new Vector3(x, y, z);
targetVertexData.SetValueByElementName("position", transformedPos); // then apply the bone transform.
As you can see up there, there are lot of boxing and unboxing operation, and it's ok when the buffer require lessupdate, but it's a disaster when an animation are applied to the vertex buffer(software animation). So I am wondering if anyone could tell me a better way to do this?