2010-04-28 5 views
2

Il semble que glColorMaterial() est absent de OpenGL ES. Selon this post (pour iPhone), vous pouvez toujours activer GL_COLOR_MATERIAL dans OpenGL ES 1.x, mais vous êtes coincé avec les paramètres par défaut de GL_FRONT_AND_BACK et GL_AMBIENT_AND_DIFFUSE que vous définiriez autrement avec glColorMaterial(). Je serais d'accord avec cela, mais l'éclairage diffus ne fonctionne pas correctement.GL_COLOR_MATERIAL avec éclairage sur Android

J'ai mis en place ma scène et l'ai testé avec une lumière, en réglant glMaterialfv() pour GL_AMBIENT et GL_DIFFUSE une fois dans l'initialisation. Les normales ont été réglées correctement et l'éclairage fonctionne comme prévu. Je vois l'ombrage Gouraud.

Avec GL_LIGHTING désactivé, les couleurs plates que j'ai définies avec glColor4f() apparaissent sur les divers objets de la scène. Cela fonctionne également comme prévu. Cependant, lorsque glEnable(GL_COLOR_MATERIAL) est appelée, les couleurs plates restent. Je m'attendrais à voir les effets d'éclairage.

glColorMaterial() est également mentioned on anddev.org, mais je ne suis pas sûr que l'information soit exacte.

Je suis en train de tester ceci sur un téléphone Android 2.1 (Motorola Droid).

Édition: Fonctionne correctement sur mon combiné 1.6 (ADP1). J'ai classé Issue 8015. Il fait pas de travail avec l'émulateur pour Android 1.6 ou 2.1. Il s'agit d'un minimal testcase pour reproduire le problème.

Capture sur les applications 1.6 (ADP1):

alt text

Capture de même code en cours d'exécution sur les applications 2.1 (Motorola Droid):

alt text

Capture sur Android 1.6 (Émulateur):

alt text

Répondre

1

Ce fut une erreur stupide de ma part. Étant donné un entier de 32 bits Android color, je l'avais oublié à l'échelle les composantes de couleur à flotteurs dans l'intervalle [0, 1]:

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

Il devrait avoir des abeilles comme ceci:

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

I Je ne sais pas pourquoi la première façon fonctionnait encore sur mon G1.