2D engine
This commit is contained in:
parent
32303c22ba
commit
84db074e0b
@ -1,17 +1,37 @@
|
|||||||
package lsystem;
|
package lsystem;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import lsystem.screen.gl2d.SwingGLCanvas2D;
|
import lsystem.screen.gl2d.SwingGLCanvas2D;
|
||||||
import lsystem.screen.main.MainFrame;
|
import lsystem.screen.main.MainFrame;
|
||||||
|
import lsystem.utils.Pair;
|
||||||
|
|
||||||
public class Main2D {
|
public class Main2D {
|
||||||
|
|
||||||
|
/*public static MainFrame mainFrame;
|
||||||
|
public static SwingGLCanvas2D joglFrame;
|
||||||
|
public static void main(String[] args) {
|
||||||
|
new Thread(() -> {
|
||||||
|
mainFrame = new MainFrame();
|
||||||
|
mainFrame.setVisible(true);
|
||||||
|
}).start();
|
||||||
|
new Thread(() -> joglFrame = new SwingGLCanvas2D()).start();
|
||||||
|
} */
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
MainFrame frame = new MainFrame();
|
MainFrame frame = new MainFrame();
|
||||||
frame.setVisible(true);
|
frame.setVisible(true);
|
||||||
SwingGLCanvas2D canvas = new SwingGLCanvas2D();
|
SwingGLCanvas2D canvas = new SwingGLCanvas2D();
|
||||||
canvas.setVisible(true);
|
canvas.setVisible(true);
|
||||||
|
new Thread(() ->{
|
||||||
|
SwingGLCanvas2D joglFrame = new SwingGLCanvas2D();
|
||||||
|
String axiom="X";
|
||||||
|
ArrayList<Pair<String, String>> rules = new ArrayList<>();
|
||||||
|
rules.add(new Pair<>("X=Y+[[X]-X]-Y[-YX]+X", "Y=YY"));
|
||||||
|
joglFrame.setLSystem(axiom,rules,5);
|
||||||
|
joglFrame.setVisible(true);
|
||||||
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,4 +19,8 @@ public class Element {
|
|||||||
this.rotation = rotation;
|
this.rotation = rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getRotation2D () {
|
||||||
|
return (int) rotation[0];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,21 @@
|
|||||||
package lsystem.screen.gl2d;
|
package lsystem.screen.gl2d;
|
||||||
|
|
||||||
|
import java.awt.Point;
|
||||||
|
import java.awt.geom.Point2D;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import com.jogamp.opengl.GL2;
|
import com.jogamp.opengl.GL2;
|
||||||
import com.jogamp.opengl.GLAutoDrawable;
|
import com.jogamp.opengl.GLAutoDrawable;
|
||||||
import com.jogamp.opengl.GLEventListener;
|
import com.jogamp.opengl.GLEventListener;
|
||||||
import com.jogamp.opengl.glu.GLU;
|
import com.jogamp.opengl.glu.GLU;
|
||||||
import com.jogamp.opengl.util.gl2.GLUT;
|
import com.jogamp.opengl.util.gl2.GLUT;
|
||||||
|
|
||||||
|
import javafx.scene.control.Tab;
|
||||||
|
import lsystem.engine.Element;
|
||||||
|
import lsystem.engine.ElementProperties;
|
||||||
import lsystem.screen.gl3d.DrawHelper;
|
import lsystem.screen.gl3d.DrawHelper;
|
||||||
|
import lsystem.screen.gl3d.GLCanvas;
|
||||||
|
import lsystem.utils.Pair;
|
||||||
|
|
||||||
public class JoglEventListener2D implements GLEventListener {
|
public class JoglEventListener2D implements GLEventListener {
|
||||||
|
|
||||||
@ -44,14 +54,36 @@ public class JoglEventListener2D implements GLEventListener {
|
|||||||
public void dispose(GLAutoDrawable glAutoDrawable) {
|
public void dispose(GLAutoDrawable glAutoDrawable) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void drawAll (GL2 gl, Element actual, lsystem.screen.gl2d.Point origin) {
|
||||||
|
if (actual.property == ElementProperties.DRAW) {
|
||||||
|
System.out.println("DESSIN");
|
||||||
|
lsystem.screen.gl2d.Point newOrigin = new lsystem.screen.gl2d.Point (origin, actual.getRotation2D());
|
||||||
|
DrawHelper.drawStick(gl, origin, newOrigin);
|
||||||
|
}
|
||||||
|
System.out.println(actual.children.isEmpty());
|
||||||
|
for (Element children : actual.children) {
|
||||||
|
System.out.println("CHILD");
|
||||||
|
drawAll(gl, children, new lsystem.screen.gl2d.Point (origin, actual.getRotation2D()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void display (GLAutoDrawable glAutoDrawable) {
|
public void display (GLAutoDrawable glAutoDrawable) {
|
||||||
|
/* Element str = new Element(ElementProperties.DRAW, null, new int[]{0, 0, 0});
|
||||||
|
|
||||||
|
Element child1 = new Element(ElementProperties.DRAW, str, new int[]{0, 0, 0});
|
||||||
|
Element child2 = new Element(ElementProperties.DRAW, str, new int[]{45, 0, 0});
|
||||||
|
str.children.add(child1);
|
||||||
|
str.children.add(child2);
|
||||||
|
Element child11 = new Element(ElementProperties.DRAW, child1, new int[]{225, 0, 0});
|
||||||
|
Element child12 = new Element(ElementProperties.DRAW, child1, new int[]{270, 0, 0});
|
||||||
|
child1.children.add(child11);
|
||||||
|
child1.children.add(child12);*/
|
||||||
|
|
||||||
GL2 gl = glAutoDrawable.getGL().getGL2();
|
GL2 gl = glAutoDrawable.getGL().getGL2();
|
||||||
|
|
||||||
float xDefault = -1.0f, yDefault = -1.0f;
|
drawAll (gl, canvas.getLSystem(), new lsystem.screen.gl2d.Point(-1.0f, -1.0f));
|
||||||
|
|
||||||
DrawHelper.drawStick(gl, 0.1f, xDefault, yDefault, 0);
|
|
||||||
DrawHelper.drawStick(gl, 0.2f, 1.1f, 1.1f, 90);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
114
src/lsystem/screen/gl2d/Point.java
Normal file
114
src/lsystem/screen/gl2d/Point.java
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
package lsystem.screen.gl2d;
|
||||||
|
|
||||||
|
public class Point {
|
||||||
|
private float x;
|
||||||
|
private float y;
|
||||||
|
|
||||||
|
public Point () {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Point (float x, float y) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Point (Point old, int angle) {
|
||||||
|
angle = compactAngle(angle);
|
||||||
|
//Point a = new Point();
|
||||||
|
//x = getNewOrigin(old, angle, 0.1f);
|
||||||
|
getNewOrigin(old, angle, 0.1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getX() {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setX(float x) {
|
||||||
|
this.x = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getY() {
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setY(float y) {
|
||||||
|
this.y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getNewOrigin (Point old, int angle, float echelle) {
|
||||||
|
|
||||||
|
int newX=0, newY=0;
|
||||||
|
switch (angle) {
|
||||||
|
case 0:
|
||||||
|
newX = 1;
|
||||||
|
newY = 1;
|
||||||
|
break;
|
||||||
|
case 45:
|
||||||
|
newX = 1;
|
||||||
|
newY = 0;
|
||||||
|
break;
|
||||||
|
case 90:
|
||||||
|
newX = 1;
|
||||||
|
newY = -1;
|
||||||
|
break;
|
||||||
|
case 135:
|
||||||
|
newX = 0;
|
||||||
|
newY = -1;
|
||||||
|
break;
|
||||||
|
case 180:
|
||||||
|
newX = -1;
|
||||||
|
newY = -1;
|
||||||
|
break;
|
||||||
|
case 225:
|
||||||
|
newX = -1;
|
||||||
|
newY = 0;
|
||||||
|
break;
|
||||||
|
case 270:
|
||||||
|
newX = -1;
|
||||||
|
newY = 1;
|
||||||
|
break;
|
||||||
|
case 315:
|
||||||
|
newX = 0;
|
||||||
|
newY = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.x = old.getX() + echelle * newX;
|
||||||
|
this.y+= old.getY() + echelle * newY;
|
||||||
|
//return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString () {
|
||||||
|
return "("+this.x+";"+this.y+")";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int compactAngle (int angle) {
|
||||||
|
angle = angle - ((angle / 360) * 360);
|
||||||
|
switch (angle) {
|
||||||
|
case -315:
|
||||||
|
angle = 45;
|
||||||
|
break;
|
||||||
|
case -270:
|
||||||
|
angle = 90;
|
||||||
|
break;
|
||||||
|
case -225:
|
||||||
|
angle = 135;
|
||||||
|
break;
|
||||||
|
case -180:
|
||||||
|
angle = 180;
|
||||||
|
break;
|
||||||
|
case -135:
|
||||||
|
angle = 225;
|
||||||
|
break;
|
||||||
|
case -90:
|
||||||
|
angle = 270;
|
||||||
|
break;
|
||||||
|
case -45:
|
||||||
|
angle = 315;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -2,6 +2,8 @@ package lsystem.screen.gl3d;
|
|||||||
|
|
||||||
import com.jogamp.opengl.GL2;
|
import com.jogamp.opengl.GL2;
|
||||||
import com.jogamp.opengl.util.gl2.GLUT;
|
import com.jogamp.opengl.util.gl2.GLUT;
|
||||||
|
|
||||||
|
import lsystem.screen.gl2d.Point;
|
||||||
import lsystem.screen.gl2d.SwingGLCanvas2D;
|
import lsystem.screen.gl2d.SwingGLCanvas2D;
|
||||||
|
|
||||||
public class DrawHelper {
|
public class DrawHelper {
|
||||||
@ -101,72 +103,14 @@ public class DrawHelper {
|
|||||||
+ canvas.camera[3] + " pitch = " + canvas.camera[4] + " roll = " + canvas.camera[5]);
|
+ canvas.camera[3] + " pitch = " + canvas.camera[4] + " roll = " + canvas.camera[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void drawStick(GL2 gl, float echelle, float x, float y, int angle) {
|
public static void drawStick(GL2 gl, Point origin, Point newOrigin) {
|
||||||
angle = angle - ((angle / 360) * 360);
|
|
||||||
switch (angle) {
|
|
||||||
case -315:
|
|
||||||
angle = 45;
|
|
||||||
;
|
|
||||||
case -270:
|
|
||||||
angle = 90;
|
|
||||||
;
|
|
||||||
case -225:
|
|
||||||
angle = 135;
|
|
||||||
;
|
|
||||||
case -180:
|
|
||||||
angle = 180;
|
|
||||||
;
|
|
||||||
case -135:
|
|
||||||
angle = 225;
|
|
||||||
;
|
|
||||||
case -90:
|
|
||||||
angle = 270;
|
|
||||||
;
|
|
||||||
case -45:
|
|
||||||
angle = 315;
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Direction
|
|
||||||
int newX=0, newY=0;
|
|
||||||
switch (angle) {
|
|
||||||
case 0:
|
|
||||||
newX = 1;
|
|
||||||
newY = 1;
|
|
||||||
break;
|
|
||||||
case 45:
|
|
||||||
newX = 1;
|
|
||||||
newY = 0;
|
|
||||||
break;
|
|
||||||
case 90:
|
|
||||||
newX = 1;
|
|
||||||
newY = -1;
|
|
||||||
break;
|
|
||||||
case 135:
|
|
||||||
newX = 0;
|
|
||||||
newY = -1;
|
|
||||||
break;
|
|
||||||
case 180:
|
|
||||||
newX = -1;
|
|
||||||
newY = -1;
|
|
||||||
break;
|
|
||||||
case 225:
|
|
||||||
newX = -1;
|
|
||||||
newY = 0;
|
|
||||||
break;
|
|
||||||
case 270:
|
|
||||||
newX = -1;
|
|
||||||
newY = 1;
|
|
||||||
break;
|
|
||||||
case 315:
|
|
||||||
newX = 0;
|
|
||||||
newY = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
gl.glBegin(GL2.GL_LINES);
|
gl.glBegin(GL2.GL_LINES);
|
||||||
gl.glVertex2f(x, y);
|
gl.glVertex2f(origin.getX(), origin.getY());
|
||||||
gl.glVertex2f(x + (echelle * newX), y + (echelle * newY));
|
gl.glVertex2f(newOrigin.getX(), newOrigin.getY());
|
||||||
gl.glEnd();
|
gl.glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user