Last active
March 25, 2017 13:18
-
-
Save ronnyworm/38c6d707c6f4b371dc57376c405e464e to your computer and use it in GitHub Desktop.
Simple JOGL Test (not my code!)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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