Hallo
DP,
ich versuche gerade verschieden viele Meshs in eine Szene zu rendern. Dafür habe ich es jetzt schon einmal mit folgendem Code (es ist eine Komponente) probiert:
Code:
public IntPtr RenderControl;
public String[] XFiles;
private Device device;
private Mesh m_Mesh;
private Material[] m_MeshMaterials;
private Texture[] m_MeshTextures;
private Vector3 v_CurrMeshPos = new Vector3();
public int Height = 700;
public int Width = 300;
public bool InitializeGraphics()
{
PresentParameters pres = new PresentParameters();
pres.Windowed = true;
pres.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware,
RenderControl, CreateFlags.SoftwareVertexProcessing, pres);
LoadMesh("MeinMesh.x");
return true;
}
public void Render()
{
device.Clear(ClearFlags.Target, Color.Silver, 1.0F, 0);
device.BeginScene();
InitializeCamera();
InitializeLights();
DrawMesh(v_CurrMeshPos);
device.EndScene();
device.Present();
}
public void DisposeGraphics()
{
device.Dispose();
}
private void InitializeCamera()
{
Vector3 cameraPos = new Vector3(0, 0, -150f);
Vector3 cameraTarget = new Vector3();
Vector3 cameraUp = new Vector3(0, 1, 0);
device.Transform.View = Matrix.LookAtLH(cameraPos, cameraTarget, cameraUp);
float fov = (float) Math.PI / 4;
float aspectRatio = Width / Height;
float zNear = 1;
float zFar = 1000;
device.Transform.Projection = Matrix.PerspectiveFovLH(fov, aspectRatio, zNear, zFar);
}
private void InitializeLights()
{
device.RenderState.Lighting = false;
device.RenderState.Ambient = Color.White;
}
private void DrawMesh(Vector3 v3Position)
{
device.Transform.World = Matrix.Translation(v3Position);
for (int i = 0; i < m_MeshMaterials.Length; i++)
{
device.Material = m_MeshMaterials[i];
device.SetTexture(0, m_MeshTextures[i]);
m_Mesh.DrawSubset(i);
}
}
public void LoadMesh(string file)
{
ExtendedMaterial[] mtrl;
GraphicsStream adj;
m_Mesh = Mesh.FromFile(file, MeshFlags.Managed, device, out adj, out mtrl);
if ((mtrl != null) && (mtrl.Length > 0))
{
m_MeshMaterials = new Material[mtrl.Length];
m_MeshTextures = new Texture[mtrl.Length];
for (int i = 0; i < mtrl.Length; i++)
{
m_MeshMaterials[i] = mtrl[i].Material3D;
if ((mtrl[i].TextureFilename != null) && (mtrl[i].TextureFilename != string.Empty))
{
m_MeshTextures[i] = TextureLoader.FromFile(device, directory + mtrl[i].TextureFilename);
}
}
}
}
Allerings wird das Objekt nicht angezeigt
Wie schaffe ich jetzt, dass das Objekt angezeigt wird, und wie schaffe ich das jetzt, mehrere Objekte anzeigen zu lassen? Die x-Dateien sollen im Array XFiles liegen und beim hinzufügen/entfernen dementsprechend der Szene hinzugefügt/entfernt werden.