DirectX المُدار: تحديد العمق (ترتيب Z) للعفاريت التي تحتوي على مادة ونص

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

سؤال

أنا أستخدم DirectX المُدار لمحاولة رسم نسيج وجزء من النص على الشاشة باستخدام Sprite.لسوء الحظ ، إذا وضعت النص والملمس في نفس الكائن ، فإن النسيج يحل محل النص (يتخطى؟) النص بغض النظر عن الترتيب الذي أقوم به لأوامر الرسم.

بما أنني سأرغب في النهاية في تداخل الزخارف والنصوص ، فكيف أحدد ترتيب Z لهذه النقوش المتحركة.هل يجب أن تكون كل طبقة في كائن منفصل؟

ها هو الكود الحالي: Genacodicetagpre

ملاحظة: استخدام SpriteFlags.SortDepthBackToFront أو SpriteFlags.SortDepthBackToFront لا يغير السلوك.

ربما يكون هذا سوء فهم مفاهيمي من جانبي ، ولكن إذا كانت التعليمات البرمجية مفيدة ، فسأقبل بامتنان العينات في DirectX غير المُدار باستخدام C ++ أو أي لغة.

شكرًا جزيلاً مقدمًا!

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

المحلول

إذا كنت تريد تغيير ترتيب Z للعرض ، فيجب عليك تعيين قيمة Z في أمر الرسم.إذا قمت بتعيين الكل على 0 ، فستحصل على كل أنواع الغرابة.مشكلتك الأكبر هي أن DrawText لا يسمح لك بتعيين عمق Z وهو عبارة عن جميع أنواع القمامة.

وبالتالي فإن فرصتك الوحيدة هي استخدام ID3DXSprite :: SetTransform.تحتاج فقط إلى تحويل Z- الإحداثيات مرة أخرى معها من أجل موضع ترتيب z ذي الصلة.لذا يمكنك ضبط تحويلاتك (بافتراض أنك تستخدم مصفوفات عالم الهوية) على النحو التالي (مثال C ++)

Genacodicetagpre

ستستمر بعد ذلك في تمرير الموضع (0 ، 0 ، 0) للعرض وسيكتسب النص أيضًا العمق الصحيح لترتيب z.

أتمنى أن يساعدك هذا

نصائح أخرى

هذا هو الجواب الذي تقدمت به (الملصق):

قدمت Goz معظم المعلومات اللازمة لحل المشكلة.بشكل أساسي ، بالنسبة للقوام ، يمكنك تحديد ترتيب z باستخدام المعلمة الثالثة من Verctor3.أوضحت التجربة أن ترتيب (1) z ينتقل من 0.0 إلى 1.0 ، مع كون 0.0 الأقرب و 1.0 هو الأبعد.أي شيء خارج هذا النطاق لا يظهر إطلاقًا.

بالنسبة للنص ، نظرًا لعدم وجود فرصة لتحديد حرف z في المكالمة ، فأنت بحاجة إلى استخدام اقتراح Goz لمصفوفة التحويل.

في النهاية ، هذا هو الرمز الذي استخدمته تقريبًا. Genacodicetagpre

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