opengl-es - 为什么 OpenGL 混合在 HTC Desire 上不起作用?

标签 opengl-es alphablending android glblendfunc

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

它既适用于模拟器 (2.1) 也适用于 htc hero 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
};

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

最佳答案

Jonas,您关于照明的评论似乎是正确的,所以现在我想我们有了答案。 OpenGL ES 1.1.12 规范声明光照产生的 A 值是与 dcm 关联的 alpha 值,其中 dcm 是 Material 漫反射颜色。

如果您启用了COLOR_MATERIAL,那么 Material 漫反射颜色和 Material 环境颜色都取自当前顶点颜色。这意味着 Desire 不正确,而模拟器是正确的。

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

关于opengl-es - 为什么 OpenGL 混合在 HTC Desire 上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209054/

相关文章:

iOS 5.0 GLKit GLKTextureLoader- glBindTexture 发生在哪里?

iphone - 在 OpenGL ES 2.0 中切换着色器是否会影响性能?

c - 使用表查找的 Alpha 混合没有预期的那么快

android - Android 4.2.1 上的库位置是否已移动?

c++ - 在 C++ 源代码中使用 CGImage 时为 "No matching function for call to ... "

c++ - 如何在 Pi 上使用 OpenGL ES 在绘制到屏幕之前旋转纹理

c# - 使用 C# 在 Windows Mobile 中加载简单的半透明 PNG

android - textView 上的数据绑定(bind)空指针异常

java - Retrofit2 MVP 安卓