Triangle opengl en android
Soy nuevo en el opengl así que estoy usando la guía del desarrollador androide.He hecho todo lo que dice, pero está mostrando un error a la fuerza para cerrar.
En mi archivo del gato del registro está demostrando el error siguiente
- ¿Cómo debo manejar la comunicación entre los hilos de la IA y el bucle del juego principal?
- El método más rápido y eficiente para buscar los 3 primeros números?
- Cómo revertir una transacción en Android?
- Vista de lista personalizada de Android
- ¿Cómo importar ZXING a android studio?
03-30 20:13:14.342: E/AndroidRuntime(317): FATAL EXCEPTION: GLThread 8 03-30 20:13:14.342: E/AndroidRuntime(317): java.lang.IllegalArgumentException: No configs match configSpec 03-30 20:13:14.342: E/AndroidRuntime(317): at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:760) 03-30 20:13:14.342: E/AndroidRuntime(317): at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:916) 03-30 20:13:14.342: E/AndroidRuntime(317): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1246) 03-30 20:13:14.342: E/AndroidRuntime(317): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1116)
Mi archivo de manifiesto es como sigue
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.opengl" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".HelloOpenGLES20" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Mi clase de actividad es la siguiente
import android.app.Activity; import android.content.Context; import android.opengl.GLSurfaceView; import android.os.Bundle; public class HelloOpenGLES20 extends Activity { private GLSurfaceView mGLView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create a GLSurfaceView instance and set it // as the ContentView for this Activity mGLView = new HelloOpenGLES20SurfaceView(this); setContentView(mGLView); } @Override protected void onPause() { super.onPause(); // The following call pauses the rendering thread. // If your OpenGL application is memory intensive, // you should consider de-allocating objects that // consume significant memory here. mGLView.onPause(); } @Override protected void onResume() { super.onResume(); // The following call resumes a paused rendering thread. // If you de-allocated graphic objects for onPause() // this is a good place to re-allocate them. mGLView.onResume(); } } class HelloOpenGLES20SurfaceView extends GLSurfaceView { public HelloOpenGLES20SurfaceView(Context context){ super(context); // Create an OpenGL ES 2.0 context. setEGLContextClientVersion(2); // Set the Renderer for drawing on the GLSurfaceView setRenderer(new HelloOpenGLES20Renderer()); } }
Mi clase superficial es como sigue
import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLES20; import android.opengl.GLSurfaceView; public class HelloOpenGLES20Renderer implements GLSurfaceView.Renderer { private FloatBuffer triangleVB; private final String vertexShaderCode = "attribute vec4 vPosition; \n" + "void main(){ \n" + " gl_Position = vPosition; \n" + "} \n"; private final String fragmentShaderCode = "precision mediump float; \n" + "void main(){ \n" + " gl_FragColor = vec4 (0.63671875, 0.76953125, 0.22265625, 1.0); \n" + "} \n"; private int mProgram; private int maPositionHandle; public void onSurfaceCreated(GL10 unused, EGLConfig config) { // Set the background frame color GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); // initialize the triangle vertex array initShapes(); int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode); int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode); mProgram = GLES20.glCreateProgram(); // create empty OpenGL Program GLES20.glAttachShader(mProgram, vertexShader); // add the vertex shader to program GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program GLES20.glLinkProgram(mProgram); // creates OpenGL program executables // get handle to the vertex shader's vPosition member maPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); } public void onDrawFrame(GL10 unused) { // Redraw background color GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); // Add program to OpenGL environment GLES20.glUseProgram(mProgram); // Prepare the triangle data GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false, 12, triangleVB); GLES20.glEnableVertexAttribArray(maPositionHandle); // Draw the triangle GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3); } public void onSurfaceChanged(GL10 unused, int width, int height) { GLES20.glViewport(0, 0, width, height); } private void initShapes(){ float triangleCoords[] = { // X, Y, Z -0.5f, -0.25f, 0, 0.5f, -0.25f, 0, 0.0f, 0.559016994f, 0 }; // initialize vertex Buffer for triangle ByteBuffer vbb = ByteBuffer.allocateDirect( // (# of coordinate values * 4 bytes per float) triangleCoords.length * 4); vbb.order(ByteOrder.nativeOrder());// use the device hardware's native byte order triangleVB = vbb.asFloatBuffer(); // create a floating point buffer from the ByteBuffer triangleVB.put(triangleCoords); // add the coordinates to the FloatBuffer triangleVB.position(0); // set the buffer to read the first coordinate } private int loadShader(int type, String shaderCode){ // create a vertex shader type (GLES20.GL_VERTEX_SHADER) // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER) int shader = GLES20.glCreateShader(type); // add the source code to the shader and compile it GLES20.glShaderSource(shader, shaderCode); GLES20.glCompileShader(shader); return shader; } }
- InetAddress.getByName en Android
- Java.lang.NoClassDefFoundError mientras ejecuta la prueba JUnit en Netbeans
- Acceso a bases de datos en Android
- Google Play detecta nuevos permisos después de usar Android Studio
- Cliente Android para servicio web REST con seguridad básica
- ¿Se pueden usar múltiples cartas de barras apiladas con Achartengine?
- Android Studio - ProGuard IOException Duplicate Zip Entry
- Decodificación y Codificación. Diferentes implementaciones de la clase Base64 en android.util. * Y java.util. *?
La razón por la que obtiene este error se debe a que el dispositivo que está probando no admite OpenGL ES 2.0. Probablemente esté probando esto en el emulador, que no es compatible con esa versión de OpenGL.
Sólo prueba probarlo en un dispositivo real y verás que funcionará bien.
Este problema se produce debido a la razón que la imagen 3d no es compatible con cualquier dispositivo virtual android. Si alguien desea ejecutar la imagen 3d, entonces él o ella debe ser utilizado cualquier dispositivo físico.
- ¿Cómo terminar la actividad de los padres de la actividad infantil sin terminar / detener la actividad infantil?
- Cómo hacer Android Live Wallpaper utilizando LibGDx?