Hi,
ich hab ein problem mit c# und directX.
also, ich hab mit blender ein .x file (directX mesh) erzeugt (funktioniert in dx-viewer). diese file würde ich gerne einlesen. das funktioniert auch noch.
das materialeinlesen scheint nach dem debugger auch zu funktionieren.
wenn ich jetzt dem device das material des meshs übergebe, dann stehen auch die meshdaten richtig im device drin.
aber trotzdem bleibt das mesh weiß (lichquelle stimmt, sonst wäre es schwarz). ich hab keine ahnung warum. weiß einer von euch woran das liegen könnte?
Hiermit lese ich das mesh ein:
und das ist meine draw- funktion:
ich hab mal dar komplette c# project angehängt (vs 2010)...
ich hab ein problem mit c# und directX.
also, ich hab mit blender ein .x file (directX mesh) erzeugt (funktioniert in dx-viewer). diese file würde ich gerne einlesen. das funktioniert auch noch.
das materialeinlesen scheint nach dem debugger auch zu funktionieren.
wenn ich jetzt dem device das material des meshs übergebe, dann stehen auch die meshdaten richtig im device drin.
aber trotzdem bleibt das mesh weiß (lichquelle stimmt, sonst wäre es schwarz). ich hab keine ahnung warum. weiß einer von euch woran das liegen könnte?
Hiermit lese ich das mesh ein:
Code:
mesh = Mesh.FromFile("test1.x", MeshFlags.Managed, m_Device, out apt, out hmaterial);
if ((mesh.VertexFormat & VertexFormats.Normal) != VertexFormats.Normal)
{
Mesh temp = mesh.Clone(mesh.Options.Value, apt ,m_Device);
mesh.Dispose();
mesh = temp;
}
// mesh.GenerateAdjacency(0.001f, );
this.mesh.OptimizeInPlace(MeshFlags.OptimizeAttributeSort, apt);
apt.Dispose();
this.material = new Material[mesh.NumberAttributes];
this.texture = new Texture[mesh.NumberAttributes];
for (int i = 0; i < mesh.NumberAttributes; i++)
{
this.material[i] = hmaterial[i].Material3D;
this.material[i].AmbientColor = material[i].DiffuseColor;
if (this.hmaterial[i].TextureFilename != null && this.hmaterial[i].TextureFilename.Length > 0)
{
this.texture[i] = TextureLoader.FromFile(m_Device, this.hmaterial[i].TextureFilename);
}
else
{
this.texture[i] = null;
}
}
und das ist meine draw- funktion:
Code:
m_Device.Clear(ClearFlags.Target, Color.Blue, 0.0f, 0);
//RenderMode
m_Device.RenderState.FillMode = FillMode.Solid;
m_Device.RenderState.CullMode = Cull.CounterClockwise;
m_Device.BeginScene();
m_Device.VertexFormat = mesh.VertexFormat;
for (int i = 0; i < mesh.NumberAttributes; i++)
{
m_Device.Material = material[i];
m_Device.SetTexture(0, texture[i]);
mesh.DrawSubset(i);
}
m_Device.EndScene();
m_Device.Present();
ich hab mal dar komplette c# project angehängt (vs 2010)...
Anhänge
Zuletzt bearbeitet: