Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 模拟器中未绘制正方形_Android_Opengl Es - Fatal编程技术网

Android 模拟器中未绘制正方形

Android 模拟器中未绘制正方形,android,opengl-es,Android,Opengl Es,这是NeHe端口的实际代码,但它没有绘制任何内容。为什么 我的主要活动课: import android.app.Activity; import android.opengl.GLSurfaceView; import android.os.Bundle; /** * Our OpenGL program's main activity */ public class Main extends Activity { p

这是NeHe端口的实际代码,但它没有绘制任何内容。为什么

我的主要活动课:

     import android.app.Activity;
     import android.opengl.GLSurfaceView;
     import android.os.Bundle;
     /**
     * Our OpenGL program's main activity
     */
    public class Main extends Activity {

   private GLSurfaceView glView;   // Use GLSurfaceView

   // Call back when the activity is started, to initialize the view
   @Override
   protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        glView = new GLSurfaceView(this);           // Allocate a GLSurfaceView
        glView.setEGLContextClientVersion(1);
        glView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
        glView.setRenderer(new mainRenderer(this)); // Use a custom renderer
        this.setContentView(glView);                // This activity sets to GLSurfaceView
     }

     // Call back when the activity is going into the background
     @Override
     protected void onPause() {
        super.onPause();
        glView.onPause();
     }

     // Call back after onPause()
     @Override
     protected void onResume() {
        super.onResume();
        glView.onResume();
     }
  }
我的渲染器类:

  import javax.microedition.khronos.egl.EGLConfig;
  import javax.microedition.khronos.opengles.GL10;
  import android.content.Context;
  import android.opengl.GLSurfaceView;
  import android.opengl.GLU;
  /**
   *  OpenGL Custom renderer used with GLSurfaceView 
   */
  public class mainRenderer implements GLSurfaceView.Renderer {
     Context context;   // Application's context
     Patrat quad;

     // Constructor with global application context
     public mainRenderer(Context context) {
        this.context = context;

        quad = new Patrat();
     }

     // Call back when the surface is first created or re-created
     @Override
     public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  // Set color's clear-value to black
        gl.glClearDepthf(1.0f);            // Set depth's clear-value to farthest
        gl.glEnable(GL10.GL_DEPTH_TEST);   // Enables depth-buffer for hidden surface removal
        gl.glDepthFunc(GL10.GL_LEQUAL);    // The type of depth testing to do
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);  // nice perspective view
        gl.glShadeModel(GL10.GL_SMOOTH);   // Enable smooth shading of color
        gl.glDisable(GL10.GL_DITHER);      // Disable dithering for better performance

        // You OpenGL|ES initialization code here
        // ......
     }

     // Call back after onSurfaceCreated() or whenever the window's size changes
     @Override
     public void onSurfaceChanged(GL10 gl, int width, int height) {
        if (height == 0) height = 1;   // To prevent divide by zero
        float aspect = (float)width / height;

        // Set the viewport (display area) to cover the entire window
        gl.glViewport(0, 0, width, height);

        // Setup perspective projection, with aspect ratio matches viewport
        gl.glMatrixMode(GL10.GL_PROJECTION); // Select projection matrix
        gl.glLoadIdentity();                 // Reset projection matrix
        // Use perspective projection
        GLU.gluPerspective(gl, 45, aspect, 0.1f, 100.f);

        gl.glMatrixMode(GL10.GL_MODELVIEW);  // Select model-view matrix
        gl.glLoadIdentity();                 // Reset

        // You OpenGL|ES display re-sizing code here
        // ......


     }

     // Call back to draw the current frame.
     @Override
     public void onDrawFrame(GL10 gl) {
        // Clear color and depth buffers using clear-value set earlier
       gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

        // You OpenGL|ES rendering code here
        // ......

        gl.glLoadIdentity();
        quad.draw(gl);
     }
  }
我的广场班:

 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.nio.FloatBuffer;
 import javax.microedition.khronos.opengles.GL10;
 /*
  * A square drawn in 2 triangles (using TRIANGLE_STRIP).
  */
 public class Patrat {
    private FloatBuffer vertexBuffer;  // Buffer for vertex-array

    private float[] vertices = {  // Vertices for the square
       -1.0f, -1.0f,  0.0f,  // 0. left-bottom
        1.0f, -1.0f,  0.0f,  // 1. right-bottom
       -1.0f,  1.0f,  0.0f,  // 2. left-top
        1.0f,  1.0f,  0.0f   // 3. right-top
    };

    // Constructor - Setup the vertex buffer
    public Patrat() {
       // Setup vertex array buffer. Vertices in float. A float has 4 bytes
       ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
       vbb.order(ByteOrder.nativeOrder()); // Use native byte order
       vertexBuffer = vbb.asFloatBuffer(); // Convert from byte to float
       vertexBuffer.put(vertices);         // Copy data into buffer
       vertexBuffer.position(0);           // Rewind
    }

    // Render the shape
    public void draw(GL10 gl) {
       // Enable vertex-array and define its buffer
       gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
       gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
       // Draw the primitives from the vertex-array directly
       gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
       gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    }
 }

有什么解决办法吗?我无法理解为什么这不起作用…

第一次更改
顶点
将您的顶点设置为10%:

 private float[] vertices = {  // Vertices for the square
  -0.1f, -0.1f,  0.0f,  // 0. left-bottom
  0.1f, -0.1f,  0.0f,  // 1. right-bottom
  -0.1f,  0.1f,  0.0f,  // 2. left-top
  0.1f,  0.1f,  0.0f   // 3. right-top
};
之后,我在您的
onDrawFrame(GL10 gl)
中发现了问题:

您没有或
glTranslatef
也没有
glScalef

将其更改为:

@Override
public void onDrawFrame(GL10 gl) {
   gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    // Reset the Modelview Matrix
    gl.glLoadIdentity();

    // Drawing
    gl.glTranslatef(0.0f, 0.0f, -1.0f);     // move 5 units INTO the screen
                                            // is the same as moving the camera 5 units away
    gl.glScalef(0.5f, 0.5f, 0.5f);          // scale the triangle to 50% 
                                            // otherwise it will be too large

    quad.draw(gl);                      

}

非常感谢你!你能解释最后一件事吗:为什么我要把正方形缩小10%?我不能把相机移到离广场更远的地方吗?如果可以,我必须调整视口以正确调整相机?当然可以,您也可以更改Z或更改
glTranslatef