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;
}
}
}
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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.
Aber damit man auch alle Seite sehen kann sollte er sich um die eigen Achse drehen so das man alle Seiten sehen kann.
Christian
Weeks of programming can save you hours of planning