为什么OpenGL混合不适用于HTC Desire?

时间:2010-11-17 20:53:30

标签: opengl-es alphablending android glblendfunc

有没有人知道如何在HTC Desire上启用OpenGL(android)混合。我试图绘制彩色三角形并使用颜色缓冲区的alpha值将它们与背景(或另一个三角形)混合。

它既适用于模拟器(2.1),也适用于htc英雄2.1,但不适用于2.2。英雄和欲望之间是否存在一些硬件差异?

代码中的主要内容是(不按顺序):

gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

gl.glEnable(GL10.GL_BLEND);         
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

private final static float[] colors = {
       1f, 0f, 0f, 0.5f, // point 0 red
       1f, 0f, 0f, 0.5f, // point 1 red
       1f, 0f, 0f, 0.5f, // point 2 red
       1f, 0f, 0f, 0.5f, // point 3 red

       1f, 0f, 0f, 0.5f, // point 4 red
       1f, 0f, 0f, 0.5f, // point 5 red
       1f, 0f, 0f, 0.5f, // point 6 red
       1f, 0f, 0f, 0.5f, // point 7 red
};

PS。如果有人需要,我可以提供更多代码......

1 个答案:

答案 0 :(得分:3)

乔纳斯,你对照明的评论似乎正确,所以现在我认为我们有一个答案。 OpenGL ES 1.1.12规范声明The value of A produced by lighting is the alpha value associated with dcm,其中dcm是材质漫反射颜色。

如果您启用了COLOR_MATERIAL,则材质漫反射颜色和材质环境颜色都是从当前顶点颜色中获取的。这意味着Desire不正确,并且模拟器是正确的。

如果您已禁用COLROR_MATERIAL(默认状态),则漫反射颜色材质将设置为glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, ptrTo4Floats)。这意味着Desire是正确的,并且模拟器是不正确的。