Android uygulamanızda OpenGL ES ile grafik çizmek için bir
kapsayıcıyı otomatik olarak görüntülemesini sağlar. Bunu yapmanın daha basit yollarından biri, hem
GLSurfaceView
ve GLSurfaceView.Renderer
. CEVAP
GLSurfaceView
, OpenGL ile çizilen grafiklere ve
GLSurfaceView.Renderer
, bu görünüm içinde nelerin çizileceğini kontrol eder. Okuyucu Gelirleri Yöneticisi'ni
daha fazla bilgi için OpenGL ES
geliştirici kılavuzuna.
GLSurfaceView
, OpenGL ES grafiklerini öğelerinize eklemenin
bir uygulamadır. Tam ekran veya neredeyse tam ekran grafik görünümü için makul bir seçimdir.
OpenGL ES grafiklerini düzenlerinin küçük bir bölümüne dahil etmek isteyen geliştiriciler,
TextureView
göz atın. Kendin yap geliştiricileri için de
SurfaceView
kullanarak bir OpenGL ES görünümü oluşturmak mümkündür, ancak bu,
kod yazmaya başladım.
Bu derste, GLSurfaceView
ve GLSurfaceView.Renderer
uygulamalarını basit bir şekilde minimum düzeyde nasıl uygulayabileceğiniz açıklanmaktadır.
olabilir.
Manifest'te OpenGL ES kullanımını bildirme
Uygulamanızın OpenGL ES 2.0 API'yi kullanması için aşağıdakileri eklemeniz gerekir: beyana ekleyin:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
Uygulamanız doku sıkıştırması kullanıyorsa hangi sıkıştırma biçimlerini de bildirmeniz gerekir yalnızca uyumlu cihazlara yüklenecek şekilde destekler.
<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" /> <supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />
Doku sıkıştırma biçimleri hakkında daha fazla bilgi için OpenGL geliştirici kılavuzu.
OpenGL ES grafikleri için bir etkinlik oluşturun
OpenGL ES kullanan Android uygulamaları,
kullanıcı arayüzü. Diğer uygulamalardan temel farkı, uygulamalarınızın düzenini
etkinliği'ne dokunun. Birçok uygulamada TextView
, Button
ve ListView
özelliklerini kullansanız da OpenGL ES kullanan bir uygulamada
bir GLSurfaceView
ekleyin.
Aşağıdaki kod örneğinde,
Birincil görünüm olarak GLSurfaceView
:
Kotlin
class OpenGLES20Activity : Activity() { private lateinit var gLView: GLSurfaceView public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Create a GLSurfaceView instance and set it // as the ContentView for this Activity. gLView = MyGLSurfaceView(this) setContentView(gLView) } }
Java
public class OpenGLES20Activity extends Activity { private GLSurfaceView gLView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create a GLSurfaceView instance and set it // as the ContentView for this Activity. gLView = new MyGLSurfaceView(this); setContentView(gLView); } }
Not: OpenGL ES 2.0, Android 2.2 (API Düzeyi 8) veya sonraki sürümleri gerektirir. Bu nedenle, Android projenizin bu API'yi veya üstünü hedeflediğinden emin olun.
GLSurfaceView nesnesi oluşturma
GLSurfaceView
, OpenGL ES çizebileceğiniz özel bir görünümdür
gösterir.
Kendi başına pek bir şey sağlamaz. Nesnelerin gerçek çizimi
Bu görünümde ayarladığınız GLSurfaceView.Renderer
. Hatta bunun kodu
çok ince olduğu için genişletmeyi atlamak ve değiştirilmemiş bir resim oluşturmak
GLSurfaceView
örneğini alır, ancak bunu yapmayın. Bu dersi şu kadar uzatmanız gerekiyor:
Dokunmaya yanıt verme bölümünde ele alınan
dokunma etkinliklerini yakalamak için
etkinlikleri dersini inceleyin.
Bir GLSurfaceView
için gerekli kod minimum düzeyde olduğundan hızlıca
yaygın proje yönetimi
Bunu kullanan etkinlikte bir iç sınıf oluşturmanız yeterlidir:
Kotlin
import android.content.Context import android.opengl.GLSurfaceView class MyGLSurfaceView(context: Context) : GLSurfaceView(context) { private val renderer: MyGLRenderer init { // Create an OpenGL ES 2.0 context setEGLContextClientVersion(2) renderer = MyGLRenderer() // Set the Renderer for drawing on the GLSurfaceView setRenderer(renderer) } }
Java
import android.content.Context; import android.opengl.GLSurfaceView; class MyGLSurfaceView extends GLSurfaceView { private final MyGLRenderer renderer; public MyGLSurfaceView(Context context){ super(context); // Create an OpenGL ES 2.0 context setEGLContextClientVersion(2); renderer = new MyGLRenderer(); // Set the Renderer for drawing on the GLSurfaceView setRenderer(renderer); } }
GLSurfaceView
uygulamanıza diğer isteğe bağlı eklemelerden biri de
öğesini kullanarak görünümü yalnızca çizim verilerinizde değişiklik olduğunda çizmek için
GLSurfaceView.RENDERMODE_WHEN_DIRTY
ayar:
Kotlin
// Render the view only when there is a change in the drawing data renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY
Java
// Render the view only when there is a change in the drawing data setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
Bu ayar, siz alana kadar GLSurfaceView
karesinin yeniden çizilmesini önler
requestRender()
numaralı telefonu ara, yani daha fazlası
verimli olmasını sağlar.
Oluşturucu sınıfı oluşturma
GLSurfaceView.Renderer
sınıfının veya oluşturucunun uygulanması,
geliştiren diğer bir uygulama da ilginçleşmeye başlıyor. Bu sınıf
kontroller
ilişkili olduğu GLSurfaceView
üzerinde nelerin çizildiğini gösterir. Her biri 100'den az gösterim alan
oluşturmak için hangi üç yöntem kullanılır?
GLSurfaceView
üzerinde nasıl çizim yapılır?
onSurfaceCreated()
- Görünümün OpenGL ES ortamını ayarlamak için bir kez çağrılır.onDrawFrame()
- Her biri için çağrıldı yeniden çizebilirsiniz.onSurfaceChanged()
- Şu durumda aranır: Örneğin, cihazın ekran yönü değiştiğinde görünümün geometrisi değişir.
Burada, bir OpenGL ES oluşturucunun çok temel bir uygulamasını görebilirsiniz. Bu uygulama, yalnızca bir
GLSurfaceView
içinde siyah arka plan:
Kotlin
import javax.microedition.khronos.egl.EGLConfig import javax.microedition.khronos.opengles.GL10 import android.opengl.GLES20 import android.opengl.GLSurfaceView class MyGLRenderer : GLSurfaceView.Renderer { override fun onSurfaceCreated(unused: GL10, config: EGLConfig) { // Set the background frame color GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f) } override fun onDrawFrame(unused: GL10) { // Redraw background color GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT) } override fun onSurfaceChanged(unused: GL10, width: Int, height: Int) { GLES20.glViewport(0, 0, width, height) } }
Java
import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLES20; import android.opengl.GLSurfaceView; public class MyGLRenderer implements GLSurfaceView.Renderer { public void onSurfaceCreated(GL10 unused, EGLConfig config) { // Set the background frame color GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); } public void onDrawFrame(GL10 unused) { // Redraw background color GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); } public void onSurfaceChanged(GL10 unused, int width, int height) { GLES20.glViewport(0, 0, width, height); } }
Hepsi bu kadar! Yukarıdaki kod örnekleri, aşağıdaki gibi basit bir Android uygulaması oluşturur: OpenGL kullanarak siyah bir ekran görüntüler. Bu kod çok ilginç bir şey yapmasa da grafik öğeleri çizmeye başlamak için ihtiyacınız olan temeli atmış OpenGL'ye dokunun.
Not: OpengGL ES 2.0 API'lerini kullanırken bu yöntemlerde neden GL10
parametresi bulunduğunu merak ediyor olabilirsiniz.
Bu yöntem imzaları, Android çerçevesi kodunu korumak amacıyla 2.0 API'leri için tekrar kullanılır.
daha basit hale getirir.
OpenGL ES API'leri hakkında bilginiz varsa, artık bir OpenGL ES kurulumu gerçekleştirebilmeniz gerekir. ve grafikler çizmeye başlayın. Ancak, projenizi planlarken OpenGL ile başlayıp birkaç ipucu daha için sonraki derslere geçin.