ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
642
642
EMPFEHLEN
-
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?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
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.
-
Ich habe meinen Quellcode umgestellt und unten stehendes bild herausbekommen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
using System; using System.Drawing; using System.Windows.Forms; using Microsoft.DirectX; using Microsoft.DirectX.Direct3D; namespace Frost { public partial class MainFrame : Form { private Device m_device; private Mesh meshes; private Matrix World = new Matrix(); #region Initialisation public MainFrame() { CheckClient(); this.BackColor = Color.Blue; this.ClientSize = new System.Drawing.Size(600,600); this.ShowIcon = false; this.Text = "Frost"; this.MouseClick += new MouseEventHandler(rePanel1_MouseClick); this.MouseMove += new MouseEventHandler(rePanel1_MouseMove); this.MouseWheel += new MouseEventHandler(rePanel1_MouseWheel); this.MouseDown += new MouseEventHandler(rePanel1_MouseDown); this.MouseUp += new MouseEventHandler(rePanel1_MouseUp); this.KeyDown += new KeyEventHandler(MainFrame_KeyDown); this.KeyPress += new KeyPressEventHandler(MainFrame_KeyPress); this.KeyUp += new KeyEventHandler(MainFrame_KeyUp); this.SetStyle( ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true ); } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { this.Render(); this.Invalidate(); } protected override void Dispose(bool disposing) { base.Dispose( disposing ); } static void Main() { using( MainFrame m = new MainFrame() ) { m.Show(); m.InitGFX(); Application.Run( m ); m.Invalidate(); } } #endregion #region Direct3D private void InitGFX() { if (!Manager.CheckDeviceFormat(Manager.Adapters.Default.Adapter, DeviceType.Hardware, Manager.Adapters.Default.CurrentDisplayMode.Format, Usage.DepthStencil, ResourceType.Surface, DepthFormat.D16)) { return; } Caps caps = Manager.GetDeviceCaps(Manager.Adapters.Default.Adapter, DeviceType.Hardware); CreateFlags flags; if (caps.DeviceCaps.SupportsHardwareTransformAndLight) flags = CreateFlags.HardwareVertexProcessing; else flags = CreateFlags.SoftwareVertexProcessing; PresentParameters pp = new PresentParameters(); pp.BackBufferFormat = Format.Unknown; pp.SwapEffect = SwapEffect.Discard; pp.Windowed = true; pp.EnableAutoDepthStencil = true; pp.AutoDepthStencilFormat = DepthFormat.D16; pp.PresentationInterval = PresentInterval.Immediate; m_device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, this, flags, pp); meshes = Mesh.Teapot(m_device); } private void Render() { m_device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, this.BackColor, 1.0f, 0); m_device.BeginScene(); //rendern m_device.Transform.World = Matrix.Identity; meshes.DrawSubset(0); //@rendern m_device.EndScene(); m_device.Present(); } private void setCam(Vector3 camPos,Vector3 target,Vector3 up) { m_device.Transform.View = Matrix.LookAtLH(camPos, // Camera position target, // Look-at point up); // Up vector } #endregion #region Other void CheckClient() { if ((Environment.WorkingSet / 8 / 1024) <= 512) MessageBox.Show("Es wurde wenig Arbeitsspeicher ermittelt. Dies kann eventuell zu Problemen führen."); if (Laptop_Battery.GetStatus().BatteryFlag != Laptop_Battery.BatteryFlag.NoSystemBattery) if (Laptop_Battery.GetStatus().BatteryFlag == Laptop_Battery.BatteryFlag.Low || Laptop_Battery.GetStatus().BatteryFlag == Laptop_Battery.BatteryFlag.Critical) MessageBox.Show("Der Ladezustand der Batterie Ihres Laptops ist sehr gering. Dies kann eventuell zu Problemen führen."); } void MainFrame_KeyUp(object sender, KeyEventArgs e) { Eventquee.KeyUp(sender, e, this); } void MainFrame_KeyPress(object sender, KeyPressEventArgs e) { Eventquee.KeyPress(sender, e, this); } void MainFrame_KeyDown(object sender, KeyEventArgs e) { Eventquee.KeyDown(sender, e, this); } void rePanel1_MouseUp(object sender, MouseEventArgs e) { Eventquee.MouseUp(sender, e, this); } void rePanel1_MouseDown(object sender, MouseEventArgs e) { Eventquee.MouseDown(sender, e, this); } void rePanel1_MouseWheel(object sender, MouseEventArgs e) { Eventquee.MouseWheel(sender, e, this); } void rePanel1_MouseMove(object sender, MouseEventArgs e) { Eventquee.MouseMove(sender, e, this); } void rePanel1_MouseClick(object sender, MouseEventArgs e) { Eventquee.MouseClick(sender, e, this); } #endregion } }
Ist denn hier keiner in der Lage mir u helfen?
Ähnliche Themen
-
Problem mit Verweis auf DirectX
Von Rene42 im Forum .NET Grafik und SoundAntworten: 1Letzter Beitrag: 11.12.10, 15:50 -
DirectX problem
Von GSlang im Forum Microsoft WindowsAntworten: 2Letzter Beitrag: 30.08.10, 10:33 -
Problem mit DirectX installation
Von cycovery im Forum Microsoft WindowsAntworten: 4Letzter Beitrag: 17.06.05, 08:46 -
directX problem
Von alixander im Forum C/C++Antworten: 1Letzter Beitrag: 07.04.04, 11:03 -
Directx Problem
Von foxx21 im Forum Microsoft WindowsAntworten: 3Letzter Beitrag: 16.10.03, 16:54





Zitieren
Login





