0

私は AndroidのRajawaliフレームワークを研究しています。次のような最初の基本的なチュートリアルを試しました。

public class RRenderer extends RajawaliRenderer {
private DirectionalLight mLight;
private BaseObject3D mSphere;

public RRenderer(Context context) {
    super(context);
    setFrameRate(60);
}

protected void initScene() {
    mLight = new DirectionalLight(1f, 0.2f, 1.0f); // set the direction
    mLight.setColor(1.0f, 1.0f, 1.0f);
    mLight.setPower(2);

    Bitmap bg = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.earthtruecolor_nasa_big);
    DiffuseMaterial material = new DiffuseMaterial();
    mSphere = new Sphere(1, 18, 18);
    mSphere.setMaterial(material);
    mSphere.addLight(mLight);
    mSphere.addTexture(mTextureManager.addTexture(bg));
    addChild(mSphere);

    mCamera.setZ(-4.2f);
}

public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    super.onSurfaceCreated(gl, config);
}

public void onDrawFrame(GL10 glUnused) {
    super.onDrawFrame(glUnused);
    mSphere.setRotY(mSphere.getRotY() + 1);
}

}

私がやっているのは、球体を作成し、それにテクスチャとして地球の画像を追加することだけです。画像のサイズは 1024x512 です。

このコードを Samsung Galaxy SL で実行すると、球体にこのテクスチャが表示されず、濃い灰色になります。しかし、このコードを他のデバイス (Nexus 7 および Sony Xperia) で実行すると、テクスチャは正しく表示されます。また、512x512 のようなテクスチャを使用すると、テクスチャは Samsung Galaxy SL で正しく表示されます。

ヒントは見つかりましたが、進め方がわかりません:一部のデバイスで OpenGL ES 2.0 テクスチャが表示されない

4

1 に答える 1

0

opengl が提供する最小フィルターは次のとおりです。

GLES20.GL_LINEAR_MIPMAP_LINEAR、GLES20.GL_NEAREST_MIPMAP_NEAREST、GLES20.GL_LINEAR、GLES20.GL_NEAREST

次のコード行でテクスチャがレンダリングされているようです GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);

ミップマッピングがオンの場合、デバイスはテクスチャをレンダリングしないという結論に達しました。

于 2013-02-26T18:10:59.737 に答える