C# :: Aufgabe #237
1 Lösung

Drehbarer 3D-Würfel (WPF)
Anfänger - C#
von RevTreb
- 09.01.2019 um 13:38 Uhr
Es soll ein Würfel in 3-dimensionaler Darstellung in einem ViewPort3D-Container dargestellt werden.
Vorgaben für den Würfel:
Kantenlänge:2
Farbe Seite 1 & 6: Rot
Farbe Seite 2 & 5: Grün
Farbe Seite 3 & 4: Blau
d.h. gegenüberliegende Seiten sollen gleichfarbig sein.
Das Zentrum des Würfels liegt im Ursprung (0,0,0)
Der Würfel soll mittels dreier Slider um die X,Y und Z-Achse drehbar sein.
Die Kamera ist fest so zu positionieren, daß der Würfel gut zu sehen ist.
Schlagworte als Hilfestellung:
ViewPort3D, PerspectiveCamera, ModelVisual3D, GeometryModel3D,
MeshGeometry3D, RotateTransform3D, AxisAngleRotation3D
Viel Spaß / Erfolg! :)
Vorgaben für den Würfel:
Kantenlänge:2
Farbe Seite 1 & 6: Rot
Farbe Seite 2 & 5: Grün
Farbe Seite 3 & 4: Blau
d.h. gegenüberliegende Seiten sollen gleichfarbig sein.
Das Zentrum des Würfels liegt im Ursprung (0,0,0)
Der Würfel soll mittels dreier Slider um die X,Y und Z-Achse drehbar sein.
Die Kamera ist fest so zu positionieren, daß der Würfel gut zu sehen ist.
Schlagworte als Hilfestellung:
ViewPort3D, PerspectiveCamera, ModelVisual3D, GeometryModel3D,
MeshGeometry3D, RotateTransform3D, AxisAngleRotation3D
Viel Spaß / Erfolg! :)
Lösungen:

<Window x:Class="cube2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:cube2" mc:Ignorable="d" Title="Aufgabe_237" Height="450" Width="800"> <Window.Resources> <Point3DCollection x:Key="cubeEdges"> <Point3D X="-1" Y="-1" Z="-1"/> <Point3D X="1" Y="-1" Z="-1"/> <Point3D X="1" Y="1" Z="-1"/> <Point3D X="-1" Y="1" Z="-1"/> <Point3D X="-1" Y="-1" Z="1"/> <Point3D X="1" Y="-1" Z="1"/> <Point3D X="1" Y="1" Z="1"/> <Point3D X="-1" Y="1" Z="1"/> </Point3DCollection> <DiffuseMaterial x:Key="Material_Red" Brush="Red"/> <DiffuseMaterial x:Key="Material_Green" Brush="Green"/> <DiffuseMaterial x:Key="Material_Blue" Brush="Blue"/> <Int32Collection x:Key="Side16">0 2 1 0 3 2 4 5 7 5 6 7</Int32Collection> <Int32Collection x:Key="Side25">1 2 6 1 6 5 0 7 3 0 4 7</Int32Collection> <Int32Collection x:Key="Side34">0 1 5 0 5 4 2 3 6 3 7 6</Int32Collection> </Window.Resources> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition Width="200"></ColumnDefinition> </Grid.ColumnDefinitions> <Viewport3D> <Viewport3D.Camera> <PerspectiveCamera Position="5 5 5" LookDirection="-1 -1 -1" UpDirection="0 1 0" FieldOfView="45"/> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <Model3DGroup> <AmbientLight Color="White"/> <GeometryModel3D Material="{StaticResource Material_Blue}"> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="{StaticResource cubeEdges}" TriangleIndices="{StaticResource Side16}"> </MeshGeometry3D> </GeometryModel3D.Geometry> </GeometryModel3D> <GeometryModel3D Material="{StaticResource Material_Red}"> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="{StaticResource cubeEdges}" TriangleIndices="{StaticResource Side25}"> </MeshGeometry3D> </GeometryModel3D.Geometry> </GeometryModel3D> <GeometryModel3D Material="{StaticResource Material_Green}"> <GeometryModel3D.Geometry> <MeshGeometry3D Positions="{StaticResource cubeEdges}" TriangleIndices="{StaticResource Side34}"> </MeshGeometry3D> </GeometryModel3D.Geometry> </GeometryModel3D> <Model3DGroup.Transform> <Transform3DGroup> <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0"> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="1 0 0" Angle="{Binding ElementName=sliderX, Path=Value}"/> </RotateTransform3D.Rotation> </RotateTransform3D> <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0"> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="0 1 0" Angle="{Binding ElementName=sliderY, Path=Value}"/> </RotateTransform3D.Rotation> </RotateTransform3D> <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0"> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="0 0 1" Angle="{Binding ElementName=sliderZ, Path=Value}"/> </RotateTransform3D.Rotation> </RotateTransform3D> </Transform3DGroup> </Model3DGroup.Transform> </Model3DGroup> </ModelVisual3D.Content> </ModelVisual3D> </Viewport3D> <StackPanel Grid.Column="1" Margin=" 10"> <DockPanel> <Label Content="X:"/> <Slider x:Name="sliderX" Minimum="-180" Maximum="180" VerticalAlignment="Center"/> </DockPanel> <DockPanel> <Label Content="Y:"/> <Slider x:Name="sliderY" Minimum="-180" Maximum="180" VerticalAlignment="Center"/> </DockPanel> <DockPanel> <Label Content="Z:"/> <Slider x:Name="sliderZ" Minimum="-180" Maximum="180" VerticalAlignment="Center"/> </DockPanel> </StackPanel> </Grid> </Window>