/** * * @author pquiring * * Created : Sept 7, 2013 * */ import java.awt.*; import java.awt.event.*; import java.util.*; import javaforce.*; import javaforce.gl.*; public class GLProps extends javax.swing.JPanel implements KeyListener { /** * Creates new form GLProps */ public GLProps(Element e, float _fov) { initComponents(); use3d.setSelected(e.use3d); tx.setText(String.format("%.4f", e.tx)); ty.setText(String.format("%.4f", e.ty)); tz.setText(String.format("%.4f", e.tz)); rx.setText(String.format("%.4f", e.rx)); ry.setText(String.format("%.4f", e.ry)); rz.setText(String.format("%.4f", e.rz)); image = new JFImage(); image.load(getClass().getResourceAsStream("img200.png")); previewImage.addKeyListener(this); previewImage.setFocusable(true); if (e.type == Element.TYPE_CAMERA) { use3d.setVisible(false); fov.setText(String.format("%.4f", _fov)); } else { fov.setText("60.0"); fov.setVisible(false); fovLabel.setVisible(false); } width = 588; //previewImage.getWidth(); height = 377; //previewImage.getHeight(); off = new GLOffscreen(); off.createOffscreen(width, height); offimage = new JFImage(); offimage.setSize(width, height); initGL(); timer = new Timer(); timer.schedule(new TimerTask() { public void run() { updateImage(); } },100,100); p_up.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.P_UP; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); p_down.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.P_DOWN; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); p_left.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.P_LEFT; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); p_right.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.P_RIGHT; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); z_up.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.P_IN; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); z_down.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.P_OUT; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); r_up.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.R_UP; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); r_down.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.R_DOWN; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); r_left.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.R_LEFT; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); r_right.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.R_RIGHT; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); rz_up.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.RZ_UP; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); rz_down.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { button = buttons.RZ_DOWN; } public void mouseReleased(java.awt.event.MouseEvent evt) { button = buttons.NONE; } }); } /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The * content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel12 = new javax.swing.JLabel(); use3d = new javax.swing.JCheckBox(); preview = new javax.swing.JPanel(); previewImage = new java.awt.Canvas(); jPanel2 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); tx = new javax.swing.JTextField(); ty = new javax.swing.JTextField(); tz = new javax.swing.JTextField(); jPanel3 = new javax.swing.JPanel(); rz = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); ry = new javax.swing.JTextField(); rx = new javax.swing.JTextField(); jLabel6 = new javax.swing.JLabel(); fovLabel = new javax.swing.JLabel(); fov = new javax.swing.JTextField(); reset = new javax.swing.JButton(); jPanel1 = new javax.swing.JPanel(); p_left = new javax.swing.JButton(); p_down = new javax.swing.JButton(); p_right = new javax.swing.JButton(); p_up = new javax.swing.JButton(); z_up = new javax.swing.JButton(); z_down = new javax.swing.JButton(); jPanel4 = new javax.swing.JPanel(); r_up = new javax.swing.JButton(); r_right = new javax.swing.JButton(); r_left = new javax.swing.JButton(); r_down = new javax.swing.JButton(); rz_up = new javax.swing.JButton(); rz_down = new javax.swing.JButton(); jLabel12.setText("jLabel12"); use3d.setText("Enable 3D position"); preview.setBorder(javax.swing.BorderFactory.createTitledBorder("Preview")); preview.setPreferredSize(new java.awt.Dimension(600, 400)); javax.swing.GroupLayout previewLayout = new javax.swing.GroupLayout(preview); preview.setLayout(previewLayout); previewLayout.setHorizontalGroup( previewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(previewImage, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); previewLayout.setVerticalGroup( previewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(previewImage, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Position")); jPanel2.setPreferredSize(new java.awt.Dimension(150, 95)); jLabel1.setText("X"); jLabel2.setText("Y"); jLabel3.setText("Z"); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(tz, javax.swing.GroupLayout.DEFAULT_SIZE, 128, Short.MAX_VALUE)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(tx)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(ty)) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(tx, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(ty, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(tz, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) ); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Rotation")); jLabel4.setText("Z"); jLabel5.setText("Y"); jLabel6.setText("X"); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(rz, javax.swing.GroupLayout.DEFAULT_SIZE, 128, Short.MAX_VALUE)) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jLabel6) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(rx)) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(ry)) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(rx, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(ry, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(rz, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) ); fovLabel.setText("FOV"); reset.setText("Reset"); reset.setMargin(new java.awt.Insets(2, 4, 2, 4)); reset.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { resetActionPerformed(evt); } }); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Position")); p_left.setIcon(new javax.swing.ImageIcon(getClass().getResource("/left.png"))); // NOI18N p_left.setMargin(new java.awt.Insets(0, 0, 0, 0)); p_down.setIcon(new javax.swing.ImageIcon(getClass().getResource("/down.png"))); // NOI18N p_down.setMargin(new java.awt.Insets(0, 0, 0, 0)); p_right.setIcon(new javax.swing.ImageIcon(getClass().getResource("/right.png"))); // NOI18N p_right.setMargin(new java.awt.Insets(0, 0, 0, 0)); p_up.setIcon(new javax.swing.ImageIcon(getClass().getResource("/up.png"))); // NOI18N p_up.setMargin(new java.awt.Insets(0, 0, 0, 0)); z_up.setIcon(new javax.swing.ImageIcon(getClass().getResource("/up.png"))); // NOI18N z_up.setMargin(new java.awt.Insets(0, 0, 0, 0)); z_down.setIcon(new javax.swing.ImageIcon(getClass().getResource("/down.png"))); // NOI18N z_down.setMargin(new java.awt.Insets(0, 0, 0, 0)); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(p_left) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(p_up) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(p_down) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(p_right))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(z_up) .addComponent(z_down))) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(p_up) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(p_right) .addComponent(p_down) .addComponent(p_left))) .addGroup(jPanel1Layout.createSequentialGroup() .addComponent(z_up) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(z_down)) ); jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Rotation")); r_up.setIcon(new javax.swing.ImageIcon(getClass().getResource("/up.png"))); // NOI18N r_up.setMargin(new java.awt.Insets(0, 0, 0, 0)); r_right.setIcon(new javax.swing.ImageIcon(getClass().getResource("/right.png"))); // NOI18N r_right.setMargin(new java.awt.Insets(0, 0, 0, 0)); r_left.setIcon(new javax.swing.ImageIcon(getClass().getResource("/left.png"))); // NOI18N r_left.setMargin(new java.awt.Insets(0, 0, 0, 0)); r_down.setIcon(new javax.swing.ImageIcon(getClass().getResource("/down.png"))); // NOI18N r_down.setMargin(new java.awt.Insets(0, 0, 0, 0)); rz_up.setIcon(new javax.swing.ImageIcon(getClass().getResource("/up.png"))); // NOI18N rz_up.setMargin(new java.awt.Insets(0, 0, 0, 0)); rz_down.setIcon(new javax.swing.ImageIcon(getClass().getResource("/down.png"))); // NOI18N rz_down.setMargin(new java.awt.Insets(0, 0, 0, 0)); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(r_left) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(r_up) .addGroup(jPanel4Layout.createSequentialGroup() .addComponent(r_down) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(r_right))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(rz_up) .addComponent(rz_down))) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() .addComponent(rz_up) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(rz_down)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() .addComponent(r_up) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(r_right) .addComponent(r_down) .addComponent(r_left))) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(preview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSequentialGroup() .addComponent(use3d) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fovLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fov, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(reset)) .addGroup(layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(use3d) .addComponent(fovLabel) .addComponent(fov, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(reset)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(preview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents private void resetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetActionPerformed tx.setText("0.0"); ty.setText("0.0"); tz.setText("0.0"); rx.setText("0.0"); ry.setText("0.0"); rz.setText("0.0"); fov.setText("60.0"); }//GEN-LAST:event_resetActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextField fov; private javax.swing.JLabel fovLabel; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JButton p_down; private javax.swing.JButton p_left; private javax.swing.JButton p_right; private javax.swing.JButton p_up; private javax.swing.JPanel preview; private java.awt.Canvas previewImage; private javax.swing.JButton r_down; private javax.swing.JButton r_left; private javax.swing.JButton r_right; private javax.swing.JButton r_up; private javax.swing.JButton reset; private javax.swing.JTextField rx; private javax.swing.JTextField ry; private javax.swing.JTextField rz; private javax.swing.JButton rz_down; private javax.swing.JButton rz_up; private javax.swing.JTextField tx; private javax.swing.JTextField ty; private javax.swing.JTextField tz; private javax.swing.JCheckBox use3d; private javax.swing.JButton z_down; private javax.swing.JButton z_up; // End of variables declaration//GEN-END:variables GLScene scene; GLModel model; GLObject object; GLRender render; JFImage image; java.util.Timer timer; GLOffscreen off; JFImage offimage; int width,height; enum buttons {NONE, P_UP, P_DOWN, P_LEFT, P_RIGHT, P_IN, P_OUT, R_UP, R_DOWN, R_LEFT, R_RIGHT, RZ_UP, RZ_DOWN}; buttons button = buttons.NONE; public void save(Element e) { if (tx.getText().length() == 0) tx.setText("0"); if (ty.getText().length() == 0) ty.setText("0"); if (tz.getText().length() == 0) tz.setText("0"); if (rx.getText().length() == 0) rx.setText("0"); if (ry.getText().length() == 0) ry.setText("0"); if (rz.getText().length() == 0) rz.setText("0"); if (fov.getText().length() == 0) fov.setText("0"); e.use3d = use3d.isSelected(); e.tx = Float.valueOf(tx.getText()); e.ty = Float.valueOf(ty.getText()); e.tz = Float.valueOf(tz.getText()); e.rx = Float.valueOf(rx.getText()); e.ry = Float.valueOf(ry.getText()); e.rz = Float.valueOf(rz.getText()); } public float getFOV() { return Float.valueOf(fov.getText()); } private void initGL() { JFLog.log("GLProps.init()"); MainPanel.gl.pollEvents(); scene = new GLScene(); scene.init(GLVertexShader.source, GLFragmentShader.source); render = new GLRender(); render.init(scene, width, height); model = new GLModel(); scene.addModel(model); object = new GLObject(); model.addObject(object); model.addTexture("0"); //need to calc based on w,h,fov float z = 5.0f; float x = 2.0f; float y = 2.0f; GLUVMap map = object.createUVMap(); map.textureIndex = 0; map.texloaded = true; //direct loaded object.addVertex(new float[] {-x,-y,-z}, new float[] {0,1}); object.addVertex(new float[] {+x,-y,-z}, new float[] {1,1}); object.addVertex(new float[] {-x,+y,-z}, new float[] {0,0}); object.addVertex(new float[] {+x,+y,-z}, new float[] {1,0}); object.addPoly(new int[] {0,3,2}); object.addPoly(new int[] {0,1,3}); object.copyBuffers(); scene.setTexture("0", image.getPixels(), image.getWidth(), image.getHeight(), 0); x = Float.valueOf(tx.getText()); y = Float.valueOf(ty.getText()); z = Float.valueOf(tz.getText()); model.translate(x, y, z); x = Float.valueOf(rx.getText()); y = Float.valueOf(ry.getText()); z = Float.valueOf(rz.getText()); model.rotate(x, 1.0f, 0, 0); model.rotate(y, 0, 1.0f, 0); model.rotate(z, 0, 0, 1.0f); } public void render() { try { java.awt.EventQueue.invokeAndWait(new Runnable() { public void run() { MainPanel.gl.pollEvents(); float x,y,z; model.setIdentity(); x = Float.valueOf(rx.getText()); y = Float.valueOf(ry.getText()); z = Float.valueOf(rz.getText()); model.rotate(x, 1.0f, 0.0f, 0.0f); model.rotate(y, 0.0f, 1.0f, 0.0f); model.rotate(z, 0.0f, 0.0f, 1.0f); x = Float.valueOf(tx.getText()); y = Float.valueOf(ty.getText()); z = Float.valueOf(tz.getText()); model.translate(x,y,z); x = Float.valueOf(fov.getText()); render.fovy = x; render.render(); offimage.putPixels(off.getOffscreenPixels(), 0,0,width,height,0); offimage.fillAlpha(0, 0, width, height, 0xff); previewImage.getGraphics().drawImage(offimage.getImage(), 0, 0, null); } }); } catch (Exception e) { e.printStackTrace(); } } public void uninit() { timer.cancel(); } public void resize(GL gl, int width, int height) { render.resize(width, height); } private static float delta = 0.1f; private static float angle = 1.0f; public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { char ch = e.getKeyChar(); int cc = e.getKeyCode(); float f; switch (ch) { case 'a': button = buttons.P_LEFT; break; case 's': button = buttons.P_DOWN; break; case 'd': button = buttons.P_RIGHT; break; case 'w': button = buttons.P_UP; break; case 'r': button = buttons.P_IN; break; case 'f': button = buttons.P_OUT; break; case 'z': button = buttons.RZ_UP; break; case 'x': button = buttons.RZ_DOWN; break; } switch (cc) { case KeyEvent.VK_UP: button = buttons.R_UP; break; case KeyEvent.VK_DOWN: button = buttons.R_DOWN; break; case KeyEvent.VK_LEFT: button = buttons.R_LEFT; break; case KeyEvent.VK_RIGHT: button = buttons.R_RIGHT; break; } } public void keyReleased(KeyEvent e) { button = buttons.NONE; } private void adjustImage(buttons button) { float f; switch (button) { case P_LEFT: f = Float.valueOf(tx.getText()); f -= delta; tx.setText(String.format("%.4f", f)); break; case P_DOWN: f = Float.valueOf(ty.getText()); f -= delta; ty.setText(String.format("%.4f", f)); break; case P_RIGHT: f = Float.valueOf(tx.getText()); f += delta; tx.setText(String.format("%.4f", f)); break; case P_UP: f = Float.valueOf(ty.getText()); f += delta; ty.setText(String.format("%.4f", f)); break; case P_IN: f = Float.valueOf(tz.getText()); f += delta; tz.setText(String.format("%.4f", f)); break; case P_OUT: f = Float.valueOf(tz.getText()); f -= delta; tz.setText(String.format("%.4f", f)); break; case RZ_UP: f = Float.valueOf(rz.getText()); f += angle; rz.setText(String.format("%.4f", f)); break; case RZ_DOWN: f = Float.valueOf(rz.getText()); f -= angle; rz.setText(String.format("%.4f", f)); break; case R_UP: f = Float.valueOf(rx.getText()); f += angle; rx.setText(String.format("%.4f", f)); break; case R_DOWN: f = Float.valueOf(rx.getText()); f -= angle; rx.setText(String.format("%.4f", f)); break; case R_LEFT: f = Float.valueOf(ry.getText()); f += angle; ry.setText(String.format("%.4f", f)); break; case R_RIGHT: f = Float.valueOf(ry.getText()); f -= angle; ry.setText(String.format("%.4f", f)); break; } } public void updateImage() { adjustImage(button); render(); } }