Laden...

Direct3D Box mit Kanten

Erstellt von IchRoque81 vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.008 Views
IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren
Direct3D Box mit Kanten

Hallo zusammen.

Bin absoluter Anfänger was Direct3D-Programmierung betrifft. Habe es aber mitlerweile geschafft eine Box, abhängig von Länge, Breite und Höhe erstellen zu können (siehe Code).


        public MeshObjBox(Device device, float length, float width, float height, Material mat, Texture texture)
		{

            float lh = length / 2, wh = width / 2, hh = height / 2;

            CustomVertex.PositionNormalTextured[] verts = new CustomVertex.PositionNormalTextured[]
                {
                    // Boden
                    new CustomVertex.PositionNormalTextured(-lh, -hh, -wh, 0, 1, 0, -lh, -wh),
                    new CustomVertex.PositionNormalTextured( lh, -hh,  wh, 0, 1, 0,  lh,  wh),
                    new CustomVertex.PositionNormalTextured( lh, -hh, -wh, 0, 1, 0,  lh, -wh),
                    new CustomVertex.PositionNormalTextured(-lh, -hh,  wh, 0, 1, 0, -lh,  wh),

                    // Decke
                    new CustomVertex.PositionNormalTextured(-lh,  hh, -wh, 0, -1, 0, -lh, -wh),
                    new CustomVertex.PositionNormalTextured( lh,  hh,  wh, 0, -1, 0,  lh,  wh),
                    new CustomVertex.PositionNormalTextured( lh,  hh, -wh, 0, -1, 0,  lh, -wh),
                    new CustomVertex.PositionNormalTextured(-lh,  hh,  wh, 0, -1, 0, -lh,  wh),

                    // Vorderseite
                    new CustomVertex.PositionNormalTextured(-lh, -hh, -wh, 0, 0, -1, -lh, -hh),
                    new CustomVertex.PositionNormalTextured( lh,  hh, -wh, 0, 0, -1,  lh,  hh),
                    new CustomVertex.PositionNormalTextured( lh, -hh, -wh, 0, 0, -1,  lh, -hh),
                    new CustomVertex.PositionNormalTextured(-lh,  hh, -wh, 0, 0, -1, -lh,  hh),

                    // Rückseite
                    new CustomVertex.PositionNormalTextured(-lh, -hh,  wh, 0, 0, 1, -lh, -hh),
                    new CustomVertex.PositionNormalTextured( lh,  hh,  wh, 0, 0, 1,  lh,  hh),
                    new CustomVertex.PositionNormalTextured( lh, -hh,  wh, 0, 0, 1,  lh, -hh),
                    new CustomVertex.PositionNormalTextured(-lh,  hh,  wh, 0, 0, 1, -lh,  hh),

                    // Linke Seite
                    new CustomVertex.PositionNormalTextured(-lh, -hh, -wh, 1, 0, 0, -hh, -wh),
                    new CustomVertex.PositionNormalTextured(-lh,  hh,  wh, 1, 0, 0,  hh,  wh),
                    new CustomVertex.PositionNormalTextured(-lh, -hh,  wh, 1, 0, 0, -hh,  wh),
                    new CustomVertex.PositionNormalTextured(-lh,  hh, -wh, 1, 0, 0,  hh, -wh),

                    // Rechte Seite
                    new CustomVertex.PositionNormalTextured(lh, -hh, -wh, -1, 0, 0, -hh, -wh),
                    new CustomVertex.PositionNormalTextured(lh,  hh,  wh, -1, 0, 0,  hh,  wh),
                    new CustomVertex.PositionNormalTextured(lh, -hh,  wh, -1, 0, 0, -hh,  wh),
                    new CustomVertex.PositionNormalTextured(lh,  hh, -wh, -1, 0, 0,  hh, -wh)
                };
            for(int i = 0; i < verts.Length; i++)
            {
                verts[i].Tu *= 0.25f;
                verts[i].Tv *= 0.25f;
            }
            short[] inds = new short[]
                {
                    0, 1, 2,  3, 1, 0,
                    4, 5, 6,  7, 5, 4,
                    8, 9, 10,  11, 9, 8, 
                    12, 13, 14,  15, 13, 12,
                    16, 17, 18,  19, 17, 16,
                    20, 22, 21,  23, 20, 21
                };
            //...
        }

Jetzt wollte ich noch eins draufsetzen, und mir eine Box erstellen, bei der nur die Kanten zu sehen sind. Leider stehe ich da derzeit komplett auf dem Schlauch und habe keine Idee, wie ich diese Aufgabe lösen könnte.

Hat einer von euch schon eine Box erstellt, bei der NUR die Kanten zu sehen sind?
Kann mir einen bei diesem Problem weiterhelfen?
Hat einer vielleicht Beispielcode für mich, oder zumindest den entscheidenden Wink in die richitge Richtung?

Besten Dank schon einmal für eure Hilfe und Unterstützung 😃

~ rock on ~

S
58 Beiträge seit 2007
vor 14 Jahren

Poste doch bitte mal deine Rendermethode dann gehts weiter... 😉

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren

Morgen 😃

Also so spannend ist die Render-Methode jetzt nicht. Mir geht es ja in erster Linie um die Box, dass dort nur die Kanten zu sehen sind. Die Idee die mir gestern im Schlaf noch gekommen ist wäre, dass ich auf jeder Seite der Box nur (dort wo die Kanten sind), jeweils ein sehr schmales Rechteck mache.
Was haltet ihr davon?
Hättet ihr noch andere Ideen?

So. Jetzt aber noch die Render-Methode 😉


        public void Render()
        {
            device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1, 0);

            device.BeginScene();

            device.RenderState.Lighting = true;
            device.RenderState.SpecularEnable = true;
            device.RenderState.LocalViewer = true;

            device.Transform.World = Matrix.Translation(0, 0, 3);
            meshBox.Draw();

            device.EndScene();

            device.Present();
        }

~ rock on ~

5.658 Beiträge seit 2006
vor 14 Jahren

Vielleicht hilft dir das weiter: XNA Linie in Elemente zeichnen

Weeks of programming can save you hours of planning

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren

Hallo MrSparkle.

Zuerst einmal danke für den Hinweis. Der geht schon in die richtige Richtung.
Jedoch möchte ich, dass ausschließlich die Linien zu sehen sind. Man soll sozusagen durch den Würfel/Box hindurchsehen können und nur anhand dieser Extralinien ist zu erkennen, welche Dimensionen die Box besitzt...

~ rock on ~

5.658 Beiträge seit 2006
vor 14 Jahren

dann mußt du einfach den Indexbuffer als LineStrip rendern, und den Rest nicht...

Weeks of programming can save you hours of planning

IchRoque81 Themenstarter:in
36 Beiträge seit 2008
vor 14 Jahren

sorry für die dumme nachfrage, aber wo kann ich das machen?
bin noch absoluter beginner was direct3d betrifft 😦

~ rock on ~

5.658 Beiträge seit 2006
vor 14 Jahren

Weeks of programming can save you hours of planning