package rajawali.primitives; import java.util.Stack; import rajawali.BaseObject3D; import rajawali.math.Number3D; import android.graphics.Color; import android.opengl.GLES20; public class Line3D extends BaseObject3D { private Stack<Number3D> mPoints; private float mThickness; private int mLineColor; public Line3D(Stack<Number3D> points, float thickness, int color) { super(); mPoints = points; mThickness = thickness; mLineColor = color; init(); } private void init() { setDoubleSided(true); setDrawingMode(GLES20.GL_LINE_STRIP); int numVertices = mPoints.size(); float[] vertices = new float[numVertices * 3]; float[] textureCoords = new float[numVertices * 2]; float[] normals = new float[numVertices * 3]; float[] colors = new float[numVertices * 4]; int[] indices = new int[numVertices]; float r = Color.red(mLineColor) / 255f; float g = Color.green(mLineColor) / 255f; float b = Color.blue(mLineColor) / 255f; float a = Color.alpha(mLineColor) / 255f; for(int i=0; i<numVertices; i++) { Number3D point = mPoints.get(i); int index = i * 3; vertices[index] = point.x; vertices[index+1] = point.y; vertices[index+2] = point.z; normals[index] = 0; normals[index+1] = 0; normals[index+2] = 1; index = i * 2; textureCoords[index] = 0; textureCoords[index+1] = 0; index = i * 4; colors[index] = r; colors[index+1] = g; colors[index+2] = b; colors[index+3] = a; indices[i] = (short)i; } setData(vertices, normals, textureCoords, colors, indices); } public void preRender() { super.preRender(); GLES20.glLineWidth(mThickness); } }