سؤال

من هذا الموقع: http://www.catalinzima.com/؟page_id=14.

لقد كنت دائما مرتبكا حول كيفية حساب خريطة العمق.

تقوم وظيفة Vertex Shader بحساب الموضع كما يلي:

VertexShaderOutput VertexShaderFunction(VertexShaderInput input)

{

    VertexShaderOutput output;

    float4 worldPosition = mul(input.Position, World);

    float4 viewPosition = mul(worldPosition, View);

    output.Position = mul(viewPosition, Projection);

    output.TexCoord = input.TexCoord;                            //pass the texture coordinates further

    output.Normal =mul(input.Normal,World);                   //get normal into world space

    output.Depth.x = output.Position.z;

    output.Depth.y = output.Position.w;

    return output;

}

ما هي الإخراج. ditegion.z والإخراج. لست متأكدا من الرياضيات وراء هذا.

وفي شادر بكسل هناك هذا الخط: الإخراج. depth = input.depth.x / input.depth.y؛

إخراج. الإخراج هو الإخراج. opposition.z / النائب لما نفعل هذا؟

وأخيرا في نقطة ظلال نقطة (http://www.catalinzima.com/؟page_id=55.) لتحويل هذا الإخراج لتكون موضع الرمز هو:

 //read depth

    float depthVal = tex2D(depthSampler,texCoord).r;

    //compute screen-space position

    float4 position;

    position.xy = input.ScreenPosition.xy;

    position.z = depthVal;

    position.w = 1.0f;

    //transform to world space

    position = mul(position, InvertViewProjection);

    position /= position.w;

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

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

المحلول

لفهم هذا تماما، ستحتاج إلى فهم كيف تعمل الجبر التي تدعم تحولات ثلاثية الأبعاد. لذلك لا يساعد حقا (أو لا أعرف كيفية استخدامه) للقيام بمصفوفة الرياضيات، لذلك يجب أن تكون دون صيغة فاخرة. هنا بعض التفسير رفيع المستوى على الرغم من:

إذا نظرت عن كثب، ستلاحظ أن جميع التحولات التي تحدث في موضع Vertex (من النموذج إلى العالم لعرض لإحداثيات القصاصات) يحدث لاستخدام ناقلات 4D. هذا صحيح. 4D. لماذا، عندما نعيش في عالم ثلاثي الأبعاد؟ لأنه في هذا التمثيل 4D، فإن جميع التحولات التي نريدها عادة أن نفعلها قابلة للضرب مصفوفة. هذا هو ليس القضية إذا بقينا في تمثيل ثلاثي الأبعاد. وفصل مصفوفة هي ما هي GPU جيدة في.

ماذا تتوافق قمة الرأس في 3D في 4D؟ هذا يكون حيثما تستمتع. ال (x, y, z) نقطة يتوافق مع الخط (a.x, a.y, a.z, a). وبعد يمكننا الاستيلاء على أي نقطة على هذا الخط للقيام بالرياضيات التي نحتاجها، ونحن عادة ما نختار أسهل واحد، a=1 (بهذه الطريقة، ليس علينا القيام بأي ضجة، فقط تعيين w=1).

بحيث الإجابات إلى حد كبير كل الرياضيات التي تنظر إليها. لإظهار نقطة ثلاثية الأبعاد في 4D، حددنا = 1، للحصول على مكون من متجه 4D، نريد المقارنة مع أحجامنا القياسية في ثلاثي الأبعاد، علينا تقسيم هذا المكون من خلال W.

هذا النظام الإحداثي، إذا كنت ترغب في الغوص أعمق، يسمى homogeneous coordinates.

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