Laborator 2

Laborator 2

import java.nio.ByteBuffer;

import java.nio.ByteOrder;

import java.nio.FloatBuffer;

import javax.microedition.khronos.opengles.GL10;

import javax.microedition.khronos.opengles.GL11;

public class Square {

private FloatBuffer mFVertexBuffer;

private ByteBuffer mColorBuffer;

private ByteBuffer mIndexBuffer;

private float vertices[] = {

-2.0f, -1.0f,

1.0f, -1.0f,

-1.0f, 1.0f,

1.0f, 1.0f

};

private byte maxColor = (byte) 255;

// //green

// private byte colors[] = {

// 0, maxColor, 0, 0,

// 0, maxColor, 0, 0,

// 0, maxColor, 0, 0,

// 0, maxColor, 0, 0,

// };

//blue

private byte colors[] = {

0, 0, maxColor, 0,

0, 0, maxColor, 0,

0, 0, maxColor, 0,

0, 0, maxColor, 0,

};

private byte indices[] =

{

0, 3, 1,

0, 2, 3

};

public Square() {

ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);

vbb.order(ByteOrder.nativeOrder());

mFVertexBuffer = vbb.asFloatBuffer();

mFVertexBuffer.put(vertices);

mFVertexBuffer.position(0);

mColorBuffer = ByteBuffer.allocateDirect(colors.length);

mColorBuffer.put(colors);

mColorBuffer.position(0);

mIndexBuffer = ByteBuffer.allocateDirect(indices.length);

mIndexBuffer.put(indices);

mIndexBuffer.position(0);

}

public void draw(GL10 gl)

{

gl.glFrontFace(GL11.GL_CW);

gl.glVertexPointer(2, GL11.GL_FLOAT, 0, mFVertexBuffer);

gl.glColorPointer(4, GL11.GL_UNSIGNED_BYTE, 0, mColorBuffer);

// gl.glDrawElements(GL11.GL_TRIANGLES, 6, GL11.GL_UNSIGNED_BYTE, mIndexBuffer);

gl.glDrawElements(GL11.GL_TRIANGLE_STRIP, 6, GL11.GL_UNSIGNED_BYTE, mIndexBuffer);

// gl.glDrawElements(GL11.GL_POINTS, 6, GL11.GL_UNSIGNED_BYTE, mIndexBuffer);

// gl.glDrawElements(GL11.GL_LINE_STRIP, 6, GL11.GL_UNSIGNED_BYTE, mIndexBuffer);

// gl.glDrawElements(GL11.GL_LINE_LOOP, 6, GL11.GL_UNSIGNED_BYTE, mIndexBuffer);

// gl.glDrawElements(GL11.GL_LINES, 6, GL11.GL_UNSIGNED_BYTE, mIndexBuffer);

// gl.glDrawElements(GL11.GL_TRIANGLE_FAN, 6, GL11.GL_UNSIGNED_BYTE, mIndexBuffer);

}

}

import javax.microedition.khronos.opengles.GL10;

import javax.microedition.khronos.egl.EGLConfig;

import android.opengl.GLSurfaceView;

public class SquareRenderer implements GLSurfaceView.Renderer {

private Square mSquare;

private float mTransY;

public SquareRenderer()

{

mSquare = new Square();

}

public void onDrawFrame(GL10 gl)

{

gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

gl.glMatrixMode(GL10.GL_MODELVIEW);

gl.glLoadIdentity();

gl.glTranslatef(0.0f,(float)Math.sin(mTransY), -3.0f);

// mTransY += 0.075f;

mTransY += 0.3f;

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);

mSquare.draw(gl);

}

public void onSurfaceChanged(GL10 gl, int width, int height)

{

gl.glViewport(0, 0, width, height);

gl.glMatrixMode(GL10.GL_PROJECTION);

gl.glLoadIdentity();

float ratio = (float) width / height;

gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);

}

public void onSurfaceCreated(GL10 gl, EGLConfig config)

{

// gl.glDisable(GL10.GL_DITHER);

gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);

gl.glClearColor(47,47,0,100);

gl.glEnable(GL10.GL_CULL_FACE);

gl.glShadeModel(GL10.GL_SMOOTH);

gl.glEnable(GL10.GL_DEPTH_TEST);

}

}

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.app.Activity;

import android.opengl.GLSurfaceView;

import android.os.Bundle;

import android.view.WindowManager;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

GLSurfaceView view = new GLSurfaceView(this);

view.setRenderer(new SquareRenderer());

setContentView(view);

}

}