Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Galaxy S上的OpenGL问题_Android_Opengl Es_Textures_Galaxy - Fatal编程技术网

Android Galaxy S上的OpenGL问题

Android Galaxy S上的OpenGL问题,android,opengl-es,textures,galaxy,Android,Opengl Es,Textures,Galaxy,我一直在尝试为自己构建一个小游戏框架,以便为android编写一些基本游戏。我一直在索尼Arc和Galaxy SII上测试,没有任何问题,但最近我让一个拥有Galaxy S的人为我做了一些测试,结果很糟糕 第一次运行时,我没有将图像大小设置为2的幂或平方,因此大多数GUI只是大的白色框。所以我将所有图像的大小调整为2的幂和平方,以避免出现任何问题,这对一些图像进行了修复,但我发现一些对象仍然显示为白色纹理。我可以看出它在适当的位置绘制,因为我可以看到白盒旋转和移动,就像它在游戏中应该做的那样 我

我一直在尝试为自己构建一个小游戏框架,以便为android编写一些基本游戏。我一直在索尼Arc和Galaxy SII上测试,没有任何问题,但最近我让一个拥有Galaxy S的人为我做了一些测试,结果很糟糕

第一次运行时,我没有将图像大小设置为2的幂或平方,因此大多数GUI只是大的白色框。所以我将所有图像的大小调整为2的幂和平方,以避免出现任何问题,这对一些图像进行了修复,但我发现一些对象仍然显示为白色纹理。我可以看出它在适当的位置绘制,因为我可以看到白盒旋转和移动,就像它在游戏中应该做的那样

我认为这可能是一个32位图像的问题,所以我把我所有的图像都减少到8位,结果是一样的,只有大约一半的纹理看起来有效。我还看到某个地方提到了drawable nodpi文件夹,因此我将所有图像从其他文件夹中移出,并将它们放在那里进行尝试(相同的结果)

我一直在看这个教程,它是我用来建立我的绘图代码在此基础上

但我添加或更改的内容一定会把事情搞砸,我在下面包含了我的代码,有没有什么东西会跳到我错过或做错的人身上

这是创建渲染器的地方

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新手的人

以前有人见过吗?我仍然坚持这一点。