دايركت 11 ، وإرسال القوام متعددة لتظليل
-
12-12-2019 - |
سؤال
باستخدام هذا الرمز يمكنني إرسال نسيج واحد إلى تظليل:
devcon->PSSetShaderResources(0, 1, &pTexture);
بالطبع أنا جعلت بتكستور من قبل:دي 3 دي إكس 11 كريتشادر ريسورسيفيو من الملف
تظليل:ملمس2د الملمس;
return color * Texture.Sample(ss, texcoord);
أنا حاليا فقط إرسال نسيج واحد إلى تظليل, ولكن أود أن أرسل القوام متعددة, كيف يكون هذا ممكنا?
يعطيكم الصّحة.
المحلول
باستخدام صفائف الملمس.عند ملء الخاص بك D3D11_TEXTURE2D_DESC
نظرة على ArraySize
عضو.هذا الهيكل تنازلي هو الذي يحصل على تمريرها إلى ID3D11Device::CreateTexture2D
.ثم في تظليل الخاص بك يمكنك استخدام مؤشر أخذ العينات تكسكورد 3 الذي يشير إلى أي نسيج 2 د في الصفيف الذي تشير إليه.
تحديث: لقد أدركت للتو أنك قد تتحدث عن القيام بذلك عبر مكالمات متعددة (أي.الجغرافية المختلفة)، وفي هذه الحالة تقوم بتحديث عرض مورد نسيج التظليل.إذا كنت تستخدم إطار التأثيرات ، فيمكنك استخدامه معرف 3 دي إكس 11 تأثيرات شادر ريسورسي متغير:: سيتريسورس, ، أو بدلا من ذلك إعادة ربط نسيج جديد باستخدام PSSetShaderResources
.ومع ذلك ، إذا كنت تحاول المزج بين مواد متعددة ، فيجب عليك استخدام مصفوفات النسيج.
قد تحتاج أيضا إلى النظر في القوام 3 د ، والتي توفر وسيلة طبيعية لاستيفاء بين القوام المجاورة في مجموعة (في حين يتم فرض المصفوفات 2 د تلقائيا إلى أقرب عدد صحيح) عن طريق العنصر 3 في تكسكورد.انظر هلسل sample
ملاحظات.
نصائح أخرى
يمكنك استخدام قوام متعددة طالما أن عددهم لا يتجاوز مواصفات ملف تعريف Shader.هنا مثال: رمز HLSL: giveacodicetagpre.
c ++ رمز: giveacodicetagpre.
لذلك على سبيل المثال رمز HLSL أعلاه، سيكون: giveacodicetagpre.
أو: giveacodicetagpre. يمكن أن تكون أسماء
HLSL تعسفية ولا تضطر إلى تتوافق مع أي اسم محدد - فهارس فقط المسألة.أثناء "التسجيل (TXX)؛"البيانات غير مطلوبة، أود أن أوصي بك لاستخدامها لتجنب الارتباك حول الملمس الذي يتوافق مع الفتحة التي