android - OpenGL : Drawing Quad - Color fading issue

标签 android opengl-es geometry fading

我正在尝试使用 OpenGL-ES 在 Android 上绘制白色四边形,但颜色正在褪色。

见图:http://img88.imageshack.us/img88/2787/tempew.png

我也用 int numVertices = 4; 尝试过,但我没有变红而是变黑了。这是怎么回事?

int numVertices = 6;

private FloatBuffer vertexBuffer, colorBuffer;
private ShortBuffer indexBuffer;
private short[] indices = { 0, 1, 2, 
                            2, 3, 0 };

public Floor (float coords[][]) {

    float vertices[] = new float[numVertices*3];
    float colors[] = new float[numVertices*4];

    //Set colors
    for(int i=0; i < numVertices; i++){
        colors[i] = 1.0f;   //red
        colors[i+1] = 1.0f; //grn
        colors[i+2] = 1.0f; //blu
        colors[i+3] = 1.0f; //alpha
    }

    vertices[0] = coords[0][0];
    vertices[1] = coords[0][1];
    vertices[2] = coords[0][2];

    vertices[3] = coords[1][0];
    vertices[4] = coords[1][1];
    vertices[5] = coords[1][2]; 

    vertices[6] = coords[2][0];
    vertices[7] = coords[2][1];
    vertices[8] = coords[2][2];

    vertices[9]  = coords[3][0];
    vertices[10] = coords[3][1];
    vertices[11] = coords[3][2];

    ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
    vbb.order(ByteOrder.nativeOrder());
    vertexBuffer = vbb.asFloatBuffer();
    vertexBuffer.put(vertices);
    vertexBuffer.position(0);

    ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length * 4);
    cbb.order(ByteOrder.nativeOrder());
    colorBuffer = cbb.asFloatBuffer();
    colorBuffer.put(colors);
    colorBuffer.position(0);

    ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
    ibb.order(ByteOrder.nativeOrder());
    indexBuffer = ibb.asShortBuffer();
    indexBuffer.put(indices);
    indexBuffer.position(0);


}

/**
 * This function draws our square on screen.
 * @param gl
 */
public void draw(GL10 gl) {

    gl.glDisable(GL10.GL_COLOR_MATERIAL);
    gl.glDisable(GL10.GL_BLEND);
    gl.glDisable(GL10.GL_LIGHTING);

    gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer);

    gl.glPointSize(2.0f);

    gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);

    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY);

}

感谢您的帮助!

想通了。对于遇到如何执行此操作的任何其他人,需要修复:

int numVertices = 4;

//Set colors
for(int i=0; i < numVertices; i++){
    colors[i*4] = 1.0f; //red
    colors[i*4+1] = 1.0f;   //grn
    colors[i*4+2] = 1.0f;   //blu
    colors[i*4+3] = 1.0f;   //alpha
}

最佳答案

for(int i=0; i < numVertices; i++){
    colors[i] = 1.0f;   //red
    colors[i+1] = 1.0f; //grn
    colors[i+2] = 1.0f; //blu
    colors[i+3] = 1.0f; //alpha
}

这并不像您认为的那样。你需要写 i += 4

否则,您会按预期初始化 numVertices/4 + 4 个组件,而不是 numVertices*4。

关于android - OpenGL : Drawing Quad - Color fading issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6653032/

相关文章:

java - 检查两个日期之间的差异是否大于一年 - Java

Android SDK Windows 无法执行 Android.bat

ios - 渲染 Sprite 的纹理采样坐标

java - 如何在普通的非 Android Java 应用程序中使用 NDK 编译的 JNI 库?

java - Android - 文件不会 move 或复制到内部应用程序存储

iphone - 来自具有透明度的 PNG 的 openGL ES 纹理正在以奇怪的伪影进行渲染,这让我抓狂!

ios - 自 iOS6 以来,GLKTexture 未正确映射

javascript - 使用 jQuery 和 jQuery Radmenu 插件的圆形菜单

algorithm - 如何用不相交的旋转矩形填充矩形区域?

javascript - 如何将任意点旋转任意 Angular ?