Moin,
ich wollt mal ein DirectX-Programm schreiben und hatte hier schonmal ein Thread für ein DirectX-Panel eröffnet. Hat alles soweit geklappt , wollte jetzt allerdings mal n 3D-Objekt rendern und wie es der Zufall so will , wird das nicht angezeigt. Ich hab dann nochmal versucht Text zu rendern und das klappt aber. Meine Frage ist , ob mir jemand sagen kann , woran das liegt?
Ich hab in meiner aufrufenden Klasse nurnoch eine Deklaration und einen Timer , der alle 100ms die Rendern-Methode aufruft.
ich wollt mal ein DirectX-Programm schreiben und hatte hier schonmal ein Thread für ein DirectX-Panel eröffnet. Hat alles soweit geklappt , wollte jetzt allerdings mal n 3D-Objekt rendern und wie es der Zufall so will , wird das nicht angezeigt. Ich hab dann nochmal versucht Text zu rendern und das klappt aber. Meine Frage ist , ob mir jemand sagen kann , woran das liegt?
Code:
private Device m_device;
private Panel devpanel;
internal LightsCollection Lights
{
get { return m_device.Lights; }
}
private Mesh meshes;
private Font[] renderTextStyle = new Font[0];
private string[,] renderText = new string[0, 4];
private Matrix World = new Matrix();
internal Rendering(Panel devicepanel)
{
this.devpanel = devicepanel;
initGFX();
}
internal void initGFX()
{
try
{
PresentParameters pp = new PresentParameters();
pp.Windowed = true;
pp.DeviceWindow = devpanel;
pp.SwapEffect = SwapEffect.Copy;
m_device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, devpanel, CreateFlags.HardwareVertexProcessing, pp);
//Vector3 size;
//meshes = create3DText("Hallo", new System.Drawing.Font("Arial", 12), 0.001F, 0.5F, out size);
meshes = Mesh.Box(m_device, 2.0f, 1.0f, 2.0f);
}
catch (DirectXException e)
{
MessageBox.Show(e.Message);
}
}
internal void Render()
{
m_device.Clear(ClearFlags.Target,devpanel.BackColor, 0.0f, 0);
m_device.BeginScene();
// rendern
//m_device.Transform.World = Matrix.Identity;
meshes.DrawSubset(0);
for (int i = 0; i < renderTextStyle.Length; i++)
if (renderTextStyle[i] != null)
renderTextStyle[i].DrawText(null, renderText[i, 0], new System.Drawing.Point(Convert.ToInt16(renderText[i, 1]), Convert.ToInt16(renderText[i, 2])), System.Drawing.Color.FromArgb(Convert.ToInt16(renderText[i, 3])));
// @rendern
m_device.EndScene();
m_device.Present();
}
Ich hab in meiner aufrufenden Klasse nurnoch eine Deklaration und einen Timer , der alle 100ms die Rendern-Methode aufruft.