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)
{
switch (name)
{
case "position":
return mPosition;
case "normal":
return mNormal;
case "texcoord":
return mTexcoord;
case "tangent":
return mTagent;
case "color":
return mColor;
}
return null;
}
public void SetValueByElementName(String name, object value)
{
switch (name)
{
case "position":
Vector3 position = (Vector3)value;
mPosition = position;
break;
case "color":
Color color = (Color)value;
mColor = color;
break;
case "normal":
Vector3 normal = (Vector3)value;
mNormal = normal;
break;
case "texcoord":
Vector2 texcoord = (Vector2)value;
mTexcoord = texcoord;
break;
case "tangent":
Vector3 tangent = (Vector3)value;
mTagent = tangent;
break;
}
}
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?






