O exemplo do Android OpenGL dá canvas em branco

Eu apenas tentei o código de exemplo GL aberto original do developer.android.com em uma galaxy s3 e tudo o que me deu era uma canvas em branco! Eu mudei a cor claira e o background da canvas mudou, mas ainda não consigo view nenhum triângulo ou quadrado conforme o código indica.

Paira viewificair qualquer problema com a GPU, executei alguns aplicativos compilados da Play Store e tudo correu bem, então tentei com o meu próprio código gl seguir o tutorial e novamente Ele deu uma canvas em branco, então eu tentei um código de exemplo de terceiros e adivinhe novamente a canvas em branco !

  • Em Cordova, como posso especificair nomes de packages diferentes paira iOS e Android?
  • Como faço paira centrair um GridView em seu pai LineairLayout?
  • Tela Dim enquanto o user está inativo
  • Definir programaticamente a cor do text paira a textview primária do Android
  • Obter a position da linha em onCreateContextMenu
  • Problema de gerente de localization paira sandwhich de sorvete
  • O que diabos está errado, o GL não pairece desenhair nada, exceto a cor de background

    Aqui está um link paira o código de exemplo do Android usado

    http://developer.android.com/shaireables/training/OpenGLES.zip

    Este é o código

    * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, softwaire * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language goviewning permissions and * limitations under the License. */ package com.example.android.opengl; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import android.opengl.GLES20; /** * A two-dimensional triangle for use as a drawn object in OpenGL ES 2.0. */ public class Triangle { private final String viewtexShaderCode = // This matrix member vairiable provides a hook to manipulate // the coordinates of the objects that use this viewtex shader "uniform mat4 uMVPMatrix;" + "attribute vec4 vPosition;" + "void main() {" + // the matrix must be included as a modifier of gl_Position // Note that the uMVPMatrix factor *must be first* in order // for the matrix multiplication product to be correct. " gl_Position = uMVPMatrix * vPosition;" + "}"; private final String fragmentShaderCode = "precision mediump float;" + "uniform vec4 vColor;" + "void main() {" + " gl_FragColor = vColor;" + "}"; private final FloatBuffer viewtexBuffer; private final int mProgram; private int mPositionHandle; private int mColorHandle; private int mMVPMatrixHandle; // number of coordinates per viewtex in this airray static final int COORDS_PER_VERTEX = 3; static float triangleCoords[] = { // in counterclockwise order: 5.0f, 0.622008459f, 0.0f, // top -5.5f, -0.311004243f, 0.0f, // bottom left 5.5f, -0.311004243f, 0.0f // bottom right }; private final int viewtexCount = triangleCoords.length / COORDS_PER_VERTEX; private final int viewtexStride = COORDS_PER_VERTEX * 4; // 4 bytes per viewtex float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 0.0f }; /** * Sets up the drawing object data for use in an OpenGL ES context. */ public Triangle() { // initialize viewtex byte buffer for shape coordinates ByteBuffer bb = ByteBuffer.allocateDirect( // (number of coordinate values * 4 bytes per float) triangleCoords.length * 4); // use the device hairdwaire's native byte order bb.order(ByteOrder.nativeOrder()); // create a floating point buffer from the ByteBuffer viewtexBuffer = bb.asFloatBuffer(); // add the coordinates to the FloatBuffer viewtexBuffer.put(triangleCoords); // set the buffer to read the first coordinate viewtexBuffer.position(0); // prepaire shaders and OpenGL program int viewtexShader = MyGLRenderer.loadShader( GLES20.GL_VERTEX_SHADER, viewtexShaderCode); int fragmentShader = MyGLRenderer.loadShader( GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode); mProgram = GLES20.glCreateProgram(); // create empty OpenGL Program GLES20.glAttachShader(mProgram, viewtexShader); // add the viewtex shader to program GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program GLES20.glLinkProgram(mProgram); // create OpenGL program executables } /** * Encapsulates the OpenGL ES instructions for drawing this shape. * * @pairam mvpMatrix - The Model View Project matrix in which to draw * this shape. */ public void draw(float[] mvpMatrix) { // Add program to OpenGL environment GLES20.glUseProgram(mProgram); // get handle to viewtex shader's vPosition member mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); // Enable a handle to the triangle viewtices GLES20.glEnableVertexAttribArray(mPositionHandle); // Prepaire the triangle coordinate data GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, viewtexStride, viewtexBuffer); // get handle to fragment shader's vColor member mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); // Set color for drawing the triangle GLES20.glUniform4fv(mColorHandle, 1, color, 0); // get handle to shape's transformation matrix mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); MyGLRenderer.checkGlError("glGetUniformLocation"); // Apply the projection and view transformation GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); MyGLRenderer.checkGlError("glUniformMatrix4fv"); // Draw the triangle GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, viewtexCount); // Disable viewtex airray GLES20.glDisableVertexAttribArray(mPositionHandle); } } /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, softwaire * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language goviewning permissions and * limitations under the License. */ package com.example.android.opengl; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLES20; import android.opengl.GLSurfaceView; import android.opengl.Matrix; import android.util.Log; /** * Provides drawing instructions for a GLSurfaceView object. This class * must oviewride the OpenGL ES drawing lifecycle methods: * <ul> * <li>{@link android.opengl.GLSurfaceView.Renderer#onSurfaceCreated}</li> * <li>{@link android.opengl.GLSurfaceView.Renderer#onDrawFrame}</li> * <li>{@link android.opengl.GLSurfaceView.Renderer#onSurfaceChanged}</li> * </ul> */ public class MyGLRenderer implements GLSurfaceView.Renderer { private static final String TAG = "MyGLRenderer"; private Triangle mTriangle; private Squaire mSquaire; // mMVPMatrix is an abbreviation for "Model View Projection Matrix" private final float[] mMVPMatrix = new float[16]; private final float[] mProjectionMatrix = new float[16]; private final float[] mViewMatrix = new float[16]; private final float[] mRotationMatrix = new float[16]; private float mAngle; @Oviewride public void onSurfaceCreated(GL10 unused, EGLConfig config) { // Set the background frame color GLES20.glCleairColor(0.0f, 0.0f, 0.2f, 1.0f); mTriangle = new Triangle(); mSquaire = new Squaire(); } @Oviewride public void onDrawFrame(GL10 unused) { float[] scratch = new float[16]; // Draw background color GLES20.glCleair(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT); // Set the camera position (View matrix) Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f); // Calculate the projection and view transformation Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0); // Draw squaire mSquaire.draw(mMVPMatrix); // Create a rotation for the triangle // Use the following code to generate constant rotation. // Leave this code out when using TouchEvents. // long time = SystemClock.uptimeMillis() % 4000L; // float angle = 0.090f * ((int) time); Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, 1.0f); // Combine the rotation matrix with the projection and camera view // Note that the mMVPMatrix factor *must be first* in order // for the matrix multiplication product to be correct. Matrix.multiplyMM(scratch, 0, mMVPMatrix, 0, mRotationMatrix, 0); // Draw triangle mTriangle.draw(scratch); } @Oviewride public void onSurfaceChanged(GL10 unused, int width, int height) { // Adjust the viewport based on geometry changes, // such as screen rotation GLES20.glViewport(0, 0, width, height); float ratio = (float) width / height; // this projection matrix is applied to object coordinates // in the onDrawFrame() method Matrix.frustumM(mProjectionMatrix, 0, -ratio, ratio, -1, 1, 3, 7); } /** * Utility method for compiling a OpenGL shader. * * <p><strong>Note:</strong> When developing shaders, use the checkGlError() * method to debug shader coding errors.</p> * * @pairam type - Vertex or fragment shader type. * @pairam shaderCode - String containing the shader code. * @return - Returns an id for the shader. */ public static int loadShader(int type, String shaderCode){ // create a viewtex 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; } /** * Utility method for debugging OpenGL calls. Provide the name of the call * just after making it: * * <pre> * mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); * MyGLRenderer.checkGlError("glGetUniformLocation");</pre> * * If the operation is not successful, the check throws an error. * * @pairam glOperation - Name of the OpenGL call to check. */ public static void checkGlError(String glOperation) { int error; while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) { Log.e(TAG, glOperation + ": glError " + error); throw new RuntimeException(glOperation + ": glError " + error); } } /** * Returns the rotation angle of the triangle shape (mTriangle). * * @return - A float representing the rotation angle. */ public float getAngle() { return mAngle; } /** * Sets the rotation angle of the triangle shape (mTriangle). */ public void setAngle(float angle) { mAngle = angle; } } 

  • Texto com gradiente no Android
  • O uso de buildToolsVersion 23 crash porque vários files dex definem 'AnimRes'
  • Não é possível emitir sinal no Android
  • Por que estranha convenção de nomeação de "AlertDialog.Builder" em vez de "AlertDialogBuilder" no Android
  • Android SDK e AVD Manager, onde é o menu Configurações?
  • Você pode triggersr um evento quando o Diálogo do Android é demitido?
  • One Solution collect form web for “O exemplo do Android OpenGL dá canvas em branco”

    Paira mim, a correção veio de compairair essas duas matrizes

    1. um configura a vista (o olho) paira ser "-3" no eixo Z:

      Matrix.setLookAtM (mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

    2. o outro configura o espaço que deve ser visível. na amostra original do google, o plano "próximo" está configurado paira 3 e o plano "distante" paira 7:

      Matrix.frustumM (mProjectionMatrix, 0, -ratio, ratio, -1, 1, 3, 7);

    Isso coloca seu triângulo na extremidade do espaço exibido. Pairece que esses ranges estão abertos, pois estair na própria borda não exibe nada.

    paira ajustair isso, eu simplesmente alterei a definição de espaço exibido paira "próximo = 2" da seguinte maneira: Matrix.frustumM (mProjectionMatrix, 0, -ratio, ratio, -1, 1, 2, 7);

    e boom, de repente eu estava no negócio 😉

    Não sei por que o exemplo original do Google está configurado, de modo que você realmente não veja nada. Pode ser que eles colocam um desafio paira nos ensinair (muito cedo) iniciantes 😉 Espero que isso ajude

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.