Assuming your setup code remains unchanged, and after checking the source code for Assimp .NET, try this:
private void SetUpVertices()
{
int count = oScene.MeshCount;
vertexBuffers = new VertexBuffer[count]
indexBuffers = new IndexBuffer[count]
Mesh mMesh;
// define objects for the meshes material and the color we are sampling
Matrial mMaterial;
Color4D color;
for (int m = 0; m < count;m++)
{
mMesh = oScene.Meshes[m];
vertices = new VertexPositionColor[mMesh.VertexCount];
indices = new short[mMesh.FaceCount*3];
// load the material
mMaterial = oScene.Material[mMesh.MaterialIndex];
// get the diffuse color for this material
color = mMaterial.ColorDiffuse;
int i=0;
foreach (Vector3D mVec in mMesh.Vertices)
{
// convert the Assimp Color4D data into an XNA Color
vertices[i] = new VertexPositionColor(new Vector3(mVec.X, mVec.Y, mVec.Z), new Color(color.R, color.G, color.B, color.A));
i++;
}
int f = 0;
Face mFace;
for (i = 0 ; i < mMesh.FaceCount*3 ; i=i+3)
{
mFace = mMesh.Faces[f];
f++;
indices[i] = (short)mFace.Indices[0];
indices[i + 1] = (short)mFace.Indices[1];
indices[i + 2] = (short)mFace.Indices[2];
}
vertexBuffer = new VertexBuffer(device, VertexPositionColor.VertexDeclaration, vertices.Length, BufferUsage.WriteOnly);
vertexBuffer.SetData(vertices);
indexBuffer = new IndexBuffer(device, typeof(short), indices.Length, BufferUsage.None);
indexBuffer.SetData(indices);
vertexBuffers[m] = vertexBuffer;
indexBuffers[m] = indexBuffer;
}
}
I've added comments so you can see the changes I've made, so hopefully you can understand how the added/changed code works, but basically I've loaded each meshes Material, grabbed the diffuse color from it, and instead of setting a default color, I've converted the Assimp Color4D to XNA Color inline when creating each vertex.
Again, untested, so it may or may not work.