1
我正在使用OpenGL編寫2D遊戲,使用存儲在我的資源中的png圖像(64x64像素,具有透明度)。glDrawTexfOES在手機上繪製黑色紋理,並在模擬器中正確
我的代碼如下所示:
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import javax.microedition.khronos.opengles.GL11;
import javax.microedition.khronos.opengles.GL11Ext;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLUtils;
import android.opengl.GLSurfaceView.Renderer;
public class TestGLRenderer implements Renderer {
private int mTexGLNames[];
private Context mContext;
public TestGLRenderer(Context ctx) {
mContext = ctx;
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// setup the gl renderer
gl.glClearColor(0.2f, 0.4f, 0.6f, 1.0f);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glShadeModel(GL10.GL_FLAT);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
// reserve GL texture names
mTexGLNames = new int[1];
gl.glGenTextures(1, mTexGLNames, 0);
// load image from resources
Bitmap b;
b = BitmapFactory.decodeResource(mContext.getResources(),
R.drawable.image);
// load image in opengl
gl.glBindTexture(GL10.GL_TEXTURE_2D, mTexGLNames[0]);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, b, 0);
}
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
gl.glBindTexture(GL10.GL_TEXTURE_2D, mTexGLNames[0]);
int crop[] = new int[] { 0, 64, 64, -64 };
((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,
GL11Ext.GL_TEXTURE_CROP_RECT_OES, crop, 0);
((GL11Ext) gl).glDrawTexfOES(160, 240, 0, 64, 64);
}
public void onSurfaceChanged(GL10 gl, int w, int h) {
}
}
正按預期在模擬器的結果(運行Android 2.2),但圖像顯示爲我的電話上的黑色方塊(LG-P500的Android 2.2 )。隨附的是模擬器和手機的屏幕截圖。
我的代碼有問題嗎,還是我的手機有問題(我的手機可以運行其他3D遊戲沒有問題)?
事實上,我認爲這些設置有默認值(它在最我用的框架)。在闡明它們之後,它現在可以工作。 – XGouchet 2011-05-24 07:58:50