C# :: Aufgabe #237

1 Lösung Lösung öffentlich

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! :)

Lösungen:

vote_ok
von RevTreb (860 Punkte) - 23.02.2019 um 09:58 Uhr
Quellcode ausblenden XML-Code
<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>
2105811

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.