A bit late, but might be useful to others too:
One way to simulate a thick line is by creating a rectangle from 2 triangles and make then wider then high.
Here is some code that does exactly this:
Using java Syntax Highlighting
public static final int ONE = 0x10000;
private IntBuffer lineCoordsBuffer;
private void initVertices()
{
int[] lineCoords = {
-ONE * 3, ONE/10, 0,
-ONE * 3, -ONE/10, 0,
ONE * 3, ONE/10, 0,
ONE * 3, -ONE/10, 0
};
lineCoordsBuffer = makeIntBuffer(lineCoords);
}
@Override
public void onDrawFrame(GL10 gl)
{
gl.glEnable(GL10.GL_DITHER);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
drawBeam(gl);
}
private void drawBeam(GL10 gl)
{
gl.glColor4f(0.5f, 0.0f, 0.0f, 1.0f);
gl.glVertexPointer(3, GL10.GL_FIXED, 0, lineCoordsBuffer);
gl.glPushMatrix();
gl.glTranslatef(0, 0, -20);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
gl.glPopMatrix();
}
Parsed in 0.034 seconds, using
GeSHi 1.0.8.4
The beam will be drawn in the current color, which in this case was set to darkish red.
If using integers scares you here is the same example, using floats.
Using java Syntax Highlighting
private FloatBuffer lineCoordsFBuffer;
private void initVertices()
{
float[] lineCoordsF =
{
-3.0f, 4.1f, 0,
-3.0f, 3.9f, 0,
3, 0.1f, 0,
3, -0.1f, 0
};
lineCoordsFBuffer = makeFloatBuffer(lineCoordsF);
}
@Override
public void onDrawFrame(GL10 gl)
{
gl.glEnable(GL10.GL_DITHER);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
drawBeam(gl);
}
private void drawBeam(GL10 gl)
{
gl.glColor4f(0.5f, 0.0f, 0.0f, 1.0f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, lineCoordsFBuffer);
gl.glPushMatrix();
gl.glTranslatef(0, 0, -20);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
gl.glPopMatrix();
}
Parsed in 0.033 seconds, using
GeSHi 1.0.8.4
Helper code:
Using java Syntax Highlighting
protected static FloatBuffer makeFloatBuffer(float[] arr)
{
ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4);
bb.order(ByteOrder.nativeOrder());
FloatBuffer fb = bb.asFloatBuffer();
fb.put(arr);
fb.position(0);
return fb;
}
protected static IntBuffer makeIntBuffer(int[] arr)
{
ByteBuffer vbb = ByteBuffer.allocateDirect(arr.length * 4);
vbb.order(ByteOrder.nativeOrder());
IntBuffer texBuffer = vbb.asIntBuffer();
texBuffer.put(arr);
texBuffer.position(0);
return texBuffer;
}
Parsed in 0.034 seconds, using
GeSHi 1.0.8.4