Laden...

MDX - C# - VertexBuffer funkt nicht?

Erstellt von ed-wards vor 17 Jahren Letzter Beitrag vor 16 Jahren 1.821 Views
E
ed-wards Themenstarter:in
43 Beiträge seit 2007
vor 17 Jahren
MDX - C# - VertexBuffer funkt nicht?

Hi Leute,
ich beschäftige mich zur Zeit mit MDX . Ich hab mal das Tutorial zu MDX mit C# bei euch gemacht und an der Stelle an der der VertexBuffer ins Spiel kommt um die Vertices auf dem Graka-Speicher ab zu legen zeigt es das Dreieck nicht mehr an. Wenn ich die Vertices im Systemspeicher belasse funktioniert alles prima, doch wemn ich sie aus dem VertexBuffer heraus zeichnen lassen will werden sie nicht mehr angezeigt. Es gibt keine Exception oder einen Fehler es wird einfach nichts angezeigt.
Hier mal der Code:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace Direct3DTriangles
{
    public partial class D3DTriangles : Form
    {
        public D3DTriangles()
        {
            InitializeComponent();
            InitializeGraphics();
            this.SizeChanged += new EventHandler(D3DTriangles_SizeChanged);
        }

        void D3DTriangles_SizeChanged(object sender, EventArgs e)
        {
            this.Render();
        }

        #region Direct3D - Variables
        private Device m_Device;
        private PresentParameters m_Params;
        private VertexBuffer m_VertexBuffer;
        private CustomVertex.TransformedColored[] verts;
        #endregion

        #region Direct3D - Base Methods
        private void InitializeGraphics()
        {
            try
            {
                this.ClientSize = new Size(1024, 768);

                m_Params = new PresentParameters();
                m_Params.Windowed = true;
                m_Params.SwapEffect = SwapEffect.Copy;

                m_Device = new Device(
                    Manager.Adapters.Default.Adapter,
                    DeviceType.Hardware,
                    this,
                    CreateFlags.HardwareVertexProcessing,
                    this.m_Params);

                CreateVertexBuffer();
            }
            catch (DirectXException e)
            {
                MessageBox.Show(e.Message);
            }
        }

        private void CreateVertexBuffer()
        {
            verts = new CustomVertex.TransformedColored[3];

            verts[0].X = 150; verts[0].Y = 50; verts[0].Z = 0.5f; verts[0].Rhw = 1; verts[0].Color = Color.Green.ToArgb();
            verts[1].X = 250; verts[1].Y = 250; verts[1].Z = 0.5f; verts[1].Rhw = 1; verts[1].Color = Color.Blue.ToArgb();
            verts[2].X = 50; verts[2].Y = 250; verts[2].Z = 0.5f; verts[2].Rhw = 1; ; verts[2].Color = Color.Red.ToArgb();

            m_VertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColored), 3, m_Device, Usage.WriteOnly, CustomVertex.TransformedColored.Format, Pool.Default);

            GraphicsStream stream = m_VertexBuffer.Lock(0, 0, LockFlags.None);

            stream.Write(verts);

            m_VertexBuffer.Unlock();
        }

        public void Render()
        {
            m_Device.Clear(ClearFlags.Target, Color.Black, 0.0f, 0);

            m_Device.BeginScene();

            m_Device.VertexFormat = CustomVertex.TransformedColored.Format;

            //m_Device.RenderState.CullMode = Cull.None;

            m_Device.SetStreamSource(0, this.m_VertexBuffer, 0);
            m_Device.DrawPrimitives(PrimitiveType.PointList, 0, 1);
            //m_Device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 1, verts);

            m_Device.EndScene();
            m_Device.Present();
        }
        #endregion
    }
}

Vielen Dank schon mal 🙂
Euer Daniel

PS.: In meinem Rechner arbeitet eine Readon 9600SE

EDIT: Hab noch den Code in der Programm.cs vergessen(zusätzlich hab ich noch die using-Statements eingefügt


using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace Direct3DTriangles
{
    static class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            using (D3DTriangles mainForm = new D3DTriangles())
            {
                Application.Run(mainForm);
            }
        }
    }
}

"A train station is where a train stops. A bus station is where a bus stops. On my desk I have a workstation..."

JAck30lena:
"je nach format schwankt die komplexität zwischen 'kapier ich irgendwie nicht' und 'what the fuck...'"

270 Beiträge seit 2005
vor 17 Jahren

Hallo,probier mal folgendes,


 m_Device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);//Zeile 88

Die 1 steht dann für die Anzahl der Dreiecke.

mfg Hulk

E
ed-wards Themenstarter:in
43 Beiträge seit 2007
vor 17 Jahren

Hat nicht funktioniert, trotzdem danke 🙂
Das interessannte ist ja dass es über DrawUserPrimitives funktioniert (eben nicht aus dem graka-speicher 🙁 ). Die Vertexes sollten a eig. dieselben sein. Hmmm mal schaun ob mir der MDX-Debugger vom SDK was sagt.

Daniel

"A train station is where a train stops. A bus station is where a bus stops. On my desk I have a workstation..."

JAck30lena:
"je nach format schwankt die komplexität zwischen 'kapier ich irgendwie nicht' und 'what the fuck...'"

I
86 Beiträge seit 2006
vor 16 Jahren

Probier mal folgendes:

m_Device.RenderState.CullMode = Cull.None;
m_Device.RenderState.Lightning = false;
E
ed-wards Themenstarter:in
43 Beiträge seit 2007
vor 16 Jahren

*g* danke für deine Antwort, aber das Projekt ist schon lange beiseite gelegt aufs datum schau

Daniel

"A train station is where a train stops. A bus station is where a bus stops. On my desk I have a workstation..."

JAck30lena:
"je nach format schwankt die komplexität zwischen 'kapier ich irgendwie nicht' und 'what the fuck...'"

I
86 Beiträge seit 2006
vor 16 Jahren

Oh sorry, hab ich gar nicht so mitgekriegt ^^

Lg oli