سؤال

<Window x:Class="Viewport2DVisual3DExample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Button on 3D"  
    WindowStyle="None"
    Background="{x:Null}"
    Foreground="{x:Null}"
    AllowsTransparency="True"
    >

    <Viewport3D>
        <Viewport3D.Camera>
            <PerspectiveCamera Position="0, 0, 4"/>
        </Viewport3D.Camera>

        <!-- Front -->
        <Viewport2DVisual3D>
            <!-- Give the plane a slight rotation -->
            <Viewport2DVisual3D.Transform>
                <RotateTransform3D>
                    <RotateTransform3D.Rotation>
                        <AxisAngleRotation3D x:Name="frontTransform" Angle="0" Axis="0, 1, 0" />
                    </RotateTransform3D.Rotation>
                </RotateTransform3D>
            </Viewport2DVisual3D.Transform>

            <!-- The Geometry, Material, and Visual for the Viewport2DVisual3D -->
            <Viewport2DVisual3D.Geometry>
                <MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0"
                                TextureCoordinates="0,0 0,1 1,1 1,0" TriangleIndices="0 1 2 0 2 3"/>
            </Viewport2DVisual3D.Geometry>

            <Viewport2DVisual3D.Material>
                <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="White"/>
            </Viewport2DVisual3D.Material>

            <!-- Here Here Here Here Here  -->
            <Image Source="i:\\tempa\\tm.png" Width="534" Height="458" />

    </Viewport2DVisual3D>

        <!-- Back -->
        <Viewport2DVisual3D>
            <!-- Give the plane a slight rotation -->
            <Viewport2DVisual3D.Transform>
                <RotateTransform3D >
                    <RotateTransform3D.Rotation>
                        <AxisAngleRotation3D x:Name="backTransform" Angle="180" Axis="0, 1, 0" />
                    </RotateTransform3D.Rotation>
                </RotateTransform3D>
            </Viewport2DVisual3D.Transform>

            <!-- The Geometry, Material, and Visual for the Viewport2DVisual3D -->
            <Viewport2DVisual3D.Geometry>
                <MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0"
                                TextureCoordinates="0,0 0,1 1,1 1,0" TriangleIndices="0 1 2 0 2 3"/>
            </Viewport2DVisual3D.Geometry>

            <Viewport2DVisual3D.Material>
                <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="White"/>
            </Viewport2DVisual3D.Material>

            <Button Name="btnBack">Back</Button>
        </Viewport2DVisual3D>

        <ModelVisual3D>
            <ModelVisual3D.Content>
                <DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
            </ModelVisual3D.Content>
        </ModelVisual3D>

    </Viewport3D>

أحاول بناء نافذة ثنائية الجانب باستخدام ViewPort3D. ولكن بعد ذلك واجهت بعض المتاعب حول الحجم.

                <!-- Here Here Here Here Here  -->
            <Image Source="i:\\tempa\\tm.png" Width="534" Height="458" />

أريد أن تكون هذه الصورة بنفس حجم صورة المصدر.

لن تعمل قيمة محددة أو "تلقائي".

كيف يمكنني الحصول على ما أريد؟

هل كانت مفيدة؟

المحلول

معرفتي ثلاثية الأبعاد محدودة ويمكن لشخص ما الإجابة على هذا بشكل أفضل ، ولكن في بيئة ثلاثية الأبعاد ، يعتمد حجم كائن على الكثير من الأشياء .. موضع الكاميرا ، المستوى القريب/البعيدة ، حجم/موقع الكائن ، يتحول تم تطبيقه على هذا الكائن ، وحجم المنفذ ، وربما أشياء أخرى نسيتها. يأخذ المحرك ثلاثي الأبعاد كل الأشياء في الاعتبار عند تقديم الأشياء. ضبط حجم الصورة هو مجرد قطعة واحدة منه.

ربما حاول العبث مع موضع الكاميرا أو إضافة scaletransform إلى الصورة.

نصائح أخرى

ما تبحث عنه هو مصفوفة الإسقاط للكاميرا. هذه المصفوفة تحول نقطة ثلاثية الأبعاد إلى نقطة ثنائية الأبعاد. لذلك من خلال تمرير الإحداثيات ثلاثية الأبعاد من meshgeometry3d ، يمكنك معرفة إحداثيات وأحجام ثنائية الأبعاد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top