C# :: Aufgabe #237 :: Lösung #1

1 Lösung Lösung öffentlich
#237

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

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2108716

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.