الحصول على الحد الأدنى والحد الأقصى للأشعة فوق البنفسجية المقدمة (Direct3D)

StackOverflow https://stackoverflow.com/questions/3647687

سؤال

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

أرغب في القيام بذلك باستخدام تظليل Direct3D 9 (وأدنى نموذج تظليل ممكن) لتسريع المعالجة. يمكن أن يكون تظليل Vertex بسيطًا مثل أخذ كل إحداثيات UV من قمة الإدخال وتمريرها ، غير المعدلة ، إلى ظلال البكسل. من ناحية أخرى ، سيتعين على تظليل البيكسل أن يأخذ القيم التي ينتجها تظليل Vertex واستخدامها لحساب الحد الأدنى والحد الأقصى للأشعة فوق البنفسجية.

ما أود معرفته هو:

  1. كيف يمكنني الحفاظ على الحالة (قيم Min و Max الحالية) بين دعوات تظليل البكسل؟
  2. كيف أحصل على القيم النهائية للمين والأكان التي تنتجها التظليل في برنامجي؟

هل هناك أي طريقة للقيام بذلك في HLSL ، أم أنني عالق في القيام بذلك باليد؟ إذا لم ينجح HLSL ، فما هي الطريقة الأكثر فعالية للقيام بذلك دون استخدام التظليل؟

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

المحلول

1) أنت لا. 2) سيكون عليك القيام بقراءة مرة أخرى في مرحلة ما. ستكون هذه عملية بطيئة إلى حد ما وتسبب كشك خط أنابيب.

بشكل عام ، لا أستطيع التفكير في طريقة جيدة للقيام بذلك. ما الذي تحاول بالضبط أن تتألم مع هذا؟ قد يكون هناك طريقة أخرى لتحقيق النتيجة التي تتبعها.

يمكنك "قد تكون" الحصول على شيء ما باستخدام أهداف عرض متعددة وكتابة الأشعة فوق البنفسجية لكل بكسل إلى هدف العرض. بعد ذلك ، ستحتاج إلى تمرير هدف العرض إلى الذاكرة الرئيسية ثم تحليله لقيم MIN و MAX. هذا حل بطيء وقبيح للغاية.

إذا تمكنت من القيام بذلك كمرور منفصل ، فقد تكون قادرًا على تقديم هدف جديد جدًا واستخدام تمريرة واحدة مع ممر أقصى و 1 مع مزيج من مزيج من Min Alpha. مرة أخرى ... ليس حلًا رائعًا.

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