English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

إنشاء Activity باستخدام GLSurfaceView قائم على OpenGL في Android

يروي هذا المقال مثالاً على إنشاء Activity باستخدام GLSurfaceView في Android قائم على OpenGL. نتشارك هذا معكم لتكونوا قد استفدتم، والتفاصيل كالتالي:

يقدم Android اثنين من الفئات الأساسية لاستخدام API OpenGL ES لإنشاء وتحكم الرسوم: GLSurfaceView و GLSurfaceView.Renderer. لذلك، يجب علينا أولاً فهم هذه الفئتين.

1. GLSurfaceView:

هذه هي فئة عرض، يمكنك استدعاء API OpenGL لرسم الرسوم والتحكم في الأجسام عليها، يشبه وظيفة SurfaceView. يمكننا إنشاء مثابة لـ GLSurfaceView وأضافتها مسبقًا محول الرسوم. إذا كنا نريد تنفيذ بعض العمليات المتعلقة بالشاشة اللمس، يجب على هذه الفئة توسيعها لتشمل مستمعي التفاعل اللمسي.

2. GLSurfaceView.Renderer

يحدد هذا الت接口 الطرق المطلوبة لرسم الرسوم في GLSurfaceView OpenGL. يجب علينا تقديم تنفيذ لهذه الت interfaces في فئة منفصلة واستخدام طريقة GLSurfaceView.setRenderer() لربطها بمثابة GLSurfaceView.

نحتاج إلى تنفيذ الطرق التالية لـ GLSurfaceView.Renderer:

a) onSurfaceCreated(): يُطلق هذا الدالة مرة واحدة عند إنشاء GLSurfaceView. يمكننا استخدامها لضبط متغيرات بيئة OpenGL أو تحديد جسم الرسوميات OpenGL.

b) onDrawFrame(): يُطلق هذا الدالة عند كل مرة يتم فيها إعادة رسم GLSurfaceView. هذه الدالة تستخدم بشكل رئيسي للقيام بعمليات رسم الرسوم.

c) onSurfaceChanged(): يُطلق هذا الدالة عند تغيير خصائص الجيومترية لـ GLSurfaceView، بما في ذلك تغيير الحجم أو اتجاه شاشة الجهاز. على سبيل المثال، يتم استدعاء هذه الدالة عند تحويل الشاشة من وضع القائم إلى أفقي. هذه الدالة تستخدم بشكل رئيسي للرد على تغييرات في وحدة التخزين لـ GLSurfaceView.

خطوات التجربة

1. أضف مشروع جديد

2. أضف فئة جديدة myGLRenderer، وهي تفي بمعيار Renderer لـ GLSurfaceView

كود كما يلي:

public class myGLRenderer implements Renderer {
  @Override
  public void onDrawFrame(GL10 gl) {
    // TODO تم إنشاء البناء التلقائي
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); // إزالة المخزون
  }
  @Override
  public void onSurfaceChanged(GL10 gl, int width, int height) {
    // TODO تم إنشاء البناء التلقائي
    gl.glViewport(0, 0, width, height); // إعداد نطاق الرؤية
  }
  @Override
  public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    // TODO تم إنشاء البناء التلقائي
    gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); // إعداد لون الحذف
  }
}

3. أضف فئة جديدة myGLSurfaceView، وهي فئة GLSurfaceView

كود كما يلي:

public class myGLSurfaceView extends GLSurfaceView {
  public myGLSurfaceView(Context context) {
    super(context);
    // TODO تم إنشاء البناء التلقائي
    mrender = new myGLRenderer();
    setRenderer(mrender);
  }
  private myGLRenderer mrender;
}

4. كود البرنامج الرئيسي كما يلي:

public class HelloOpenGLActivity extends Activity {
  /** تم استدعاء هذا الدالة عند إنشاء النشاط لأول مرة. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(setContentView());
    mGLSurfaceView = new myGLSurfaceView(this);
    setContentView(mGLSurfaceView);//这里我们用mGLSurfaceView来替换以前常用的R.layout.main
  }
  private myGLSurfaceView mGLSurfaceView;
}

这样,我们便完成了使用OpenGL绘制灰色背景的应用。当然这是最基本的功能了。后续我们会一起来探索如何使用OpenGL绘制简单的几何图形。

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android编程之activity操作技巧总结》、《Android视图View技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》及《Android控件用法总结》

آمل أن يساعدك هذا المقال في تصميم برامج Android.

البيان: محتويات هذا المقال تم جمعها من الإنترنت، وتعود حقوق الملكية للمالك الأصلي، تم جمع المحتوى بشكل تلقائي من قبل المستخدمين على الإنترنت، ويحمل هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فأنت مرحب بك في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # ب @) لتقديم الشكوى، وتقديم الدليل المتعلق، إذا تم التحقق من ذلك، فإن هذا الموقع سيقوم بإزالة المحتوى المزعوم بسرعة.

الأسئلة التي قد تهمك