سؤال

float4x4 matInvViewProj;

float4 GetPointPosition(float2 Tex0)
{
    float4 PosImageSpace;
    PosImageSpace.xy = float2(Tex0*2-1);
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
    return mul(PosImageSpace,matInvViewProj);
}

هذا جزء من بلدي pixelshader. لماذا يوجد خطأ مترجم؟ أنا تجميعها في ps_3_0.بدون ال mul() انها تجمع.

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

المحلول

آه، أعتقد أن هذا منطقي. نظرا لأن مكونات W غير تهيئة، فسوف تفشل وظيفة Mul ().

لتجنب ذلك يمكنك تهيئة متجهك على النحو التالي:

float4 PosImageSpace = (float4)0;

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

لتجميع Shader باستخدام FXC في تكوين Debug:

fxc /Od /Zi /T fx_3_0 /Fo Directional_Lighting_Shader_Defaul.fxo Directional_Lighting_Shader_Defaul.fx

يمكنك العثور على FXC في C: Program Files Microsoft DirectX SDK Utilities Bin

لإعداد خطوة بناء مخصصة في Visual Studio تحقق من هذه العينة من DirectX SDK و أيضا تحقق هذا الموقع

تحقق أيضا هذه المقالة على MSDN حول استخدام FXC.

نصائح أخرى

هذا غريب: أضفت هذا الخط:

PosImageSpace.w = 0.0f;

والآن يجمع جيدا. هكذا يبدو الآن:

float4x4 matInvViewProj;

float4 GetPointPosition(float2 Tex0)
{
    float4 PosImageSpace;
    PosImageSpace.xy = float2(Tex0*2-1);
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
    PosImageSpace.w = 0.0f;
    return mul(PosImageSpace,matInvViewProj);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top