Back to project page kgl2.
The source code is released under:
Boost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation co...
If you think the Android project kgl2 listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* Copyright 2014 Stanislav Petriakov // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) *//* ww w. j av a 2s .c o m*/ package kg.fucking.shit.kgl2; /** * Created by 4eRT on 28.12.2014. */ import android.graphics.Bitmap; import android.opengl.GLUtils; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.ShortBuffer; import javax.microedition.khronos.opengles.GL10; public class Mesh { private FloatBuffer mVerticesBuffer = null; private ShortBuffer mIndicesBuffer = null; private int mNumOfIndices = -1; private FloatBuffer mTextureBuffer; private int mTextureId = -1; private Bitmap mBitmap; private boolean mShouldLoadTexture = false; // Flat Color private final float[] mRGBA = new float[]{1.0f, 1.0f, 1.0f, 1.0f}; private float wParam = GL10.GL_REPEAT; private float hParam = GL10.GL_REPEAT; // Translate params. public float x = 0; public float y = 0; public float z = 0; // Rotate params. public float rx = 0; public float ry = 0; public float rz = 0; public void draw(GL10 gl) { // some inits gl.glFrontFace(GL10.GL_CCW); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVerticesBuffer); gl.glColor4f(mRGBA[0], mRGBA[1], mRGBA[2], mRGBA[3]); // texture need to be loaded if (mShouldLoadTexture) { loadGLTexture(gl); mShouldLoadTexture = false; } // enable texturing and bind to mesh if (mTextureId != -1 && mTextureBuffer != null) { gl.glEnable(GL10.GL_TEXTURE_2D); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTextureBuffer); gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureId); } // Translation and rotations gl.glTranslatef(x, y, z); gl.glRotatef(rx, 1, 0, 0); gl.glRotatef(ry, 0, 1, 0); gl.glRotatef(rz, 0, 0, 1); // draw and disable buffers gl.glDrawElements(GL10.GL_TRIANGLES, mNumOfIndices, GL10.GL_UNSIGNED_SHORT, mIndicesBuffer); gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); if (mTextureId != -1 && mTextureBuffer != null) { gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); } } // sets vertices protected void setVertices(float[] vertices) { // a float is 4 bytes, therefore we multiply the number if vertices with 4. ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); vbb.order(ByteOrder.nativeOrder()); mVerticesBuffer = vbb.asFloatBuffer(); mVerticesBuffer.put(vertices); mVerticesBuffer.position(0); } // sets indices to connect vertices in right order protected void setIndices(short[] indices) { // short is 2 bytes, therefore we multiply the number if vertices with 2. ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2); ibb.order(ByteOrder.nativeOrder()); mIndicesBuffer = ibb.asShortBuffer(); mIndicesBuffer.put(indices); mIndicesBuffer.position(0); mNumOfIndices = indices.length; } // sets texture's coordinates to mapping protected void setTextureCoordinates(float[] textureCoords) { // float is 4 bytes, therefore we multiply the number if vertices with 4. ByteBuffer byteBuf = ByteBuffer.allocateDirect(textureCoords.length * 4); byteBuf.order(ByteOrder.nativeOrder()); mTextureBuffer = byteBuf.asFloatBuffer(); mTextureBuffer.put(textureCoords); mTextureBuffer.position(0); } // sets mesh color protected void setColor(float red, float green, float blue, float alpha) { mRGBA[0] = red; mRGBA[1] = green; mRGBA[2] = blue; mRGBA[3] = alpha; } // sets bitmap to use public void loadBitmap(Bitmap bitmap) { this.mBitmap = bitmap; mShouldLoadTexture = true; } // sets repeat or clamp mode by _S public void setWidthFilter(float param) { if (param == GL10.GL_REPEAT || param == GL10.GL_CLAMP_TO_EDGE) wParam = param; } // sets repeat or clamp mode by _T public void setHeightFilter(float param) { if (param == GL10.GL_REPEAT || param == GL10.GL_CLAMP_TO_EDGE) hParam = param; } private void loadGLTexture(GL10 gl) { // Generate one texture pointer... int[] textures = new int[1]; gl.glGenTextures(1, textures, 0); mTextureId = textures[0]; // ...and bind it to our array gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureId); // Create Nearest Filtered Texture gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); // Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, wParam); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, hParam); // Use the Android GLUtils to specify a two-dimensional texture image from our bitmap GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, mBitmap, 0); } }