Android Galaxy S上的OpenGL问题
我一直在尝试为自己构建一个小游戏框架,以便为android编写一些基本游戏。我一直在索尼Arc和Galaxy SII上测试,没有任何问题,但最近我让一个拥有Galaxy S的人为我做了一些测试,结果很糟糕 第一次运行时,我没有将图像大小设置为2的幂或平方,因此大多数GUI只是大的白色框。所以我将所有图像的大小调整为2的幂和平方,以避免出现任何问题,这对一些图像进行了修复,但我发现一些对象仍然显示为白色纹理。我可以看出它在适当的位置绘制,因为我可以看到白盒旋转和移动,就像它在游戏中应该做的那样 我认为这可能是一个32位图像的问题,所以我把我所有的图像都减少到8位,结果是一样的,只有大约一半的纹理看起来有效。我还看到某个地方提到了drawable nodpi文件夹,因此我将所有图像从其他文件夹中移出,并将它们放在那里进行尝试(相同的结果) 我一直在看这个教程,它是我用来建立我的绘图代码在此基础上 但我添加或更改的内容一定会把事情搞砸,我在下面包含了我的代码,有没有什么东西会跳到我错过或做错的人身上 这是创建渲染器的地方Android Galaxy S上的OpenGL问题,android,opengl-es,textures,galaxy,Android,Opengl Es,Textures,Galaxy,我一直在尝试为自己构建一个小游戏框架,以便为android编写一些基本游戏。我一直在索尼Arc和Galaxy SII上测试,没有任何问题,但最近我让一个拥有Galaxy S的人为我做了一些测试,结果很糟糕 第一次运行时,我没有将图像大小设置为2的幂或平方,因此大多数GUI只是大的白色框。所以我将所有图像的大小调整为2的幂和平方,以避免出现任何问题,这对一些图像进行了修复,但我发现一些对象仍然显示为白色纹理。我可以看出它在适当的位置绘制,因为我可以看到白盒旋转和移动,就像它在游戏中应该做的那样 我
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
gl.glEnable(GL10.GL_TEXTURE_2D); //Enable Texture Mapping
gl.glShadeModel(GL10.GL_SMOOTH); //Enable Smooth Shading
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); //Black Background
gl.glClearDepthf(1.0f); //Depth Buffer Setup
gl.glEnable(GL10.GL_DEPTH_TEST); //Enables Depth Testing
gl.glDepthFunc(GL10.GL_LEQUAL); //The Type Of Depth Testing To Do
//Really Nice Perspective Calculations
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
// for transparency
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
}
这里是我加载纹理的地方
public void loadGLTexture(GL10 gl, Context context, int resourceId)
{
// loading texture
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId);
mImageWidth = bitmap.getWidth();
mImageHeight = bitmap.getHeight();
// generate one texture pointer
gl.glGenTextures(1, textures, 0);
// ...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
// create nearest filtered texture
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_LINEAR);
//Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);//i added
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);//i added
// Use Android GLUtils to specify a two-dimensional texture image from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
// Clean up
bitmap.recycle();
}
这就是我画画的地方
public void draw(GL10 gl, float x, float y, float z, float angle, float percentageScale) {
gl.glPushMatrix();
gl.glLoadIdentity();
gl.glTranslatef(x,y,z);
gl.glScalef(mXScale*percentageScale, mYScale*percentageScale, 1);
gl.glRotatef(angle, 0, 0, 1);
// bind the previously generated texture
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
// Point to our buffers
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
// Set the face rotation
gl.glFrontFace(GL10.GL_CW);
// Point to our vertex buffer
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
// Draw the vertices as triangle strip
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
//Disable the client state before leaving
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glPopMatrix();
}
我有一个基类(称为纹理)为我所有的精灵绘制,但由于某些原因,其中一些精灵似乎从来没有在星系S上绘制过,最后我为它们绘制了白色的框
有什么想法吗
PS关于更好的方法的建议当然是受欢迎的,我将是第一个承认我是OpenGL新手的人以前有人见过吗?我仍然坚持这一点。