我一直在努力为自己建立一个小游戏框架,为Android编写一些基本游戏。我一直在测试索尼Arc和Galaxy SII没有任何问题,但最近我有人用Galaxy S为我做了一些测试,结果很糟糕。
首次运行我没有将我的图像大小设置为2或平方的幂,因此大多数GUI只是大白框。因此,我将所有图像的大小调整为2和平方的力量,以消除那里的任何问题,并修复了一些图像,但我发现一些对象仍显示为白色纹理。我可以告诉它在适当的位置绘图,因为我可以看到白框在游戏中旋转和移动。
我认为这可能是32位图像的问题,所以我把所有图像都缩小到8位,结果是一样的,只有大约一半的纹理似乎正在工作。我还看到某个地方提到了drawable-nodpi文件夹,所以我将所有图片从其他文件夹中移出并放在那里试试(结果相同)
我一直在看这个教程,这是我用来基于我的绘图代码 http://obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/
但是我添加或更改的内容必须搞砸了,我已经将代码包含在下面,对于我错过或做错了的任何人都有什么跳出来的吗?
这是我创建渲染器的地方
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();
}
我有一个基类(称为纹理)为我的所有精灵做绘图,但由于某些原因,其中一些似乎永远不会被Galaxy S绘制,我最终会得到白盒子。< / p>
有什么想法吗?
关于更好的方法的PS建议当然是受欢迎的,我将是第一个承认我是OpenGL的新手