是否有人會分享一個關於如何實現GradienRectangle的例子,該GradienRectangle對每個頂點都有不同的顏色?如何在AndEngine Rectangle類中實現glColorPointer
我試圖從GL10調用glColorPointer傳遞float緩衝區和GL11使用類似於頂點selectOnHardware方法,但是這兩種方法失敗對我來說...
在AndEngine論壇上,我發現this code,但它不工作,然而maby它會幫助某人找到更好的解決方案。
是否有人會分享一個關於如何實現GradienRectangle的例子,該GradienRectangle對每個頂點都有不同的顏色?如何在AndEngine Rectangle類中實現glColorPointer
我試圖從GL10調用glColorPointer傳遞float緩衝區和GL11使用類似於頂點selectOnHardware方法,但是這兩種方法失敗對我來說...
在AndEngine論壇上,我發現this code,但它不工作,然而maby它會幫助某人找到更好的解決方案。
該示例不適用於您,因爲作者未顯示負責設置頂點的代碼片段。
這是我的例子(它很長,但那是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;
}
}
或者你使用(或反向移植)從GLES2-AnchorCenter
分支Gradient類,它給你一個超級簡單易用且功能豐富的API wi不用擔心OpenGL。 =)
你得到了什麼具體的錯誤/例外?是沒有顯示的元素,還是你得到編譯/運行時錯誤? – Codeman
一切都是黑色的,沒有顏色... – michael
@michael我不知道如何發送下午在這個網站上,但你可以在這個http://stackoverflow.com/questions/9698997/add-visual-below-手指輕掃三角帶狀水果忍者andengine –