سؤال

ولدي مشهد برنامج OpenGL التقديم على طبقة EAGLView وبعض العناصر الأخرى (الدوائر ومثل هذه) تقديم على UIView (وهو أخ لEAGLView المتمركزة فوقه). هل من الممكن لمزج الألوان بين طبقتين؟ أود أن تفعل بعض الفرق مزج للحصول على تأثير انعكاس على الألوان من EAGLView.

ولقد لعب حولها مع CGBlendMode ولكن يبدو فقط أن تؤثر على ما أنا رسم في أن العرض الحالي. وأعتقد أن هذه لديها ما تفعله مع CGContext ولكن أنا قليلا ضبابي على التفاصيل، يمكنني إجبار UIView وEAGLView لديهم نفس CGContext بحيث مزج يعمل بينهما؟

تحظى بتقدير جميع

وتعليمات، التصحيحات والإيضاحات. شكرا لك مقدما، -S

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

المحلول

والجواب باختصار هو لا يمكنك. يتبع الجواب طويل.

حسب EAGLView يجب أن تقصد فئة فرعية من UIView التي يتم تضمينها في قالب ES برنامج OpenGL في كسكودي. ما الذي يجعل هذه الفئة خاص هو أن أسلوب فئة layerClass يتم تجاوز وتعود الطبقة CAEAGLLayer بدلا من فئة CALayer، كما هو الافتراضي.

وUIView والعمل CALayer في أزواج. وتدعم كافة الكائنات UIView من قبل CALayer، وCALayer هو موضوع مسؤولا عن تخطيط وتقديم لشاشة. وUIView هو مندوب إلى CALayer، ويكون مسؤولا عن رسم عليه في الرسومات عند الحاجة.

وCALayer سيتيح انها مندوب (وUIView) رسم في CGContextRef. ومن سياق واحد في UIView، لذلك لا يمكنك استخدام CGBlendMode لمزج عدة آراء لأنها سوف تعمل فقط ضمن سياق واحد UIView واحد.

وينبغي أن يتم مزج CALayer استخدام خصائص التصفية. وتعرف هذه آيفون OS لكن المرشحات المتاحة و<م> غير معروف فقا للوثائق. وذلك لأن الصورة الأساسية غير متوفرة على نظام التشغيل اي فون في هذا الوقت.

نصائح أخرى

وأنا لا أعتقد أن عليك أن تكون قادرا على مزج الألوان في هذا الاتجاه. وأفضل ما يمكن القيام به هو لديك واحدة التعتيم تماما على الآخر، أو الطبقة العليا شبه شفافة (في هذه الحالة، سترى الجزء الأسفل) - ولكنك لن تكون قادرة على القيام نوع XOR الرسم

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