DirectX المُدار: تحديد العمق (ترتيب Z) للعفاريت التي تحتوي على مادة ونص
-
29-10-2019 - |
سؤال
أنا أستخدم 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