如何在AndEngine Rectangle类中实现glColorPointer

问题描述:

是否有人会分享一个关于如何实现GradienRectangle的例子,该GradienRectangle对每个顶点都有不同的颜色?如何在AndEngine Rectangle类中实现glColorPointer

我试图从GL10调用glColorPointer传递float缓冲区和GL11使用类似于顶点selectOnHardware方法,但是这两种方法失败对我来说...

在AndEngine论坛上,我发现this code,但它不工作,然而maby它会帮助某人找到更好的解决方案。

+0

你得到了什么具体的错误/例外?是没有显示的元素,还是你得到编译/运行时错误? – Codeman

+0

一切都是黑色的,没有颜色... – michael

+0

@michael我不知道如何发送下午在这个网站上,但你可以在这个http://*.com/questions/9698997/add-visual-below-手指轻扫三角带状水果忍者andengine –

该示例不适用于您,因为作者未显示负责设置顶点的代码片段。

这是我的例子(它很长,但那是opengl ...) 注意 - 请记住要正确设置视口。

public static void drawGradientRectangle(GL10 gl, float centerX, float centerY, 
      float width, float height) { 
     gl.glPushMatrix(); 
     gl.glDisable(GL10.GL_TEXTURE_2D); 
     gl.glEnableClientState(GL10.GL_COLOR_ARRAY); 
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); //just in case if you have not done that before 
     gl.glFrontFace(GL10.GL_CCW); //Set the face 

     gl.glTranslatef(centerX, centerY, 0); 
     if (width != 1 || height != 1) { 
      gl.glScalef(width, height, 1); 
     } 
     gl.glVertexPointer(2, GL10.GL_FLOAT, 0, GLDrawConstants.vertexBuffer0_5); 
     gl.glColorPointer(4, GL10.GL_FLOAT, 0, GLDrawConstants.gradOrangeWhiteBuffer); 

     // Draw the vertices as triangle strip 
     gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); 

     gl.glDisableClientState(GL10.GL_COLOR_ARRAY); 
     gl.glEnable(GL10.GL_TEXTURE_2D); 
     gl.glPopMatrix(); 
    } 

GLDrawConstants类:

public class GLDrawConstants { 

    public static final FloatBuffer gradOrangeWhiteBuffer; 
    public static final FloatBuffer vertexBuffer0_5; 

private static final float vertices0_5[] = { 
     -0.5f, -0.5f,// Bottom Left 
     0.5f, -0.5f,// Bottom right 
     -0.5f, 0.5f,// Top Left 
     0.5f, 0.5f// Top Right 
    }; 

private static final float gradOrangeWhiteColor[] = { 
     255/255f, 239/255f, 196/255f, 0f, // Bottom Left 
     255/255f, 239/255f, 196/255f, 0f, // Bottom right 
     250/255f, 200/255f, 62/255f, 0.3f, // Top Left 
     250/255f, 200/255f, 62/255f, 0.3f // Top Right 
    }; 

static { 
     gradOrangeWhiteBuffer = WDUtils.floatBuffer(gradOrangeWhiteColor); 
     vertexBuffer0_5 = WDUtils.floatBuffer(vertices0_5); 
} 

} 

WDUtils类:

public class WDUtils { 
    /** 
    * Make a direct NIO FloatBuffer from an array of floats 
    * 
    * @param arr 
    *   The array 
    * @return The newly created FloatBuffer 
    */ 
    public static final FloatBuffer floatBuffer(float[] arr) { 
     ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4); 
     bb.order(ByteOrder.nativeOrder()); 
     FloatBuffer fb = bb.asFloatBuffer(); 
     fb.put(arr); 
     fb.position(0); 
     return fb; 
    } 
} 

example on my phone

+0

嗨,感谢您的答案,但你确定这将在AndEngine内工作,因为这是我对这个引擎的问题,我发现了很多例子来做它在opengl中,但他们都不能移动到AndEngine的细节。这是我的问题:如何在AndEngine中实现它,而不是如何在一般情况下实现它。 – michael

+0

AndEngine使用OpenGL,所以它应该在那里工作很小的调整..你试过吗? – Yuriy

+0

我做了,它的工作,谢谢,我认为,以前我一直在调用glColorPointer与第一个参数3而不是4,它通常使一切都不起作用。谢谢 – michael

或者你使用(或反向移植)从GLES2-AnchorCenter分支Gradient类,它给你一个超级简单易用且功能丰富的API wi不用担心OpenGL。 =)