سؤال

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

أنا لا أعرف ما أفعله خطأ، وأنا أيضا رسم مشهد ثلاثي الأبعاد (بسيط حقا) للتحقق من بياناتي، ويبدو أن كل شيء صحيح بالنسبة لي.

يمكن لأي شخص يرجى التحقق من xaml التالية وقل لي ماذا أفعل الخطأ؟ أريد فقط إنشاء طائرة في الطائرة XZ، أي نوع من "الكلمة" مع الكاميرا التي تنظر إليها من الأعلى.

<Viewport3D>
    <Viewport3D.Camera>
        <PerspectiveCamera Position="0 1 0"
                           LookDirection="0 -1 0"
                           FieldOfView="60"/>
    </Viewport3D.Camera>
    <Viewport3D.Children>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <AmbientLight Color="White"/>
            </ModelVisual3D.Content>
        </ModelVisual3D>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <GeometryModel3D>
                    <GeometryModel3D.Geometry>
                        <MeshGeometry3D>
                            <MeshGeometry3D.Positions>
                                <Point3D X="-1" Y="0"   Z="1"/>
                                <Point3D X="1"  Y="0"   Z="1"/>
                                <Point3D X="1"  Y="0"   Z="-1"/>
                                <Point3D X="-1" Y="0"   Z="-1"/>
                            </MeshGeometry3D.Positions>
                            <MeshGeometry3D.TriangleIndices>
                                0 1 2  0 2 3
                            </MeshGeometry3D.TriangleIndices>
                            <MeshGeometry3D.Normals>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                            </MeshGeometry3D.Normals>
                        </MeshGeometry3D>
                    </GeometryModel3D.Geometry>
                    <GeometryModel3D.Material>
                        <MaterialGroup>
                            <DiffuseMaterial>
                                <DiffuseMaterial.Brush>
                                    <SolidColorBrush Color="Red" Opacity="0.75"/>
                                </DiffuseMaterial.Brush>
                            </DiffuseMaterial>
                        </MaterialGroup>
                    </GeometryModel3D.Material>

                </GeometryModel3D>
            </ModelVisual3D.Content>
        </ModelVisual3D>
    </Viewport3D.Children>

</Viewport3D>

تعديل: لقد جربت من موقف الكاميرا و LookDirection، وأخيرا شاهدت شيئا عندما غيرت LookDirection ليكون ليس عمودي إلى الطائرة، على سبيل المثال:

<PerspectiveCamera Position="0 2 0"
                   LookDirection="0 -2 1"
                   FieldOfView="60"/>

هل هذا السلوك الطبيعي؟

شكرا جزيلا!

جيهو.

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

المحلول

عندما تشير إلى الكاميرا، من المهم أن نشاقب من أجل حتى متجه وكذلك اتجاه نظرة.

المشكلة تأتي من القيمة الافتراضية للمتجه لأعلى (PerspectiveCamera.UpDirection)، وهو [0،1،0]. يجب ألا يكون مظهر الكاميرا والمتواجف متوازيا، لأنه في هذه الحالة سيكون من المستحيل معرفة الطريقة الأولى.

نظرا لأن الطراز الخاص بك موجود في الطائرة XZ، وتريد أن تنظر إليه، يمكنك ببساطة ضبط تحديث التحديثات إلى [0،0،1] أو [1،0،0]، بحيث تصل النقاط في اتجاه إما z أو المحور x، على التوالي. ولكن إذا كنت تخطط للسماح للكاميرا بإلقاء نظرة على جميع الاتجاهات، فيجب عليك العناية بالمتجه لأعلى أيضا.

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