الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Transparency in Textures

مغلق
بدأه justnow في 12 نوفمبر 2004 · 7 رد · 909 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مقدمة

حيث ان لدى مثال بسيط يستعمل VertexBuffer حتى يخزن الاحداثيات

التابعة لمثلثين. ثم تتم عملية الرسم DrawPrimitive باستخدام TriangleStrip

حتى يكون الناتج مستطيل. م استعمل صورة Texture , Material و اضاءة.

اليس ذلك جميل الى الان.

السؤال:

اريد ان احدد لون معين فى الصورة التى استخدمها للكساء كلون شفاف, حيث انه اذا كانت

الصورة لشجرة خضراء و كل البقية التى تملاء المستطيل سوداء, احدد اللون الاسود كلون شفاف, لتبقى الشجرة واقفة لوحدها ؟؟؟. هذا يذكرنى بالطريقة المستخدمة فى ال API حيث ان عليك ان تصنع ال mask و تدخل نفسك فى مقارنات منطقية للالوان.

#2

هذه الميزة كانت موجودة في DirectDraw من الواجهة 7 ,, وقت ال DirecX7 كانت أوضح لأننا لم نكن نستخدم Direct3D مالم نبدأ بواجهات DirectDraw أولا ,,

لاّأذكرها حاليا وبالطبع يوجد لها بديل في D3D ,, وسأعرفها وأعطيك رد بإذن الله .

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

الاخ المشرف شكرا عل الرد

بما اننى لا استخدم ال DirectX Wizard فانا امل كل الامثلة

المرفقة و لا استطيع ان اقراء فيها سطرا. لذى يمكننى ان اثقل

عليك و اقول الاتى.

على ما اظن ان المثال الذى يستخدم ال Billboarding يستخدم

هذه التقنية حتى يمثل الاشجار التى على التلة. فهلا استخلصت لى الفكرة

و اكون من الشاكرين :)

#4

ولايهمك يا justnow ,, يكون خير ,, بس في اليومين الجايات ولاأريد أن أقول لك غدا ,,

بإذن الله في اليومين التاليين :)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#5

شكرا الاخ HGB

ولكن يبدو اننى قد وجدت طريقة (وليست الطريقة لانى اظن ان هناك طرق اخرى)

و ساضعها فى المنتدى هنا لتعم الفائدة منها.

اولا لنفترض ان البرنامج الذى الان بين ايدينا يرسم مربعا با ستخدام

DrawPrimitive و يستخدم TrangleStrip.

مع السموت (كلمة السموت هذه تعجبنى عندما استعيرها من المشرف :))يجب

ان يكون ال FVF يحتوي على معلومات عن احداثيات الصورة, دع الصورة تغطى المستطيل.

و الان عند وضع الكاميرا فى الموقع المناسب يمكن ان نرى المستطيل على الشاشة.

لنرسم الصورة بالرسام حيث فى البداية نملاها بالاسود و نضع فى الداخل دائرة مليئة بالاحمر.

و الان لنعدل من هذه النقطة.

1/عند تحميل الصورة يجب استخدام الدالة D3DXCreateTextureFromFileEx

عندها نمرر اللون الذى نرىده ان يكون شفافا. فى هذه الحالة 0xff000000

2/الان سنستخدم المزج Blending. فى الدالة Render يجب ان نفعل المرج

ونضبط المعاملو نكتب السطرين التاليين بعد التفعيل مباشرة.

g_pD3DDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
g_pD3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INSRCALPHA);

يجب ان لايكون هناك اى نوع من اللبس فى هذين السطرين و الا راجع الموضوع عن Blending

الان تتم بقية الدالة كالعادة و لكن لا تنسى ان تقفل المزج

فى هذه العملية اطنان من العيوب, عيوب المزج و علاقته بالترتيب, لهذا اظن ان هناك طرق اخرى.

اذا لم تكن هناك طرق اخرى سوف نضطر الى اللعب بال Z-Buffer الشئ الذى لا اتمناه.

#6

طيب فهمت عليك طريقة دالة CreateTextureFromFileEx ممتازة ,, وأنا لم أفهم أنك لاتملك الأمثلة ,, لذا سأقوم بضغط أمثلة Direct3D كلها وأرفعها للسيرفر وأضع رابط التحميل هنا في المنتدى ,,

وسيكون هناك مجلد مضغوط آخر إسمه Media يجب فك ضغطه لأنه يحتوي على ملفات ال media الموجودة مع SDK .

حجم كل ملف 10 ميجابايت تقريبا ,, هل هي مناسبة أم أقلل الحجم بتقسيم المحتويات إلى أكثر من ملف مضغوط ؟

ال SDK طلب أكثر من مرة وبما أن حجمه كبير سأرفع الأمثلة التي معه عسى أن تفيد ,, وسأرفع ملفات ال .h وال .LIB لاحقا لمن يرد أسرع SDK ,, ونكون عمليين أكثر :)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#7
وأنا لم أفهم أنك لاتملك الأمثلة

كل الامثلة هى عندى موجودة لكن كما قلت لك مسبقا

لكنى قلت فى ردى الاوال

بما اننى لا استخدم ال DirectX Wizard فانا امل كل الامثلة
المرفقة و لا استطيع ان اقراء فيها سطرا

ولقد وجدت هذه الطريقة من موقع اخر:

و لكنى لا اعتقد ان رفع الامثلة على حدى و ال الملفات .h و .lib

على حدى لن يؤدى الى الكثير لان الفارق فى التحميل الجذئى

ليس كبيرا من ان يحمل الشخص الSDK كاملة من موقع microsoft

فى اى محل من المحلات التى تدعم ال DSL ثم ياخدها معه فى CD

اظن ان هذه الفكرة قديمة و لكن لا كانع من استخدامها :)

#8

والله كلامك صحيح يا justnow ,, فعلا ولم أفكر في محلات ال DSL هذه ,, لاعذر لمن يريد تحميل ال SDK أن يذهب لأي محل إنترنت ويحمل ال SDK فعلا ,,

فكرة الرفع غير مجدية حتى لمن لايملك سوى Dial-up ,, ويمكن للجميع رفع الملفات من محلات إنترنت بتكلفة ستكون أقل من تكلفة رفع عشرها بال Dialup .

banner_60_468.gif

NOTHING IS IMPOSSIBLE

هذا الموضوع مغلق.

مواضيع مشابهة