Laden...

Würfel rotiren lassen C# Code

Erstellt von c#Leon vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.289 Views
C
c#Leon Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
Würfel rotiren lassen C# Code

Hallo Zusammen

Ich habe einen Würfel in C# erstellt jede Seite hat eine Farbe. Aber damit man auch alle Seite sehen kann sollte er sich um die eigen Achse drehen so das man alle Seiten sehen kann.

Nur leider habe ich keine Ahnung wie ich das machen soll im Internet fand ich meistens nur WPF und Open GL Lösungen.

Hat jemand von euch so was schon mal gemacht und kennt eine gute Hilfestellung?

Danke

Gruss Leon

PS: Hier noch den Code des Würfels

 

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

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(b, a, e, f, new Vector3D(0, 0, 1)), new DiffuseMaterial(new SolidColorBrush(
                Colors.Blue)));

            GeometryModel3D right = new GeometryModel3D(BuildRectangle(c, b, f, g, 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(f, e, h, g, 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.DarkRed)));

            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 texture coordinates
            geometry.TextureCoordinates.Add(new Point(0, 1));
            geometry.TextureCoordinates.Add(new Point(1, 1));
            geometry.TextureCoordinates.Add(new Point(1, 0));
            geometry.TextureCoordinates.Add(new Point(0, 0));

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

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

            return geometry;
        }
    }
}


2.207 Beiträge seit 2011
vor 10 Jahren

Hallo c#Leon,

was für Lösungen bringen dich denn weiter?

[Hinweis] Wie poste ich richtig? Punkt 1.1, 4a,b und c

Gruss

Coffeebean

H
67 Beiträge seit 2006
vor 10 Jahren

Um die Frage zu beantworten müsstest du aus meiner Sicht mal konkreter beschreiben, wie du den Würfel genau erstellt hast, d.h. liegt ein 3D Model vor, welche Ausgabe benutzt du etc. ? Sonst ist es schwer Dir zu helfen.

5.657 Beiträge seit 2006
vor 10 Jahren

Aber damit man auch alle Seite sehen kann sollte er sich um die eigen Achse drehen so das man alle Seiten sehen kann.

Animation Overview

Christian

Weeks of programming can save you hours of planning