Skip to content

Instantly share code, notes, and snippets.

@ronnyworm
Last active March 25, 2017 13:18
Show Gist options
  • Save ronnyworm/38c6d707c6f4b371dc57376c405e464e to your computer and use it in GitHub Desktop.
Save ronnyworm/38c6d707c6f4b371dc57376c405e464e to your computer and use it in GitHub Desktop.
Simple JOGL Test (not my code!)
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
import com.jogamp.opengl.*;
import com.jogamp.opengl.awt.GLCanvas;
import com.jogamp.opengl.glu.GLU;
public class HelloJOGL2 extends JFrame implements KeyListener{
GLCanvas canvas;
SceneView sv;
boolean xPressed,yPressed,zPressed;
public HelloJOGL2() {
sv = new SceneView();
GLProfile glp = GLProfile.getDefault();
GLCapabilities caps = new GLCapabilities(glp);
canvas = new GLCanvas(caps);
canvas.addGLEventListener(sv);
add(canvas);
canvas.addKeyListener(this);
setTitle("Jogl Blatt 2");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,500);
setVisible(true);
}
class SceneView implements GLEventListener {
private int eyeX = 10;
private int eyeY = 10;
private int eyeZ = 10;
private int centerX = 0;
private int centerY = 0;
private int centerZ = 0;
private int upX = 0;
private int upY = 1;
private int upZ = 0;
public void init(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
gl.glClearColor(0.5f, 0.5f, 0.5f, 0f); // grey background
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(-10, 10, -10, 10, 0, 100);
}
public void display(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT); // clear background
GLU glu = new GLU();
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
glu.gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);
gl.glColor3d(0.3, 0.3, 0.3); //draw in grey
for(int i=-5; i<=5;i++){
gl.glBegin(GL2.GL_LINES); // draw grid
gl.glVertex3i(i, 0, -5);
gl.glVertex3i(i, 0,5);
gl.glEnd();
gl.glBegin(GL2.GL_LINES); // draw grid
gl.glVertex3i(-5, 0, i);
gl.glVertex3i(5, 0,i);
gl.glEnd();
}
gl.glColor3d(1, 0, 0);
gl.glBegin(GL2.GL_LINES); // draw x, y and z axis
gl.glVertex3i(0, 0, 0);
gl.glVertex3i(1, 0, 0);
gl.glColor3d(1, 1, 0);
gl.glVertex3i(0, 0, 0);
gl.glVertex3i(0, 1, 0);
gl.glColor3d(0, 1, 0);
gl.glVertex3i(0, 0, 0);
gl.glVertex3i(0, 0, 1);
gl.glEnd();
gl.glBegin(GL2.GL_LINE_LOOP); // begin: draw house
gl.glVertex3i(2, 0, -2);
gl.glVertex3i(4, 0, -2);
gl.glVertex3i(4, 2, -2);
gl.glVertex3i(2, 2, -2);
gl.glEnd();
gl.glBegin(GL2.GL_LINE_LOOP);
gl.glVertex3i(2, 0, -5);
gl.glVertex3i(4, 0, -5);
gl.glVertex3i(4, 2, -5);
gl.glVertex3i(2, 2, -5);
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex3i(2, 0, -2);
gl.glVertex3i(2, 0, -5);
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex3i(4, 0, -2);
gl.glVertex3i(4, 0, -5);
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex3i(4, 2, -2);
gl.glVertex3i(4, 2, -5);
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex3i(2, 2, -2);
gl.glVertex3i(2, 2, -5);
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex3i(2, 2, -2);
gl.glVertex3i(3, 3, -2);
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex3i(3, 3, -2);
gl.glVertex3i(4, 2, -2);
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex3i(2, 2, -5);
gl.glVertex3i(3, 3, -5);
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex3i(3, 3, -5);
gl.glVertex3i(4, 2, -5);
gl.glEnd();
gl.glBegin(GL2.GL_LINES);
gl.glVertex3i(3, 3, -2);
gl.glVertex3i(3, 3, -5);
gl.glEnd(); // end: draw house
}
public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
GL2 gl = drawable.getGL().getGL2();
gl.glViewport(Math.max(0,(w-h)/2), Math.max(0,(h-w)/2), Math.min(w,h), Math.min(w,h)); //reset the current viewport
}
public void dispose(GLAutoDrawable drawable) {
}
private void setCamera(int x, int y, int z){
eyeX = x;
eyeY = y;
eyeZ = z;
}
private void setCenter(int x, int y, int z){
centerX = x;
centerY = y;
centerZ = z;
}
private void setUpVector(int x, int y, int z){
upX = x;
upY = y;
upZ = z;
}
private void moveCamera(int x, int y, int z){
eyeX += x;
eyeY += y;
eyeZ += z;
}
public void frontView(){
setCamera(0,0,0);
setCenter(0,0,-1);
setUpVector(0,1,0);
}
public void sideView(){
setCamera(10,0,0);
setCenter(-10,0,0);
setUpVector(0,1,0);
}
public void topView(){
setCamera(0,10,0);
setCenter(0,0,0);
setUpVector(0,0,-1);
}
public void customView(){
setCamera(10,10,10);
setCenter(0,0,0);
setUpVector(0,1,0);
}
}
@Override
public void keyPressed(KeyEvent evt) {
switch(evt.getKeyCode()){
case KeyEvent.VK_X:
xPressed = true;
yPressed = false;
zPressed = false;
break;
case KeyEvent.VK_Y:
yPressed = true;
xPressed = false;
zPressed = false;
break;
case KeyEvent.VK_Z:
zPressed = true;
xPressed = false;
yPressed = false;
break;
case KeyEvent.VK_NUMPAD1:
sv.frontView();
canvas.repaint();
break;
case KeyEvent.VK_NUMPAD2:
sv.sideView();
canvas.repaint();
break;
case KeyEvent.VK_NUMPAD3:
sv.topView();
canvas.repaint();
break;
case KeyEvent.VK_NUMPAD4:
sv.customView();
canvas.repaint();
break;
case KeyEvent.VK_UP:
if(xPressed){
sv.moveCamera(1, 0, 0);
canvas.repaint();
}
if(yPressed){
sv.moveCamera(0, 1, 0);
canvas.repaint();
}
if(zPressed){
sv.moveCamera(0, 0, 1);
canvas.repaint();
}
break;
case KeyEvent.VK_DOWN:
if(xPressed){
sv.moveCamera(-1, 0, 0);
canvas.repaint();
}
if(yPressed){
sv.moveCamera(0, -1, 0);
canvas.repaint();
}
if(zPressed){
sv.moveCamera(0, 0, -1);
canvas.repaint();
}
break;
}
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public static void main(String args[]) {
new HelloJOGL2();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment