gallery 3d 코드 분석의 glsurfaceview
저자: 류 펑
날짜: 2010 - 04 - 01
안 드 로 이 드 SDK 가 제공 하 는 GlSurface View 를 어떻게 사용 하여 OpenGL ES 개발 을 하 는 지 간략하게 소개 한다.
SDK 의 android. opengl. GLSurfaceView 클래스 는 다음 과 같은 기능 을 제공 합 니 다.
간단 한 GLSurface View 응용 프로그램
package com.example.android.apis.graphics;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
public class ClearActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLView = new GLSurfaceView(this);
mGLView.setRenderer(new ClearRenderer());
setContentView(mGLView);
}
@Override
protected void onPause() {
super.onPause();
mGLView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mGLView.onResume();
}
private GLSurfaceView mGLView;
}
class ClearRenderer implements GLSurfaceView.Renderer {
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// Do nothing special.
}
public void onSurfaceChanged(GL10 gl, int w, int h) {
gl.glViewport(0, 0, w, h);
}
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
}
}
은 프레임 당 화면 을 검은색 으로 설정 하 는 간단 한 기능 을 가지 고 있 습 니 다.그러나 이것 은 Activity 라 이 프 사이클 에서 완전한 작업 을 하 는 OpenGL 프로그램 이다.activity 가 일시 정 지 될 때 렌 더 링 을 일시 정지 합 니 다.activity 가 계속 되면 계속 렌 더 링 합 니 다.이 프로그램 을 비 대화 형 데모 프로그램 으로 사용 할 수 있 습 니 다.ClearRenderer. onDrawFrame () 인터페이스 에 OpenGL 호출 을 추가 하여 많은 그림 을 그 릴 수 있 습 니 다.GLSurface View. Render 인 터 페 이 스 는 세 가지 방법 이 있 습 니 다.입력 을 어떻게 처리 하 는 지 입력 하 십시오. 만약 에 상호작용 형 응용 프로그램 (예 를 들 어 게임) 을 개발 하려 면 하위 클래스 화 GLSurface View 가 필요 합 니 다. 이 를 통 해 입력 이 벤트 를 얻 을 수 있 습 니 다.다음 예 가 있 습 니 다.
package com.google.android.ClearTest;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.MotionEvent;
public class ClearActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLView = new ClearGLSurfaceView(this);
setContentView(mGLView);
}
@Override
protected void onPause() {
super.onPause();
mGLView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mGLView.onResume();
}
private GLSurfaceView mGLView;
}
class ClearGLSurfaceView extends GLSurfaceView {
public ClearGLSurfaceView(Context context) {
super(context);
mRenderer = new ClearRenderer();
setRenderer(mRenderer);
}
public boolean onTouchEvent(final MotionEvent event) {
queueEvent(new Runnable(){
public void run() {
mRenderer.setColor(event.getX() / getWidth(),
event.getY() / getHeight(), 1.0f);
}});
return true;
}
ClearRenderer mRenderer;
}
class ClearRenderer implements GLSurfaceView.Renderer {
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// Do nothing special.
}
public void onSurfaceChanged(GL10 gl, int w, int h) {
gl.glViewport(0, 0, w, h);
}
public void onDrawFrame(GL10 gl) {
gl.glClearColor(mRed, mGreen, mBlue, 1.0f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
}
public void setColor(float r, float g, float b) {
mRed = r;
mGreen = g;
mBlue = b;
}
private float mRed;
private float mGreen;
private float mBlue;
}
이 응용 은 각 프레임 에서 화면 을 비 웁 니 다.tap 화면 에서 화면의 색 을 바 꿉 니 다.여 기 는 ClearGLSurfaceView. onTouchEvent () 에 queueEvent () 를 사 용 했 습 니 다.queueEvent () 방법 은 UI 스 레 드 와 렌 더 링 스 레 드 간 통신 에 사 용 됩 니 다.synchronized 방법 과 같은 자바 스 레 드 통신 기술 도 사용 할 수 있 지만 quueEvent 의 가장 간단 한 스 레 드 통신 방법 입 니 다.다른 GLSurface View 예 는 Android SDK 의 API Demo 예 프로그램 에서 도 많은 예 가 있 습 니 다.setEGLConfigChooser(boolean needDepth)
red, green, blue, alpha 와 depth 를 맞 추 려 면 다음 과 같은 인 터 페 이 스 를 사용 하 십시오. setEGLConfigChooser(int redSize, int greenSize,int blueSize, int alphaSize,int depthSize, int stencilSize)
지속 형 렌 더 링 모델 & 알림 형 렌 더 링 모델 은 대부분 3D 응용 프로그램 입 니 다. 예 를 들 어 게임, 시 뮬 레이 션 등 은 지속 형 렌 더 링 애니메이션 입 니 다.또한 일부 3D 응용 은 반응 식 (reactive) 으로 사용자 가 동작 이 있 으 면 수 동적 으로 기다린다.이런 응용 프로그램 에 대해 화면 을 계속 렌 더 링 하 는 것 은 시간 낭비 이다.반응 식 응용 을 개발 하면 다음 방법 setEGLConfigChooser(EGLConfigChooser configChooser)
을 사용 하여 지속 적 인 렌 더 링 을 중단 할 수 있 습 니 다.호출 GLSurfaceView.setRenderMode(RENDERMODE_WHEN_DIRTY);
시 프로그램 이 화면 을 렌 더 링 합 니 다.GLSurface View 를 디 버 깅 합 니 다. setDebugFlags () 방법 은 log 나 오류 검 사 를 활성화 할 수 있 습 니 다. OpenGL ES 호출 을 디 버 깅 하 는 데 도움 이 됩 니 다.구체 적 으로 사용 할 때 GLSurface View 의 구조 함수 에서 setRender () 를 호출 하기 전에 GLSurface View. setDebugFlags () 를 호출 하면 됩 니 다.다음은 예 입 니 다. GLSurfaceView.requestRender()
Reference이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Error configuring application listener of class org.springframework.web.context.ContextLoaderListeneSolution: 1. Copy org.springframework.web-3.0.5.RELEASE.jar to the WEB-INF/lib directory 2. Add in web.xml contextConfig...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.