Текстуры не отображаются на сфере для Samsung Galaxy SL
Я изучаю фреймворк Rajawali для Android. Я попробовал их первый базовый урок, который выглядит следующим образом:
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);
}
}
Все, что я делаю, это создаю Сферу и добавляю к ней изображение Земли в качестве текстуры. Размер изображения 1024х512.
Когда я запускаю этот код на моем Samsung Galaxy SL, сфера не имеет этой текстуры, она имеет темно-серый цвет. Но когда я запускаю этот код на других устройствах (Nexus 7 и Sony Xperia), текстура отображается правильно. Также, если я использую текстуру, такую как 512x512, текстура отображается правильно на Samsung Galaxy SL.
Я нашел подсказку, но не знаю, как поступить: текстура OpenGL ES 2.0 не отображается на некоторых устройствах
1 ответ
Минимальные фильтры, предоставляемые 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);
Я пришел к выводу, что устройство не рендерит текстуру при включенном Mipmapping.