[fix] enabled select of 3d components in the general case

This commit is contained in:
Daniel_M_Williams 2020-07-18 18:06:58 -04:00
parent ae93141a21
commit 12b299c25a
2 changed files with 11 additions and 32 deletions

View File

@ -317,7 +317,8 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
gl.glClearColor(1, 1, 1, 1);
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glEnable(GL.GL_MULTISAMPLE);
gl.glEnable(GLLightingFunc.GL_LIGHTING);
}
rr.render(drawable, configuration, selection);
@ -325,7 +326,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
drawExtras(gl, glu);
drawCarets(gl, glu);
//GLJPanel with GLSL Flipper relies on this:
// GLJPanel with GLSL Flipper relies on this:
gl.glFrontFace(GL.GL_CCW);
}

View File

@ -76,24 +76,16 @@ public abstract class RocketRenderer {
final GL2 gl = drawable.getGL().getGL2();
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glDisable(GLLightingFunc.GL_LIGHTING);
// System.err.println(String.format("Picking component at: %d, %d on canvas: %d", p.x, p.y, drawable.hashCode()));
// Store a vector of pickable parts.
final Map<Integer, RocketComponent> selectionMap = new HashMap<>();
{
Collection<Geometry> geometryList = getTreeGeometry( configuration);
for(Geometry geom: geometryList ) {
final RocketComponent comp = geom.getComponent();
if (ignore != null && ignore.contains(comp))
continue;
// source for components + instances
final InstanceMap pickParts = configuration.getActiveInstances();
for(final RocketComponent comp : pickParts.keySet() ) {
if (ignore != null && ignore.contains(comp))
continue;
// Encode the hashCode of the component as a color:
// we don't actually care which instance this is, because they all select the same RocketComponent
if( geom.active ) {
final int hashCode = comp.hashCode();
selectionMap.put(hashCode, comp);
@ -103,18 +95,11 @@ public abstract class RocketRenderer {
(byte) ((hashCode >> 8) & 0xFF), // blue channel
(byte) ((hashCode) & 0xFF)); // alpha channel (MSB)
// DEBUG
// System.err.println(String.format( " [component: %s]: %s", Integer.toHexString(hashCode), comp.getName()));
if (isDrawnTransparent(comp)) {
cr.getComponentGeometry(comp).render(gl, Surface.INSIDE);
geom.render(gl, Surface.INSIDE);
} else {
cr.getComponentGeometry(comp).render(gl, Surface.ALL);
geom.render(gl, Surface.ALL);
}
// for (InstanceContext context : pickParts.getInstanceContexts(comp)) {
// System.err.println(String.format(" Instance: %s ", context.instanceNumber, Integer.toHexString(hashCode).toUpperCase()));
// }
}
}
@ -129,13 +114,6 @@ public abstract class RocketRenderer {
final int pixelValue = buffer.getInt();
final RocketComponent selected = selectionMap.get(pixelValue);
// DEBUG
// if(null == selected){
// System.err.println(String.format("<< read pixel value: %s ==>> select: <none>", Integer.toHexString(pixelValue)));
// }else{
// System.err.println(String.format("<< read pixel value: %s ==>> select: %s", Integer.toHexString(pixelValue), selected.getName()));
// }
return selected;
}