سؤال

وعادة، وكنت تستخدم شيئا مثل:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);

glLineWidth(2.0f);

glVertexPointer(2, GL_FLOAT, 0, points);
glEnableClientState(GL_VERTEX_ARRAY);

glDrawArrays(GL_LINE_STRIP, 0, num_points);

glDisableClientState(GL_VERTEX_ARRAY);

وانها تبدو جيدة في محاكاة فون، ولكن على اي فون خطوط الحصول رقيقة للغاية وث / س أي التعرج المضادة.

وكيف تحصل AA على iPhone؟

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

المحلول

ويمكن للمرء أن تحقيق تأثير مضاد التعرج بثمن بخس جدا باستخدام القمم مع التعتيم 0. وإليك مثال صورة لشرح:

ومقارنة مع AA:

ويمكنك قراءة ورقة حول هذا هنا:

http://research.microsoft.com/en- لنا / أم / الناس / هوب / overdraw.pdf

هل يمكن أن تفعل شيئا على هذا النحو:

// Colors is a pointer to unsigned bytes (4 per color).
// Should alternate in opacity.
glColorPointer(4, GL_UNSIGNED_BYTE, 0, colors);
glEnableClientState(GL_COLOR_ARRAY);

// points is a pointer to floats (2 per vertex)
glVertexPointer(2, GL_FLOAT, 0, points);
glEnableClientState(GL_VERTEX_ARRAY);

glDrawArrays(GL_TRIANGLE_STRIP, 0, points_count);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

نصائح أخرى

وابتداء من عام <م> دائرة الرقابة الداخلية الإصدار 4.0 لديك حلا سهلا، فمن الممكن الآن لاستخدام الحواف لكامل المشهد برنامج OpenGL ES مع بضعة أسطر من التعليمات البرمجية المضافة. (وتقريبا أي خسارة الأداء، على الأقل على GPU SGX).

لرمز يرجى قراءة ما يلي أبل ديف المنتدى الموضوع . وهناك أيضا بعض الصور عينة كيف يبدو بالنسبة لي على بلدي بلوق.

<ع> استخدام <لأ href = "http://answers.oreilly.com/topic/1669-how-to-render-anti-aliased-lines-with-textures-in-ios-4/" يختلط = "noreferrer "> http://answers.oreilly.com/topic/1669-how-to-render-anti-aliased-lines-with-textures-in-ios-4/ كنقطة انطلاق، وكنت قادرا للحصول على خطوط المصقولة مثل هذه:

وأنها ليست مثالية كما أنها ليست جميلة مثل تلك التي كنت قد تعادل مع كور الرسومات، ولكنها جيدة جدا. أنا فعلا رسم نفس المنوال (القمم) مرتين - مرة واحدة مع أكبر الملمس واللون، ثم مع نسيج أصغر والأبيض الشفاف

وهناك التحف عندما تتداخل خطوط محكم جدا وأشعة الفا تبدأ تتراكم.

ونهج واحد حول هذا القيد هو tessellating الخطوط الخاصة بك إلى شرائح مثلث محكم (كما رأينا هنا ).

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

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

وأتذكر على وجه التحديد جدا لأنني حاولت ذلك وليس هناك طريقة بسيطة للقيام بذلك باستخدام OpenGL على اي فون. يمكنك رسم باستخدام CGPaths وCGContextRef، ولكن ذلك سيكون أبطأ بكثير.

ووضع هذا في بلدكم تقديم طريقة وعازلة setUpFrame ... سوف تحصل ظهور مكافحة مستعارة.

/*added*/
//[_context presentRenderbuffer:GL_RENDERBUFFER];

//Bind both MSAA and View FrameBuffers.
glBindFramebuffer(GL_READ_FRAMEBUFFER_APPLE, msaaFramebuffer); 
glBindFramebuffer(GL_DRAW_FRAMEBUFFER_APPLE, framebuffer );  
// Call a resolve to combine both buffers 
glResolveMultisampleFramebufferAPPLE();   
// Present final image to screen 
glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer);
[_context presentRenderbuffer:GL_RENDERBUFFER];
/*added*/
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top