Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

public class RendererPlanoMaterial implements GLSurfaceView.

Renderer {
private PlanoLuz pin, pli;
private static float angulo = 0.0f;

private static final int LUZ_0 = GL10.GL_LIGHT0;


private static final int LUZ_1 = GL10.GL_LIGHT1;
private float[] posicionLuz0, spotDir;

private float[] colorRojoLuz0 = {1.0f, 0.0f, 0.0f, 1.0f};


private float[] colorVerdeLuz0 = {0.0f, 1.0f, 0.0f, 1.0f};
private float[] colorAzulLuz0 = {0.0f, 0.0f, 1.0f, 1.0f};

private float[] materialRojo = {1.0f, 0.0f, 0.0f, 1.0f};


private float[] materialVerde = {0.0f, 1.0f, 0.0f, 1.0f};
private float[] materialAzul = {0.0f, 0.0f, 1.0f, 1.0f};
private float[] materialAmarillo = {1.0f, 1.0f, 0.0f, 1.0f};
private float[] materialCeleste = {0.0f, 1.0f, 1.0f, 1.0f};
private float[] materialBlanco = {1.0f, 1.0f, 1.0f, 1.0f};

private float rotacion = 0;

public RendererPlanoMaterial() {
pin = new PlanoLuz();
pin.setPlanoInferior();
pli = new PlanoLuz();
pli.setPlanoLateralIzq();
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(0.5f, 0.5f, 0.2f, 1.0f);
gl.glEnable(gl.GL_DEPTH_TEST);
gl.glEnable(gl.GL_NORMALIZE);
gl.glEnable(gl.GL_LIGHTING);
gl.glEnable(LUZ_0);
gl.glEnable(LUZ_1);
}

@Override
public void onSurfaceChanged(GL10 gl, int ancho, int alto) {
float relacionAspecto = (float)ancho/(float)alto;
gl.glViewport(0, 0, ancho, alto);

gl.glMatrixMode(gl.GL_PROJECTION);
gl.glFrustumf(-relacionAspecto, relacionAspecto, -1.0f, 1.0f, 1.0f, 50.0f);

gl.glMatrixMode(gl.GL_MODELVIEW);
GLU.gluLookAt(gl,
0,0,3f,
0,0,0,
0,1,0);
}

@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(gl.GL_MODELVIEW);

gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -3.0f);
gl.glPushMatrix();
gl.glMaterialfv(gl.GL_FRONT_AND_BACK, gl.GL_DIFFUSE, materialRojo, 0);
gl.glTranslatef(0.0f, -1.0f, 0.0f);
pin.dibujar(gl, pin.getBufferVertices(), pin.getBufferNormales(),
pin.getBufferIndices());
gl.glPopMatrix();
gl.glRotatef(rotacion,0,0,1);

gl.glLightModelfv(gl.GL_LIGHT_MODEL_AMBIENT,FloatBuffer.wrap(materialAmarillo));
posicionLuz0 = new float[] {0.0f, 1.0f, -3.0f, 1.0f};
//luz apunta lado izquierdo
//spotDir = new float[] {-1.0f, -1.0f, 0.0f, 1.0f};
//luz apunta hacia bajo
spotDir = new float[] {0.0f, -1.0f, 0.0f, 1.0f};
gl.glLightfv(LUZ_0, gl.GL_POSITION, posicionLuz0, 0);
gl.glLightfv(LUZ_0, gl.GL_DIFFUSE, colorRojoLuz0, 0);
gl.glLightfv(LUZ_0,gl.GL_SPOT_DIRECTION, FloatBuffer.wrap(spotDir));
gl.glLightf(LUZ_0,gl.GL_SPOT_CUTOFF, 10);
gl.glLightf(LUZ_0,gl.GL_SPOT_EXPONENT, 35);

gl.glLightfv(LUZ_1, gl.GL_POSITION, posicionLuz0, 0);


gl.glLightfv(LUZ_1, gl.GL_DIFFUSE, colorVerdeLuz0, 0);
spotDir = new float[] {-1.0f, -1.0f, 0.0f, 1.0f};
gl.glLightfv(LUZ_1,gl.GL_SPOT_DIRECTION, FloatBuffer.wrap(spotDir));
gl.glLightf(LUZ_1,gl.GL_SPOT_CUTOFF, 10);
gl.glLightf(LUZ_1,gl.GL_SPOT_EXPONENT, 35);

gl.glMaterialfv(gl.GL_FRONT_AND_BACK, gl.GL_DIFFUSE, materialRojo, 0);


gl.glTranslatef(0.0f, 0.0f, 0.0f);
pin.dibujar(gl, pin.getBufferVertices(), pin.getBufferNormales(),
pin.getBufferIndices());

gl.glTranslatef(0.0f, 0.0f, 0.0f);


gl.glMaterialfv(gl.GL_FRONT_AND_BACK, gl.GL_DIFFUSE, materialVerde, 0);
pli.dibujar(gl, pli.getBufferVertices(), pli.getBufferNormales(),
pli.getBufferIndices());

rotacion +=0.5f;
}
}

You might also like