C # использовать кватернионы на 3D-кубе в WPF - PullRequest
0 голосов
/ 04 июня 2018

Я использую датчик, который посылает кватернионы на мой компьютер.Теперь я хочу повернуть куб, который я создал в своем приложении.

<Viewport3D Name="viewport3D1" Margin="568,-85,-104,176" RenderTransformOrigin="0.317,0.482">

        <Viewport3D.Triggers>
            <EventTrigger RoutedEvent="Viewport3D.Loaded">
                <BeginStoryboard>
                    <Storyboard>

                        <QuaternionAnimation Storyboard.TargetName="myQuaternionRotation3D" />

                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Viewport3D.Triggers>
        <Viewport3D.Camera>
            <PerspectiveCamera x:Name="camMain" Position="6 5 4" LookDirection="-6 -5 -4">
            </PerspectiveCamera>
        </Viewport3D.Camera>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <DirectionalLight x:Name="dirLightMain" Direction="-1,-1,-1">
                </DirectionalLight>
            </ModelVisual3D.Content>
        </ModelVisual3D>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <GeometryModel3D>
                    <GeometryModel3D.Geometry>
                        <MeshGeometry3D x:Name="meshMain"
                            Positions="0 0 0  1 0 0  0 1 0  1 1 0  0 0 1  1 0 1  0 1 1  1 1 1"
                            TriangleIndices="2 3 1  2 1 0  7 1 3  7 5 1  6 5 7  6 4 5  6 2 0  2 0 4  2 7 3  2 6 7  0 1 5  0 5 4">
                        </MeshGeometry3D>
                    </GeometryModel3D.Geometry>
                    <GeometryModel3D.Material>
                        <DiffuseMaterial x:Name="matDiffuseMain">
                            <DiffuseMaterial.Brush>
                                <SolidColorBrush Color="Red"/>
                            </DiffuseMaterial.Brush>
                        </DiffuseMaterial>
                    </GeometryModel3D.Material>
                </GeometryModel3D>
            </ModelVisual3D.Content>
        </ModelVisual3D>
    </Viewport3D>

Я нашел несколько примеров в интернете, но они не работают.Я добавил функцию QuaternionAnimation, как это.

                private void cube_Rotation(string[] text) { 
        try
        {
            Double WValue = System.Convert.ToDouble(text[0]);
            Double XValue = System.Convert.ToDouble(text[1]);
            Double YValue = System.Convert.ToDouble(text[2]);
            Double ZValue = System.Convert.ToDouble(text[3]);

            endQuaternion = new Quaternion(XValue, YValue, ZValue, WValue);
        }
        catch
        {
            MessageBox.Show("Set non-null values for the quaternion.");
        }

        myQuaternionRotation3D = new QuaternionRotation3D(endQuaternion);
        myRotateTransform3D.Rotation = myQuaternionRotation3D;

        //update matrix display
        qrotationMatrix3D = myRotateTransform3D.Value;
    }

Кроме того, инициализация не работает должным образом.У кого-нибудь есть идея или пример использования кватернионов в 3D-кубе в WPF?Буду рад, если кто-нибудь сможет мне помочь.

...