java - android opengl es 1.1 - 某些设备上的绘图故障 - 内部屏幕截图

标签 java android opengl-es

最上面的图片是不想要的结果(它似乎也闪烁)。 底部图像是我希望渲染在所有设备上的样子。

Glitchy render

Good render

你好,我似乎在为我的 galaxy s4 渲染带纹理的正方形时遇到问题,但在我的 gt p3113 平板电脑上却没有...

这是我的 GLRenderer 的代码:

@Override
public void onDrawFrame(GL10 gl)
{
    manObjects.draw(gl, 0, 0);
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height)
{
    if (height == 0)
    { // Prevent A Divide By Zero By
        height = 1; // Making Height Equal One
    }

    gl.glViewport(0, 0, width, height); // Reset The Current Viewport
    gl.glMatrixMode(GL10.GL_PROJECTION); // Select The Projection Matrix
    gl.glLoadIdentity(); // Reset The Projection Matrix

    // respect the height:width ratio of the window.
    GLU.gluOrtho2D(gl, -1f, 1f, 1.6f, -1.6f);

    gl.glMatrixMode(GL10.GL_MODELVIEW); // Select The Modelview Matrix
    gl.glLoadIdentity(); // Reset The Modelview Matrix
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
    // Settings
    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

    // Really Nice Perspective Calculations
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
    gl.glEnable(GL10.GL_BLEND); // Enable blending
    gl.glDisable(GL10.GL_DEPTH_TEST); // Disable depth test
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

    // Load textures
    manObjects.load(gl, mContext);
}

有人知道为什么会这样吗?更具体地说,为什么它适用于一台设备而不适用于另一台设备?

绘制代码:

public void draw(GL10 gl, float x, float y)
{
    gl.glLoadIdentity();
    gl.glBindTexture(GL10.GL_TEXTURE_2D, texPointers[0]);
    tSquare[0].draw(gl);
}

public void drawBLACK(GL10 gl)
{
    gl.glLoadIdentity();
    gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
    gl.glScalef(1f, 1.6f, 1);
    gl.glColor4f(0, 0, 0, 1);
    tSquare[0].draw(gl);
    gl.glColor4f(1, 1, 1, 1);
}

tSquare[0].draw(gl):

public void draw(GL10 gl)
{
    //Enable the vertex, texture and normal state
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    //Point to our buffers
    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);
}

最佳答案

这是我的 onDrawFrame 的示例,请尝试在 onDrawFrame 中进行 gl 调用

先做

public int width, height;

然后

@Override
    public void onSurfaceChanged(GL10 gl, int width, int height) { 
        this.width = width;
        this.height = height;
    }

然后 onDrawFrame 像这样

@Override
public void onDrawFrame(GL10 gl)
{
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        gl.glViewport(0, 0, width, height);
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        gl.glOrthof(0.0f, width, 0.0f, height, -1.0f, 1.0f);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        gl.glEnable(GL10.GL_BLEND);
        gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
        gl.glEnable(GL10.GL_TEXTURE_2D);
        manObjects.draw(gl, 0, 0);
}

关于java - android opengl es 1.1 - 某些设备上的绘图故障 - 内部屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22286290/

相关文章:

java - Android:如何避免点击通知调用 onCreate()

java - 将相同的布局添加到一个容器android

c++ - 在 Android 发送的图像上计算服务器端的 OpenCV 函数

objective-c - 获取屏幕上某种颜色占据的区域 - iOS

android - glTexImage2D 在 Android 4.2.2 上比 4.2.0 慢得多

opengl - glGetUniformLocation 对于 USED 变量返回 -1,优化该死

java - 在随机位置具有指定数字的数组列表

java - 获取字节数组并创建和写入 JPEG

java - 应用程序在平板电脑上运行,但在智能手机上崩溃

Android - 如何在 onCreate( ) 中扩充 xml