Мобильные платформы
GameDev.ru / Мобильные платформы / Форум / Android. Не работают материалы в OpenGL ES 1.0

Android. Не работают материалы в OpenGL ES 1.0

Поделиться
pascal.ilyaПостоялецwww27 июля 201216:43#0
Здравствуйте!

Столкнулся с такой проблемой. Пытаюсь задать материал объекту, но он не применяется и объект окрашивается серым цветом.

Вот пример кода:

float matSolid[] = {0.75f, 0.75f, 0.0f, 1.0f};
float matZero[] = {0.0f, 0.0f, 0.0f, 1.0f};
float matTransparent[] = {0.0f, 0.8f, 0.8f, 0.6f};
float matEmission[] = {0.0f, 0.3f, 0.3f, 0.6f};
    
FloatBuffer matSolidBfr;
matSolidBfr = makeFloatBuffer(matSolid);
FloatBuffer matZeroBfr;
matZeroBfr = makeFloatBuffer(matZero);
    
gl.glPushMatrix();
  gl.glTranslatef(-0.15f, -0.15f, solidZ);
  gl.glMaterialfv(GL10.GL_FRONT, GL10.GL_EMISSION, matZeroBfr);
  gl.glMaterialfv(GL10.GL_FRONT, GL10.GL_DIFFUSE, matSolidBfr);
  mSphere.Draw(gl);      
gl.glPopMatrix();    
    
gl.glPushMatrix();
  gl.glTranslatef(0.15f, 0.15f, transparentZ);
  gl.glRotatef(15.0f, 1.0f, 1.0f, 0.0f);
  gl.glRotatef(30.0f, 0.0f, 1.0f, 0.0f);
      
  FloatBuffer matTransparentBft;
  matTransparentBft = makeFloatBuffer(matTransparent);
  FloatBuffer matEmissionBfr;
  matEmissionBfr = makeFloatBuffer(matEmission);
      
  gl.glMaterialfv(GL10.GL_FRONT, GL10.GL_EMISSION, matEmissionBfr);
  gl.glMaterialfv(GL10.GL_FRONT, GL10.GL_DIFFUSE, matTransparentBft);
      
  gl.glEnable (GL10.GL_BLEND);    
  gl.glDepthMask (false);
  gl.glBlendFunc (GL10.GL_SRC_ALPHA, GL10.GL_ONE);
      
  mcube.Draw(gl);
    
  gl.glDepthMask (true);
  gl.glDisable (GL10.GL_BLEND);
gl.glPopMatrix();

Перед ним идет инициализация:

lightPosition[0] = 0.5f; lightPosition[1] = 0.5f; lightPosition[2] = 1.0f; 
      
FloatBuffer matSpecularBfr;
matSpecularBfr = makeFloatBuffer(matSpecular);
FloatBuffer matShininessBfr;
matShininessBfr = makeFloatBuffer(matShininess);
FloatBuffer lightPositionBfr;
lightPositionBfr = makeFloatBuffer(lightPosition);
FloatBuffer whiteLightBfr;
whiteLightBfr = makeFloatBuffer(whiteLight);          
      
gl.glMaterialfv(GL10.GL_FRONT, GL10.GL_SPECULAR, matSpecularBfr); 
gl.glMaterialfv(GL10.GL_FRONT, GL10.GL_SHININESS, matShininessBfr); 
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPositionBfr);       

gl.glEnable(GL10.GL_LIGHTING);
gl.glEnable(GL10.GL_LIGHT0);    
gl.glEnable(GL10.GL_DEPTH_TEST);
      
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();      

gl.glOrthof(-1.5f, 1.5f, -1.5f, 1.5f, -10.0f, 10.0f);

Результат получается такой:
android1 | Android. Не работают материалы в OpenGL ES 1.0

А хотелось бы увидеть вот это:
android2 | Android. Не работают материалы в OpenGL ES 1.0

Уважаемые гуру посоветуйте в чем может быть проблема. Заранее большое спасибо!

ArochПостоялецwww6 авг. 20120:15#1
читай логи, возможно какая либо из функций не имеет реализации.
Навскидку могу предположить что есть glMaterialiv  но нет glMaterialfv -)
StainПостоялецwww6 авг. 201223:46#2
pascal.ilya
Дай лучше код целиком, чтоб собрать и поглядеть. :) (я в таких случаях вырезаю пример кода в отдельный проект и кладу его к себе на github)
pascal.ilyaПостоялецwww7 авг. 201212:50#3
Долго экспериментировал меняя разные параметры, и наконец то заработало. Осталось теперь понять из-за чего все починилось.

Stain
Код можешь скачать отсюда:
http://code.google.com/p/opengl-red-book-examples/

/ Форум / Мобильные платформы / Общее

Тема в архиве.

2001—2017 © GameDev.ru — Разработка игр