English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
هذا المقال يشرح مثالًا على كيفية رسم المثلث على GLSurfaceView باستخدام OpenGL في Android واستخدام طرق النسج والرؤية الكاميرا. نشارك هذا معكم لتكونوا قد استفدتم منه، وأما التفاصيل فتتمثل فيما يلي:
تعريف المثلث
يسمح لنا OpenGL باستخدام الأرقام الثلاثية لتعريف الأجسام. قبل رسم المثلث، يجب علينا تحديد إحداثيات نقاطه. نستخدم عادةً مصفوفة لتخزين إحداثيات الربعات.
OpenGL ES يقوم بتعيين [0,0,0] (X,Y,Z) في منتصف GLSurfaceView، [1,1,0] في الزاوية اليمنى العلوية، [-1,-1,0] في الزاوية السفلية اليسرى.
رسم المثلث
قبل رسم المثلث، يجب علينا إخبار OpenGL بأننا نستخدم مجموعة النقاط. ثم نستخدم دالة الرسم لرسم المثلث.
خطوات التجربة:
1. إضافة فئة جديدة Triangle
代码如下:
public class Triangle { public Triangle()} { float triangleCoords[] = { // X, Y, Z هذا مثلث متساوي الأضلاع -0.5f, -0.25f, 0, 0.5f, -0.25f, 0, 0.0f, 0.559016994f, 0 }; // بدء تحميل حفظ نقاط المثلث ByteBuffer vbb = ByteBuffer.allocateDirect( // (عدد قيم الإحداثيات * 4 بت لكل عدد عشوائي) triangleCoords.length * 4); vbb.order(ByteOrder.nativeOrder()); // استخدم طريقة ترتيب البتات الخاصة بالجهاز triangleVB = vbb.asFloatBuffer(); // أنشئ حفظ نقاط عشوائية من ByteBuffer triangleVB.put(triangleCoords); // أضف إحداثيات النقاط إلى حفظ البتات العشوائية triangleVB.position(0); // جعل الحفظ يقرأ الordinate الأول {} public void draw(GL10 gl) { gl.glColor4f(0.63671875f, 0.76953125f, 0.22265625f, 0.0f); // تعيين اللون الحالي gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleVB);// تعيين النقاط gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);// رسم مثلث {} private FloatBuffer triangleVB; {}
2. أضف عضو خاص من فئة Triangle يسمى mTriangle في فئة myGLRenderer وأجعل التحويل في بناء.
代码如下:
public myGLRenderer() { mTriangle = new Triangle(); {}
3. في نهاية دالة onSurfaceCreated() في فئة myGLRenderer، أضف طريقة glEnableClientState() لتمكين مصفوفة النقاط.
代码如下:
@Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // TODO Auto-generated method stub gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); {}
4. أضف طريقة رسم الثلاثي الأضلاع في نهاية دالة onDrawFrame() في فئة myGLRenderer.
代码如下:
@Override public void onDrawFrame(GL10 gl) { // TODO Auto-generated method stub gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); mTriangle.draw(gl); {}
بهذا، قمنا بإنشاء رسم للثلاثي الأضلاع. ولكن لاحظنا أن الثلاثي الأضلاع ليس هو الزاوية المثلثة كما كنا نريد، لأن OpenGL دائمًا يفترض أن الشاشة مربعة، مما يؤدي إلى أن الرسومات تتوسع بناءً على نسبة الطول إلى العرض للشاشة. للحصول على عرض صحيح، نحتاج إلى تحويل الرسومات إلى الموقع الصحيح. سنقوم بتشغيل هذه الميزة في الفصل التالي.
عادة ما ليست شاشات الأجهزة الأندرويد مربعة، بينما يقوم OpenGL دائمًا بتقديم نظام الأسقام المربعة إلى هذه الأجهزة، مما يؤدي إلى عدم ظهور الرسومات بتناسب واقعي. لحل هذه المشكلة، يمكننا استخدام نماط المشهدين ووجهة الرؤية في OpenGL لتحويل أماكن الرسومات لتتناسب مع مختلف شاشات الأجهزة.
خطوات التجربة:
1. تعديل دالة onSurfaceCreated() في فئة myGLRenderer لتفعيل نمط GL10.GL_PROJECTION، حساب نسبة الطول إلى العرض للشاشة واستخدام هذه النسبة لتحويل أماكن الأجسام.
代码如下:
@Override public void onSurfaceChanged(GL10 gl, int width, int height) { // TODO Auto-generated method stub gl.glViewport(0, 0, width, height); float ratio = (float) width / height; gl.glMatrixMode(GL10.GL_PROJECTION); // إعداد المصفوفة الحالية كمصفوفة المشهدين gl.glLoadIdentity(); // إعادة تعيين المصفوفة إلى قيمتها الافتراضية gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7); // إعداد مصفوفة المشهدين بناءً على نسبة الطول إلى العرض {}
2. تعديل طريقة onDrawFrame() في myGLRenderer لتفعيل نمط MODELVIEW، واستخدام GLU.gluLookAt() لضبط وجهة الرؤية.
代码如下:
@Override public void onDrawFrame(GL10 gl) { // TODO Auto-generated method stub gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); // إعداد الصيغة الحالية إلى نموذج عرض gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); // إعادة تعيين الصيغة إلى حالتها الافتراضية // إعداد وجهة النظر GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f); mTriangle.draw(gl); {}
بهذا، النسبية التي نرسمها دائمًا صحيحة، وليس هناك تأثير من الجهاز مما يؤدي إلى تمدد وتشوه.
بالنسبة للقراء المهتمين بالمزيد من المعلومات المتعلقة بAndroid، يمكنهم التحقق من المقالات التخصيصية على هذا الموقع: 'تحليل تقنيات الرسومات والصور في Android'، 'دليل تعلم تطوير Android من البداية إلى الإحتراف'، 'تحليل تقنيات الت调试 والاستفسارات الشائعة في Android'، 'تحليل تقنيات العمل بالوسائط المتعددة في Android (الصوت، الفيديو، التسجيل، إلخ)'، 'تحليل استخدام العناصر الأساسية في Android'، 'تحليل تقنيات استخدام الرؤية View في Android'، 'تحليل تقنيات استخدام التخطيط layout في Android'، وكذلك 'تحليل استخدام التحكمات في Android'.
آمل أن يساعدك ما ذكرته في هذا المقال في تصميم برامج Android الخاصة بك.
البيان: محتوى هذا المقال تم جمعه من الإنترنت، ويحق للمالك الأصلي الحصول عليه، تم جمع المحتوى من قبل مستخدمي الإنترنت وتم تحميله بشكل تلقائي، لا يمتلك هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل إنساني، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا وجدت محتوى يشتبه في حقوق النسخ، يرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال #بـ @) لإبلاغنا، وقدم الدليل المتعلق بالأدلة، إذا تم التحقق من ذلك، سيتم حذف المحتوى المشبوه فوراً.