Laden...

Würfel wird nicht richtig angezeigt.

Erstellt von c#Leon vor 10 Jahren Letzter Beitrag vor 10 Jahren 925 Views
C
c#Leon Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
Würfel wird nicht richtig angezeigt.

Hallo Miteinander

Ich programmiere einen Würfel der sich drehen soll. Der Würfel wird in C# programmiert.
Nur leider werden nicht alle Seiten dargestellt nur 3 😦
Ich wollte fragen ob jemand den Fehler sieht oder sieht was fehlen könnte.
In WPF habe ich den View Port und das Licgt eingestellt mit inem Würfel in WPF hab ich keien Problme.
Danke

Gruss Leon

Ich habe den code hier normal rein gepostet da wenn ich ihn farbig reinposten will es schlecht aussueht 😦

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media.Media3D;
using System.Windows.Media;

namespace cube3d2
{
    class Cube : ModelVisual3D
    {
        Model3DGroup meshGroup;
        
        public Cube()
        {
            meshGroup = new Model3DGroup();
            CreateCube();
        }

        private void CreateCube()
        {
            Point3D position = new Point3D(0, 0, 0);

            Point3D a = new Point3D(position.X - 1, position.Y - 1, position.Z + 1);
            Point3D b = new Point3D(position.X + 1, position.Y - 1, position.Z + 1);
            Point3D c = new Point3D(position.X + 1, position.Y - 1, position.Z - 1);
            Point3D d = new Point3D(position.X - 1, position.Y - 1, position.Z - 1);
            Point3D e = new Point3D(position.X - 1, position.Y + 1, position.Z + 1);
            Point3D f = new Point3D(position.X + 1 , position.Y + 1, position.Z + 1);
            Point3D g = new Point3D(position.X + 1, position.Y + 1, position.Z - 1);
            Point3D h = new Point3D(position.X - 1, position.Y + 1, position.Z - 1);

            GeometryModel3D front = new GeometryModel3D(BuildRectangle(a, b, f, e, new Vector3D(0, 0, 1)), new DiffuseMaterial(new SolidColorBrush(
                Colors.Blue)));

            GeometryModel3D right = new GeometryModel3D(BuildRectangle(b, c, g, f, new Vector3D(1, 0, 0)), new DiffuseMaterial(new SolidColorBrush(
               Colors.Red)));

            GeometryModel3D back = new GeometryModel3D(BuildRectangle(c, d, h, g, new Vector3D(0, 0, -1)), new DiffuseMaterial(new SolidColorBrush(
                Colors.Silver)));

            GeometryModel3D left = new GeometryModel3D(BuildRectangle(d, a, e, h, new Vector3D(-1, 0, 0)), new DiffuseMaterial(new SolidColorBrush(
                Colors.Green)));

            GeometryModel3D top = new GeometryModel3D(BuildRectangle(e, f, g, h, new Vector3D(0, 1, 0)), new DiffuseMaterial(new SolidColorBrush(
                Colors.Orange)));

            GeometryModel3D bottom = new GeometryModel3D(BuildRectangle(a, d, c, b, new Vector3D(0, -1, 0)), new DiffuseMaterial(new SolidColorBrush(
                Colors.Violet)));

            meshGroup.Children.Add(front);
            meshGroup.Children.Add(right);
            meshGroup.Children.Add(back);
            meshGroup.Children.Add(left);
            meshGroup.Children.Add(top);
            meshGroup.Children.Add(bottom);

            this.Content = meshGroup;

            
        }

        private MeshGeometry3D BuildRectangle(Point3D a, Point3D b, Point3D c, Point3D d,Vector3D normal)
        {
            MeshGeometry3D geometry = new MeshGeometry3D();
            int baseIndex = geometry.Positions.Count;

            //Add vertices
            geometry.Positions.Add(a);
            geometry.Positions.Add(b);
            geometry.Positions.Add(c);
            geometry.Positions.Add(d);

            //Add normals
            geometry.Normals.Add(normal);
            geometry.Normals.Add(normal);
            geometry.Normals.Add(normal);
            geometry.Normals.Add(normal);

            //Add indices
            geometry.TriangleIndices.Add(baseIndex + 0);
            geometry.TriangleIndices.Add(baseIndex + 2);
            geometry.TriangleIndices.Add(baseIndex + 1);
            geometry.TriangleIndices.Add(baseIndex + 2);
            geometry.TriangleIndices.Add(baseIndex + 0);
            geometry.TriangleIndices.Add(baseIndex + 3);

            return geometry;
        }
    }
}
Hinweis von Abt vor 10 Jahren

Daher in Zukunft bitte einfach an [Hinweis] Wie poste ich richtig? Punkt 6 halten.

5.658 Beiträge seit 2006
vor 10 Jahren

Hi c#Leon,

Nur leider werden nicht alle Seiten dargestellt nur 3 😦

bist du sicher, daß du die Flächen alle in der gleichen Drehrichtung erstellst?

In WPF habe ich den View Port und das Licgt eingestellt mit inem Würfel in WPF hab ich keien Problme.

Ih nchs verstehen wasd u dmit sgaen mcöhtest...

Christian

Weeks of programming can save you hours of planning

C
c#Leon Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

jo der Tip mit den Dreiecken stimmt. Danke