سؤال

لقد حددت

m_lpD3DDevice->SetRenderTarget(0,Buffer1);
m_lpD3DDevice->SetRenderTarget(1,Buffer2);
m_lpD3DDevice->SetRenderTarget(2,Buffer2);

وإذا قمت بتقديم Pixelshader يؤثر فقط على هدف التجسيد الأول.

انها هيكل الإخراج هو

struct PS_OUTPUT
{
    float4 Color0    :  COLOR0;
    float4 Color1    :  COLOR1;
    float4 Color2    :  COLOR2;
};

ما الذي يجب علي فعله للتأثير على أهداف الفعلين الآخرين أيضا؟

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

المحلول 3

أخيرا لدي الجواب الآن. كل ما كان علي فعله هو ضبط

ColorWriteEnable = red | green | blue;

في ملف التأثير. كل شيء آخر كان صحيحا. لكنني لا أعرف لماذا جعل هذا الأمر يعمل.

نصائح أخرى

في شادر بكسل الخاص بك، تأكد من أنك تعيد من الهيكل وليس العذراء. أيضا لا تطرد Semantion Color0 إلى توقيع الوظيفة، وهذا لا يفعل هذا:

PS_OUTPUT myPS(VS_OUTPUT): COLOR0

أنا duobt التي سوف copmpile، ولكن قد تخلط بين المترجم. تشبه MRT بسيطة يشبه هذا:

PS_OUTPUT myPS(VS_OUTPUT)
{
    PS_OUTPUT out;
    out.color0 = float4(0.5,0.5,0.5,1.0);
    out.color1 = float4(0.2,0.5,0.8,1.0);
    out.color2 = float4(0.8,0.5,0.2,1.0);
    return out;
}

ما هي Buffer0،1 & 2؟ هل هم نتيجة للدعوة إلى Eremetexture ()؟ (أو بالأحرى سطح من هذا الملمس). إذا كانت كذلك، تأكد من إنشاء الملمس مع إشارة الاستخدام المستهدف Render: d3dusage_rendertarget.

تأكد من أن بطاقتك يمكن أن تدعم التقديم إلى أكثر من RT. (نسيت كيفية القيام بذلك - لكنني أشك في أنها لن تدعمها.)

إذا قمت بإنشاء المخازن المؤقتة بشكل صحيح، فقم بتعيينها بشكل صحيح، وكتابة القيم الصحيحة من Shader Pixel بشكل صحيح، ثم لا أرى ما قد يحدث خطأ. ماذا يقول بيكس * عن MRTS؟ هل هم BENIG

ملاحظة: هل نأمل أن تصدر مكالمة رسم، أليس كذلك؟ :)

* PIX هو تطبيق في DirectX SDK. إذا لم تستخدمها من قبل، فأنت تفتقد حقا :)

هناك قناع ملون منفصل للكتابة لكل هدف. قناع الكتابة الافتراضي للهدف 0 هو 0xf (تمكين جميع القنوات)، ولكن الافتراضي للأهداف الأخرى هو 0x0. تجاوز هذا في ملف التأثير هو طريقة واحدة (هل ترغب في تمكين Alpha على الرغم من؟)، أو يمكنك تغييره باستخدام SetRenderstate. انظر الوثائق ل d3drs_colorwriteenable {1،2،3} الولايات.

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