package org.jzy3d.plot3d.primitives.textured;
import org.jzy3d.colors.Color;
import org.jzy3d.plot3d.primitives.Point;
import org.jzy3d.plot3d.primitives.Quad;
import org.jzy3d.plot3d.rendering.compat.GLES2CompatUtils;
import org.jzy3d.plot3d.rendering.view.Camera;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL2GL3;
import com.jogamp.opengl.glu.GLU;
public class TranslucentQuad extends Quad implements ITranslucent {
@Override
public void draw(GL gl, GLU glu, Camera cam) {
// Execute transformation
doTransform(gl, glu, cam);
if (gl.isGL2()) {
// Draw content of polygon
if (facestatus) {
gl.getGL2().glPolygonMode(GL.GL_FRONT_AND_BACK, GL2GL3.GL_FILL);
if (wfstatus) {
gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPolygonOffset(1.0f, 1.0f);
}
gl.getGL2().glBegin(GL2GL3.GL_QUADS); // <<<
for (Point p : points) {
if (mapper != null) {
Color c = mapper.getColor(p.xyz); // TODO: should store
// result in the
// point color
callWithAlphaFactor(gl, c, alpha);
} else
callWithAlphaFactor(gl, p.rgb, alpha);
gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
}
gl.getGL2().glEnd();
if (wfstatus)
gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
}
// Draw edge of polygon
if (wfstatus) {
gl.getGL2().glPolygonMode(GL.GL_FRONT_AND_BACK, GL2GL3.GL_LINE);
gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPolygonOffset(1.0f, 1.0f);
callWithAlphaFactor(gl, wfcolor, alpha);
gl.glLineWidth(wfwidth);
gl.getGL2().glBegin(GL2GL3.GL_QUADS);
for (Point p : points) {
gl.getGL2().glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
}
gl.getGL2().glEnd();
gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
}
} else {
// Draw content of polygon
if (facestatus) {
GLES2CompatUtils.glPolygonMode(GL.GL_FRONT_AND_BACK,
GL2GL3.GL_FILL);
if (wfstatus) {
gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPolygonOffset(1.0f, 1.0f);
}
GLES2CompatUtils.glBegin(GL2GL3.GL_QUADS); // <<<
for (Point p : points) {
if (mapper != null) {
Color c = mapper.getColor(p.xyz); // TODO: should store
// result in the
// point color
callWithAlphaFactor(gl, c, alpha);
} else
callWithAlphaFactor(gl, p.rgb, alpha);
GLES2CompatUtils.glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
}
GLES2CompatUtils.glEnd();
if (wfstatus)
gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
}
// Draw edge of polygon
if (wfstatus) {
GLES2CompatUtils.glPolygonMode(GL.GL_FRONT_AND_BACK,
GL2GL3.GL_LINE);
gl.glEnable(GL.GL_POLYGON_OFFSET_FILL);
gl.glPolygonOffset(1.0f, 1.0f);
callWithAlphaFactor(gl, wfcolor, alpha);
gl.glLineWidth(wfwidth);
GLES2CompatUtils.glBegin(GL2GL3.GL_QUADS);
for (Point p : points) {
GLES2CompatUtils.glVertex3f(p.xyz.x, p.xyz.y, p.xyz.z);
}
GLES2CompatUtils.glEnd();
gl.glDisable(GL.GL_POLYGON_OFFSET_FILL);
}
}
}
@Override
public void setAlphaFactor(float a) {
alpha = a;
}
protected float alpha = 1;
}
Ads help maintain this website.