SurfaceView中的2squares。一张图片是透明的

时间:2012-06-28 12:18:08

标签: android opengl-es textures

这是我的代码:

package hello.project;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.content.Context;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLU;

public class HelloOpenGLES10Renderer implements Renderer {

 private Square   square;
 private Square2   square2;// the square
 private Context     context;
 private Context     context2;


 /** Constructor to set the handed over context */
 public HelloOpenGLES10Renderer(Context context) {
  this.square  = new Square();
  this.square2  = new Square2();
  this.context=context;

 }

 public void onDrawFrame(GL10 gl) {
  // clear Screen and Depth Buffer
  Square.loadGLTexture(gl, this.context,Square.getSex()); 
  Square2.loadGLTexture(gl, this.context,Square2.getHair()); 
  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, -5.0f);  // move 5 units INTO the screen
    square.draw(gl);
    square2.draw(gl); 
 }


 public void onSurfaceChanged(GL10 gl, int width, int height) {
  if(height == 0) {       //Prevent A Divide By Zero By
   height = 1;       //Making Height Equal One
  }

  gl.glViewport(0, 0, width, height);  //Reset The Current Viewport
  gl.glMatrixMode(GL10.GL_PROJECTION);  //Select The Projection Matrix
  gl.glLoadIdentity();      //Reset The Projection Matrix

  //Calculate The Aspect Ratio Of The Window
  GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, 0.1f, 100.0f);

  gl.glMatrixMode(GL10.GL_MODELVIEW);  //Select The Modelview Matrix
  gl.glLoadIdentity();      //Reset The Modelview Matrix
 }


 public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    // Load the texture for the square

    Square.loadGLTexture(gl, this.context,Square.getSex());


    gl.glEnable(GL10.GL_TEXTURE_2D); 
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glEnable(GL10.GL_BLEND);

    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

    gl.glShadeModel(GL10.GL_SMOOTH);    //Enable Smooth Shading
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);  //Black Background
    gl.glClearDepthf(1.0f);      //Depth Buffer Setup
    gl.glDepthFunc(GL10.GL_NEVER);    //The Type Of Depth Testing To Do

    //Really Nice Perspective Calculations
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
   }
}

应用程序看起来像这样: Imgur

正如您所看到的,头发的纹理是透明的。 关于我能做什么的任何建议?

1 个答案:

答案 0 :(得分:2)

不知怎的,这对我有用:

 gl.glEnable(GL10.GL_BLEND); 
 gl.glEnable(GL10.GL_TEXTURE_2D); 
 gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 
 gl.glShadeModel(GL10.GL_FLAT); 
 gl.glColor4f(1.0f, 1.0f, 1.0f, 2.0f);