كيف يمكنني الحصول على فرشاة نسيج ملونة لتظهر في Open GL ES على خلفية بيضاء؟

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

  •  07-07-2019
  •  | 
  •  

سؤال

أريد الرسم باستخدام فرشاة الملمس، بلون من اختياري، على خلفية بيضاء باستخدام OpenGLES.

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

أفضل ما يمكنني الحصول عليه هو استخدام معلمات المزج (GL_SRC_ALPHA، GL_ONE) بعد ضبط بعض الألوان الساطعة المعتمة على خط لون باهت على خلفية رمادية (وليست خلفية بيضاء نقية).ولكن عندما أضبط الخلفية على اللون الأبيض النقي، لا يظهر الخط.

على الأقل في الوضع الحالي، لا تظهر الحواف السوداء للنسيج الأصلي.معظم مجموعات المزج الأخرى التي أحاولها لا تتسبب في ظهور أي شيء حتى على اللون الرمادي، أو رؤية الفرشاة بأكملها بما في ذلك الحواف السوداء، وهو أمر غير جيد.

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

هذه هي الصورة التي أستخدمها كفرشاة:

نص بديل http://www.coldcoffeeandjuice.com/OpaqueBrush.png

إليك بعض المخرجات الناتجة، عندما تكون الخلفية رمادية، ويتم ضبط glColor4f على (1، 0، 0، 1)، على سبيل المثال، أحمر نقي، ويتم استخدام الفرشاة على مجموعة من نقاط GL_POINTs المتتالية.لاحظ أن الشيء الجيد في هذا هو أن الجزء الأبيض فقط من صورة الفرشاة يظهر اللون الأحمر - هذا صحيح.الأجزاء السيئة هي أن اللون الأحمر الذي أريد أن يكون نقيًا ومشرقًا يكون شاحبًا بسبب مزجه مع الخلفية (؟) و/أو بياض الفرشاة (؟) بحيث يتم غسله بالكامل إذا كانت الخلفية بيضاء نقية .يستخدم هذا معلمات المزج كما هو موضح أعلاه (src_alpha، one).

alt text
(مصدر: Coldcoffeeandjuice.com)

إليك ما أريد رؤيته، نظرًا للون الأحمر النقي (شكرًا لـ Paintbrush):

alt text
(مصدر: Coldcoffeeandjuice.com)

هل يمكن لأي شخص أن يساعدني في فهم ما أفعله بشكل خاطئ؟

شكرًا!

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

المحلول

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

عليك القيام بما يلي قبل البدء في تقديم "الطلاء":

  1. تأكد أولاً من أن الفرشاة تحتوي على قناة ألفا تتوافق مع شكلها - أي أن قناة ألفا يجب أن تبدو مشابهة لصورة الفرشاة التي قمت بوضعها.

  2. يتم العرض باستخدام هذه الحالات (لاحظ وجود مسافة للالتفاف حول ترميز wiki):

// Make the current material colour track the current color
glEnable( GL_COLOR_MATERIAL );

// Multiply the texture colour by the material colour.
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );

// Alpha blend each "dab" of paint onto background
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

أنظر أيضا:
http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/colormaterial.html

http://www.khronos.org/opengles/documentation/opengles1_0/html/glTexEnv.html

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