Почему смешивание OpenGL не работает в HTC Desire?
Кто-нибудь знает, как включить смешивание в OpenGL (android) на HTC Desire. Я пытаюсь нарисовать цветные треугольники и использую альфа-значение цветового буфера, чтобы смешать их с фоном (или другим треугольником).
Работает как на эмуляторе (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
};
PS. Я могу предоставить больше кода, если кому-то это нужно...
1 ответ
Джонас, твой комментарий по поводу освещения кажется правильным, и теперь я думаю, что у нас есть ответ. 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 верен, а эмулятор неверен.