Posted by
yaqiang on
Dec 23, 2021; 8:27am
URL: https://forum.jogamp.org/contour-lines-disappeared-when-zoom-in-3D-earth-coordinates-tp4041550p4041558.html
By the way, GL_POLYGON_OFFSET_FILL is a good way to solve coplanar lines/polygons problem. For example it was used in drawPolygon function of Plot3DGL class (
https://github.com/meteoinfo/MeteoInfo/blob/master/meteoinfo-chart/src/main/java/org/meteoinfo/chart/jogl/Plot3DGL.java).
private void drawPolygon(GL2 gl, PolygonZ aPG, PolygonBreak aPGB) {
if (aPGB.isDrawFill() && aPGB.getColor().getAlpha() > 0) {
gl.glEnable(GL2.GL_POLYGON_OFFSET_FILL);
gl.glPolygonOffset(1.0f, 1.0f); float[] rgba = aPGB.getColor().getRGBComponents(null);
gl.glColor4f(rgba[0], rgba[1], rgba[2], rgba[3]);
try {
TessPolygon tessPolygon = new TessPolygon(aPG);
for (Primitive primitive : tessPolygon.getPrimitives()) {
gl.glBegin(primitive.type);
for (PointZ p : primitive.vertices) {
gl.glVertex3fv(transform.transform((float) p.X, (float) p.Y, (float) p.Z), 0);
}
gl.glEnd();
}
aPG = tessPolygon;
} catch (Exception e) {
e.printStackTrace();
}
}
if (aPGB.isDrawOutline()) {
float[] rgba = aPGB.getOutlineColor().getRGBComponents(null);
gl.glLineWidth(aPGB.getOutlineSize() * this.dpiScale);
gl.glColor4f(rgba[0], rgba[1], rgba[2], rgba[3]);
gl.glBegin(GL2.GL_LINE_STRIP);
PointZ p;
for (int i = 0; i < aPG.getOutLine().size(); i++) {
p = ((List<PointZ>) aPG.getOutLine()).get(i);
gl.glVertex3fv(transform.transform((float) p.X, (float) p.Y, (float) p.Z), 0);
}
gl.glEnd();
if (aPG.hasHole()) {
List<PointZ> newPList;
gl.glBegin(GL2.GL_LINE_STRIP);
for (int h = 0; h < aPG.getHoleLines().size(); h++) {
newPList = (List<PointZ>) aPG.getHoleLines().get(h);
for (int j = 0; j < newPList.size(); j++) {
p = newPList.get(j);
gl.glVertex3fv(transform.transform((float) p.X, (float) p.Y, (float) p.Z), 0);
}
}
gl.glEnd();
}
gl.glDisable(GL2.GL_POLYGON_OFFSET_FILL); }
}
www.meteothink.org