سؤال

لدي DirectX مدمن مخدرات تستخدم في رمز C ++ يرسم النص والعفريت. لقد اختبرته ووجهت جيدًا إلى تطبيق ثنائي الأبعاد. ومع ذلك ، عندما جربته مع تطبيق ثلاثي الأبعاد (بعض الألعاب المعقدة بالفعل) ، كان النص فقط مرئيًا. من ذلك استنتجت أن العفريت لا يتم إفراطه في الحصول على شيء آخر ، وبالتالي فإن النص سيكون أيضًا. أنا وضعت أعلام

    SetVertexShader(0);
    SetPixelShader(0);
    SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);

    //SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
    SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); 
    SetRenderState(D3DRS_ZENABLE, false);
    SetRenderState(D3DRS_LIGHTING, FALSE);
    SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

    SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
    SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
    SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
    SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
    SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);

لسبب ما، ALPHABLEND تسبب في عدم وجود العفريت على الإطلاق في أي تطبيق ، لذلك لم أتمكن من تمكينه وتم التعليق عليه.

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

أيضًا ، ما هو z-ondex الذي يجب أن أقوم بتعيينه في العفريت في حال كان ذلك حقًا "تحت بعض العفاريت/الكائنات الأخرى؟

(لست مؤلفًا لأي شيء يتم رسمه على الجهاز ، ولدي فقط واجهة برمجة تطبيقات DirectX مدمن مخدرات ولا أعرف حتى رمز التطبيق الذي أرسمه).

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

المحلول

أولاً ، أسهل طريقة لتقديم العفاريت إلى جهاز D3D هي ID3DXSPRITE.

ثانياً ، أعتقد أن هناك خطأً مطبعيًا وتهدف إلى ضبط Colorop على تعديله ، وليس Alphaop.

ومع ذلك ، أعتقد أنه في كلتا الحالتين لن ينتهي بك الأمر إلا بإخراج غير مرئي إذا كان ألفا الخاص بك هو 0. هل يمكن أن يكون الملمس الذي تستخدمه شفافًا تمامًا؟

أيضًا ، لا تنسَ استعادة جميع حالات العرض التي قمت بتغييرها (بشكل مباشر أو غير مباشر) بعد الانتهاء من رمز التجسيد الخاص بك. هناك طريقة بسيطة للقيام بذلك وهي التقاط كتلة حالة وتطبيقها بعد الانتهاء من تقديمك.

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