私はAndroidプラットフォームでコーディングしています。三角形のテクスチャ(Assetsフォルダから画像を読み込む)を使用しようとしています。私のアプリケーションを実行すると、三角形の白い空白になります。OpenGL ES:テクスチャを使用:テクスチャイメージの代わりに白い白
私は画像が2の累乗でなければならないと言った他の情報源を読んでいます。そして私はチェックしました、私のイメージは2の威力です。 (128×128)である。それが私に頭痛を引き起こす理由。
はここに私のコードです:ちょうど簡単な例
package com.test;
import java.io.IOException;
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.app.Activity;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLUtils;
import android.os.Bundle;
import android.util.Log;
public class TextureTriangleTest extends Activity{
GLSurfaceView glView;
ByteBuffer byteBuffer;
FloatBuffer vertices;
AssetManager assets;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
assets = getAssets();
int VERTEX_SIZE = (2+2)*4;
byteBuffer = ByteBuffer.allocateDirect(3*VERTEX_SIZE);
byteBuffer.order(ByteOrder.nativeOrder());
vertices = byteBuffer.asFloatBuffer();
vertices.put(new float[] { 0.0f, 0.0f, 0.0f, 1.0f,
319.0f, 0.0f, 1.0f, 1.0f,
160.0f, 479.0f, 0.5f, 0.0f });
vertices.flip();
glView = new GLSurfaceView(this);
glView.setRenderer(new Render());
setContentView(glView);
}
class Render implements Renderer{
@Override
public void onDrawFrame(GL10 gl) {
try {
Bitmap bitmap = BitmapFactory.decodeStream(assets.open("bobrgb888.png"));
int textureIds[] = new int[1];
gl.glGenTextures(1, textureIds, 0);
int textureId = textureIds[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
bitmap.recycle();
} catch (IOException e) {
Log.d("", "FAILED LOAD FILE");
throw new RuntimeException("Couldn't load asset!");
}
gl.glViewport(0, 0, glView.getWidth(), glView.getHeight());
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, 320, 0, 480, 1, -1);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
int VERTEX_SIZE = (2+2)*4;
vertices.position(0);
gl.glVertexPointer(2, GL10.GL_FLOAT, VERTEX_SIZE, vertices);
vertices.position(2);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, VERTEX_SIZE, vertices);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// TODO Auto-generated method stub
}
}
}
私のコード(あなたは方法で見るべき主なコードが、それは私がレンダリングに使用するコードが含まれています)。私はデバッグをしており、すべてが真です。 (イメージのロードに成功するなど)。しかし、私はOpenGLアプリケーションをデバッグする方法を知らない。 (つまり、デバッグ時には変数のパラメータを見ることができますが、OpenGLはCanvasよりも複雑すぎるため、1行のコードを使用して結果が得られるので、どのようになるか分かりません:))
助けてくれてありがとう:)
の初心者だという理由だけであなたはgl.glEnable(GL10.GL_TEXTURE_2D)を使用していませんでした。...試行でキャッチをプラスします(試しに...キャッチ)のテクスチャをunbinded (GL10.GL_TEXTURE_2D、0); – SteveL
なぜフレームごとにテクスチャを読み込むのですか?onTurfaceCreated()内にon..ry部分を入れて、 – SteveL