GL_COLOR_MATERIAL с подсветкой на Android - PullRequest
3 голосов
/ 28 апреля 2010

Похоже, что glColorMaterial() отсутствует в OpenGL ES . Согласно этой записи (для iPhone), вы все равно можете включить GL_COLOR_MATERIAL в OpenGL ES 1.x, но вы застряли с настройками по умолчанию GL_FRONT_AND_BACK и GL_AMBIENT_AND_DIFFUSE, которые в противном случае вы бы сделали устанавливается с glColorMaterial(). Я бы с этим согласился, но рассеянное освещение работает неправильно.

Я настроил свою сцену и протестировал ее с одним источником света, установив glMaterialfv() для GL_AMBIENT и GL_DIFFUSE один раз при инициализации. Нормы были установлены правильно, и освещение работает так, как должно. Я вижу затенение Гуро.

При отключенном GL_LIGHTING плоские цвета, которые я установил с помощью glColor4f(), появляются на различных объектах сцены. Это также работает как ожидалось. Однако когда вызывается glEnable(GL_COLOR_MATERIAL), плоские цвета остаются. Я ожидаю увидеть световые эффекты.

glColorMaterial () также упоминается на anddev.org , но я не уверен, что информация там точная.

Я тестирую это на телефоне Android 2.1 (Motorola Droid).

Редактировать : На моем телефоне 1.6 (ADP1) он работает правильно. Я подал Выпуск 8015 . Он не работает с эмулятором для Android 1.6 или 2.1.

Вот минимальный тестовый пример для воспроизведения проблемы.

Снимок экрана на Android 1.6 (ADP1):

alt text

Скриншот того же кода, работающего на Android 2.1 (Motorola Droid):

alt text

Снимок экрана на Android 1.6 (эмулятор):

alt text

1 Ответ

1 голос
/ 01 мая 2010

Это была глупая ошибка с моей стороны. Учитывая 32-разрядное целое число Android color, я забыл масштабировать цветовые компоненты до значений с плавающей точкой [0, 1]:

    gl.glColor4f(Color.red(color), Color.green(color), Color.blue(color), Color.alpha(color));

Должно быть так:

    gl.glColor4f(Color.red(color)/(float) 0xFF, Color.green(color)/(float) 0xFF, Color.blue(color)/(float) 0xFF, Color.alpha(color)/(float) 0xFF);

Я не уверен, почему первый способ все еще работал на моем G1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...