Android OpenGL ES 및 2D
음, 여기 내 요청이 있습니다. 나는 이미 OpenGL을 모른다. 그리고 나는 그것을 배우고 싶지 않다. 그러나 나는 안드로이드 개발을 목표로하고 있기 때문에 OpenGL ES를 직접 배우고 싶다. 2D 게임 을 개발하기 위해 OpenGL ES를 배우고 싶습니다 . 성능 목적으로 선택했습니다 (기본 SurfaceView 드로잉은 RT 게임과 관련하여 그다지 효율적이지 않기 때문입니다). 제 질문은 어디에서 시작할까요? 한 달 이상 Google을 검색하고 어디서나 찾은 튜토리얼 / 예제를 읽고 / 시도했지만 솔직히 말해서 큰 도움이되지 않았고 두 가지 이유가 있습니다.
- 내가 본 거의 모든 기사 / 튜토리얼은 3D와 관련이 있습니다 (2D 스프라이트 그리기를 수행하는 방법 만 배우고 싶습니다).
- 모든 기사가 "삼각형을 그리는 방법 (정점 포함)", "메시를 만드는 방법"... 등과 같은 특정 항목을 대상으로하기 때문에 시작할 기초가 없습니다.
일부 소스 코드도 읽으려고했지만 (예 : 복제 섬) 코드가 너무 복잡하고 필요하지 않은 많은 것들이 포함되어 있습니다. 결과 : 이상한 클래스 이름과 물건을 가진 100 개의 .java 파일 사이에서 길을 잃었습니다.
제가 찾고있는 코스와 같은 코스는 없다고 생각 합니다만, 누군가 제가하고있는 일을 배울 수있는 가이드 라인과 링크를 줄 수 있다면 매우 기뻐할 것입니다 (OpenGL ES 2D Sprites 렌더링 만 가능! 3D 없음 ).
나는 비슷한 상황에 처해 있었다.
내가 openGL을 시작한 방법은 매우 기본적인 GLSurfaceView 샘플 / 데모를 살펴 보는 것입니다.
먼저 앱 활동을 설정하고 기본 캔버스를 설정합니다.
복제 섬 소스 코드 파일 : GameRenderer.java에서 2D (스프라이트) 렌더링을위한 적절한 GL 플래그로 캔버스를 설정하는 방법을 알아보십시오. 복제 섬의 동일한 작성자가 만든 SpriteMethodTest를 실제로 살펴 봐야합니다. http://code.google.com/p/apps-for-android/source/browse/trunk/SpriteMethodTest
내 자신의 코드를 게시 한이 질문을 참조하십시오 .OpenGL을 사용하여 Canvas 대체-Android
캔버스를 설정 한 후 다음과 같이 호출하여 시작합니다. gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
그 후에 스프라이트를 렌더링 할 준비가되었습니다. 먼저 스프라이트를 텍스처에로드해야합니다. http://qdevarena.blogspot.com/2009/02/how-to-load-texture-in-android-opengl.html
그러나 이것은 스프라이트를로드하는 데 도움이되는 튜토리얼입니다. http://tkcodesharing.blogspot.com/2008/05/working-with-textures-in-androids.html
이것이 내가하는 방법이며 Texture.java라는 클래스가 있습니다.
public class Texture
{
/*Begin public declarations*/
public float x = 0;
public float y = 0;
public float z = 0;
public float width = 0;
public float height = 0;
/*Begin Private Declarations*/
private GL10 gl;
public int[] texture; //holds the texture in integer form
private int texture_name;
private int[] mCropWorkspace;
private final BitmapFactory.Options sBitmapOptions;
/*Begin Methods*/
public Texture( GL10 gl_obj )
{
gl = gl_obj;
texture = new int[1];
mCropWorkspace = new int[4];
sBitmapOptions = new BitmapFactory.Options();
sBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565;
//Log.d(TAG, "Initializing Texture Object");
}
public int get_texture_name( )
{
return texture_name;
}
/*Loads the resource to memory*/
public boolean Load( Bitmap bitmap ) //rename this to glLoad and don't have it as an initializer parameter
{
/*many thanks to sprite method test if this works*/
if ( gl == null )
{
Log.e(TAG, "Failed to load resource. Context/GL is NULL");
return false;
}
int error;
int textureName = -1;
gl.glGenTextures(1, texture, 0);
textureName = texture[0];
//Log.d(TAG, "Generated texture: " + textureName);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
mCropWorkspace[0] = 0;
mCropWorkspace[1] = bitmap.getHeight();
mCropWorkspace[2] = bitmap.getWidth();
mCropWorkspace[3] = -bitmap.getHeight();
((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,
GL11Ext.GL_TEXTURE_CROP_RECT_OES, mCropWorkspace, 0);
error = gl.glGetError();
if (error != GL10.GL_NO_ERROR)
{
Log.e(TAG, "GL Texture Load Error: " + error);
}
//Log.d(TAG, "Loaded texture: " + textureName);
return true;
}
}
그런 다음 내 onDrawFrame () 메서드에서 간단히 다음을 수행합니다.
Texture texture = ...
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture.texture[0]);
((GL11Ext) gl).glDrawTexfOES((float)(draw_x + 0.5), (float)(draw_y + 0.5), 0, tile_width, tile_height);
그러면 openGL 캔버스에 2D 스프라이트를 그릴 수 있습니다. 나는 이것에 대한 직접적인 튜토리얼이 실제로 없다는 것을 알았습니다. 바라건대 저는 제 개발 블로그에 하나를 게시 할 것입니다 : http://developingthedream.blogspot.com/
2D 프로그래밍은 평면에 제한된 3D 프로그래밍입니다. 3D를 배울 수밖에 없지만 사용할 때는 z = 0으로 설정하면됩니다.
There is an offical book on OpenGL ES. That might give you the intro that you're after: http://www.amazon.com/OpenGL-ES-2-0-Programming-Guide/dp/0321502795/
I would definately checkout Android - Chris Pruett Google IO lecture Writing real-time games for Android redux
grab the PDF also
it's really helpful on many levels, Chris has really great experience with creating games for mobile devices
but if you are really focused on 2D then start with Canvas http://developer.android.com/guide/topics/graphics/index.html#drawing-with-canvas
Another option depends on skill level is Flash+AdobeAIR to Android, I myself like and luv programming level and as you further start developing you will find out why.
OpenGL : Check for - Nehe Productions
a couple of apps you may want to put on your phone that is worth it and they are free is: OpenGL Demo, min3d Framework, RedBook Sample
You can see the project: https://github.com/ChillingVan/android-openGL-canvas/blob/master/README-en.md This implements canvas with OpenGL. It is pure Java. It implements parts of what normal canvas can do.
I see a lot of good info has already been provided. I wanted to share a site that helped get up to speed on OpenGLE quick! It only took a few months and had a custom coordinate system based on the Cartesian coordinate system. I was able to render 3D object no camera using Augmented Reality techniques.
I started with only programming experience, with no OpenGL experience. I used Ray Wenderlich's tutorials site. The information provided there is top notch and easy to comprehend. He cuts through most of the superfluous information and provides what you need to know to be productive quickly. I highly recommend this tutorial as the starting point: http://www.raywenderlich.com/5223/beginning-opengl-es-2-0-with-glkit-part-1
The other resource I'd recommend is a book by Erik M Buck, titled Learning OpenGL ES for iOS.
Some criticized it saying it was too simplistic. But that's exactly what I was looking for. It helped me understand all of the basics and gave me an idea on where i should go next to learn more advanced stuff. But not surprisingly, I was able to build my augmented reality app using the simple techniques i'd learned from Ray's site and Erik's book. Thanks to them both for sharing!!!
There are a lot of online tutorials that you can follow, but for a beginner nothing can replace this one: A real Open GL ES 2.0 2D tutorial
참고URL : https://stackoverflow.com/questions/3553244/android-opengl-es-and-2d
'developer tip' 카테고리의 다른 글
Helper와 Utility 클래스의 차이점은 무엇입니까? (0) | 2020.08.27 |
---|---|
Amazon Elastic Search Cluster에 대한 적절한 액세스 정책 (0) | 2020.08.27 |
git rerere를 활성화하는 데 단점이 있습니까? (0) | 2020.08.27 |
JVM 스택 기반 및 Dalvik VM 레지스터 기반 이유는 무엇입니까? (0) | 2020.08.27 |
scikit-learn의 class_weight 매개 변수는 어떻게 작동합니까? (0) | 2020.08.27 |