diff --git a/app/PdeBase.java b/app/PdeBase.java index 82a3621d4..c5ab768f9 100644 --- a/app/PdeBase.java +++ b/app/PdeBase.java @@ -425,34 +425,6 @@ public class PdeBase { } - /* - static public File getProcessingHome() { - File home = new File(System.getProperty("user.home")); - - File phome = null; - - // NOTE if this location changes, be sure to note the change - // in the default preferences.txt because it mentions this path - if (PdeBase.platform == PdeBase.MACOSX) { - // on macosx put the sketchbook in the "Documents" folder - //phome = new File(home, "Documents" + File.separator + "Processing"); - - } else if (PdeBase.platform == PdeBase.WINDOWS) { - // on windows put the sketchbook in the "My Documents" folder - phome = new File(home, "My Documents" + File.separator + "Processing"); - - } else { - // for linux et al, make a dot folder - // if people don't like things being buried, they can move the sketches - // but the prefs will stay hidden in the dot folder - phome = new File(home, ".processing"); - } - if (!phome.exists()) phome.mkdirs(); - return phome; - } - */ - - // ................................................................. @@ -527,12 +499,8 @@ public class PdeBase { url = sb.toString(); } } - //System.out.println("trying to open " + url); com.apple.mrj.MRJFileUtils.openURL(url); - //} else if (platform == MACOS9) { - //com.apple.mrj.MRJFileUtils.openURL(url); - } else if (PdeBase.isLinux()) { // how's mozilla sound to ya, laddie? //Runtime.getRuntime().exec(new String[] { "mozilla", url }); @@ -546,8 +514,6 @@ public class PdeBase { } catch (IOException e) { PdeBase.showWarning("Could not open URL", "An error occurred while trying to open\n" + url, e); - - //e.printStackTrace(); } } diff --git a/build/linux/make.sh b/build/linux/make.sh index 154d2595c..8dcffeb64 100755 --- a/build/linux/make.sh +++ b/build/linux/make.sh @@ -191,14 +191,14 @@ LIBRARIES=../../build/$PLATFORM/work/libraries # PARTICLES LIBRARY -echo Build particles library... -cd ../lib/particles -$JIKES -target 1.1 +D -d . *.java -rm -f library/particles.jar -zip -r0q library/particles.jar simong -rm -rf simong -mkdir -p $LIBRARIES/particles/library/ -cp library/particles.jar $LIBRARIES/particles/library/ +#echo Build particles library... +#cd ../lib/particles +#$JIKES -target 1.1 +D -d . *.java +#rm -f library/particles.jar +#zip -r0q library/particles.jar simong +#rm -rf simong +#mkdir -p $LIBRARIES/particles/library/ +#cp library/particles.jar $LIBRARIES/particles/library/ pwd diff --git a/build/macosx/make.sh b/build/macosx/make.sh index 04a6cec26..b551e6801 100755 --- a/build/macosx/make.sh +++ b/build/macosx/make.sh @@ -200,14 +200,14 @@ LIBRARIES=../../build/$PLATFORM/work/libraries # PARTICLES LIBRARY -echo Build particles library... -cd ../lib/particles -$JIKES -target 1.1 +D -d . *.java -rm -f library/particles.jar -zip -r0q library/particles.jar simong -rm -rf simong -mkdir -p $LIBRARIES/particles/library/ -cp library/particles.jar $LIBRARIES/particles/library/ +#echo Build particles library... +#cd ../lib/particles +#$JIKES -target 1.1 +D -d . *.java +#rm -f library/particles.jar +#zip -r0q library/particles.jar simong +#rm -rf simong +#mkdir -p $LIBRARIES/particles/library/ +#cp library/particles.jar $LIBRARIES/particles/library/ echo echo Done. \ No newline at end of file diff --git a/build/shared/revisions.txt b/build/shared/revisions.txt index a2da0c72f..5be759bcd 100644 --- a/build/shared/revisions.txt +++ b/build/shared/revisions.txt @@ -40,6 +40,13 @@ ABOUT REV 0083 - + shininess(float shiney) takes a float from 0..1 to specify the level of shininess for the current material +- link() now works when running as an application. also added + open(String filename) which will attempt to launch an application + using the shell, or open(String args[]) which will do the same + with several command line args. + +- + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . diff --git a/build/windows/make.sh b/build/windows/make.sh index 6d197d373..2e24f3791 100755 --- a/build/windows/make.sh +++ b/build/windows/make.sh @@ -223,14 +223,14 @@ LIBRARIES=..\\..\\build\\$PLATFORM\\work\\libraries # PARTICLES LIBRARY -echo Build particles library... -cd ../lib/particles -$JIKES -target 1.1 +D -d . *.java -rm -f library/particles.jar -zip -r0q library/particles.jar simong -rm -rf simong -mkdir -p $LIBRARIES/particles/library/ -cp library/particles.jar $LIBRARIES/particles/library/ +#echo Build particles library... +#cd ../lib/particles +#$JIKES -target 1.1 +D -d . *.java +#rm -f library/particles.jar +#zip -r0q library/particles.jar simong +#rm -rf simong +#mkdir -p $LIBRARIES/particles/library/ +#cp library/particles.jar $LIBRARIES/particles/library/ echo echo Done. diff --git a/core/PApplet.java b/core/PApplet.java index a49800752..338a9b646 100644 --- a/core/PApplet.java +++ b/core/PApplet.java @@ -61,7 +61,6 @@ public class PApplet extends Applet public static final float javaVersion = new Float(javaVersionName).floatValue(); - /** * Current platform in use, one of the * PConstants WINDOWS, MACOSX, MACOS9, LINUX or OTHER. @@ -210,6 +209,15 @@ public class PApplet extends Applet */ public boolean firstMouse; + /** + * Last mouse button pressed, one of LEFT, CENTER, or RIGHT. + *
+ * If running on Mac OS, a ctrl-click will be interpreted as + * the righthand mouse button (unlike Java, which reports it as + * the left mouse). + */ + public int mouseButton; + public boolean mousePressed; public MouseEvent mouseEvent; @@ -655,8 +663,8 @@ public class PApplet extends Applet return; } catch (ClassNotFoundException e) { } + size(iwidth, iheight, P2D); // fall-through case } - size(iwidth, iheight, P2D); // fall-through case } } @@ -812,8 +820,21 @@ public class PApplet extends Applet paint(screen); } - //synchronized public void paint(Graphics screen) { public void paint(Graphics screen) { + if (javaVersion < 1.3f) { + screen.setColor(new Color(64, 64, 64)); + Dimension size = getSize(); + screen.fillRect(0, 0, size.width, size.height); + screen.setColor(Color.white); + screen.setFont(new Font("Dialog", Font.PLAIN, 9)); + screen.drawString("You need to install", 5, 15); + screen.drawString("Java 1.3 or later", 5, 25); + screen.drawString("to view this content.", 5, 35); + screen.drawString("Click here to visit", 5, 50); + screen.drawString("java.com and install.", 5, 60); + return; + } + //System.out.println("PApplet.paint()"); if (THREAD_DEBUG) println(Thread.currentThread().getName() + " 5a enter paint"); @@ -1163,6 +1184,21 @@ public class PApplet extends Applet mouseY = event.getY(); mouseEvent = event; + int button = event.getButton(); + if (button == 1) { + mouseButton = LEFT; + } else if (button == 2) { + mouseButton = CENTER; + } else if (button == 3) { + mouseButton = RIGHT; + } + // if running on macos, allow ctrl-click as right mouse + if ((platform == MACOSX) || (platform == MACOS9)) { + if (mouseEvent.isPopupTrigger()) { + mouseButton = RIGHT; + } + } + mouseEventMethods.handle(new Object[] { event }); /* for (int i = 0; i < libraryCount; i++) { @@ -1226,6 +1262,9 @@ public class PApplet extends Applet * mousePressed, and mouseEvent will no longer be set. */ public void mousePressed(MouseEvent e) { + if (javaVersion < 1.3f) { + link("http://java.com/"); + } checkMouseEvent(e); } @@ -1572,44 +1611,132 @@ public class PApplet extends Applet } - /** - * Link to an external page without all the muss. Currently - * only works for applets, but eventually should be implemented - * for applications as well, using code from PdeBase. - */ public void link(String here) { - if (!online) { - System.err.println("Can't open " + here); - System.err.println("link() only works inside a web browser"); - return; - } + link(here, null); + } - try { - getAppletContext().showDocument(new URL(here)); - } catch (Exception e) { - System.err.println("Could not open " + here); - e.printStackTrace(); + /** + * Link to an external page without all the muss. + *
+ * When run with an applet, uses the browser to open the url, + * for applications, attempts to launch a browser with the url. + *
+ * Works on Mac OS X and Windows. For Linux, use: + *
open(new String[] { "firefox", url });
+ * or whatever you want as your browser, since Linux doesn't
+ * yet have a standard method for launching URLs.
+ */
+ public void link(String url, String frame) {
+ if (online) {
+ try {
+ if (frame == null) {
+ getAppletContext().showDocument(new URL(url));
+ } else {
+ getAppletContext().showDocument(new URL(url), frame);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("Could not open " + url);
+ }
+ } else {
+ try {
+ if (platform == WINDOWS) {
+ // the following uses a shell execute to launch the .html file
+ // note that under cygwin, the .html files have to be chmodded +x
+ // after they're unpacked from the zip file. i don't know why,
+ // and don't understand what this does in terms of windows
+ // permissions. without the chmod, the command prompt says
+ // "Access is denied" in both cygwin and the "dos" prompt.
+ //Runtime.getRuntime().exec("cmd /c " + currentDir + "\\reference\\" +
+ // referenceFile + ".html");
+
+ // open dos prompt, give it 'start' command, which will
+ // open the url properly. start by itself won't work since
+ // it appears to need cmd
+ Runtime.getRuntime().exec("cmd /c start " + url);
+
+ } else if ((platform == MACOSX) || (platform == MACOS9)) {
+ //com.apple.mrj.MRJFileUtils.openURL(url);
+ try {
+ Class mrjFileUtils = Class.forName("com.apple.mrj.MRJFileUtils");
+ Method openMethod =
+ mrjFileUtils.getMethod("openURL", new Class[] { String.class });
+ openMethod.invoke(null, new Object[] { url });
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ throw new RuntimeException("Can't open URLs for this platform");
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException("Could not open " + url);
+ }
}
}
- public void link(String here, String there) {
- if (!online) {
- System.err.println("Can't open " + here);
- System.err.println("link() only works inside a web browser");
- return;
- }
- try {
- getAppletContext().showDocument(new URL(here), there);
+ /**
+ * Attempt to open a file using the platform's shell.
+ */
+ public void open(String filename) {
+ if (platform == WINDOWS) {
+ // just launching the .html file via the shell works
+ // but make sure to chmod +x the .html files first
+ // also place quotes around it in case there's a space
+ // in the user.dir part of the url
+ try {
+ Runtime.getRuntime().exec("cmd /c \"" + filename + "\"");
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw new RuntimeException("Could not open " + filename);
+ }
- } catch (Exception e) {
- System.err.println("Could not open " + here);
- e.printStackTrace();
+ } else if ((platform == MACOSX) || (platform == MACOS9)) {
+ // prepend file:// on this guy since it's a file
+ String url = "file://" + filename;
+
+ // replace spaces with %20 for the file url
+ // otherwise the mac doesn't like to open it
+ // can't just use URLEncoder, since that makes slashes into
+ // %2F characters, which is no good. some might say "useless"
+ if (url.indexOf(' ') != -1) {
+ StringBuffer sb = new StringBuffer();
+ char c[] = url.toCharArray();
+ for (int i = 0; i < c.length; i++) {
+ if (c[i] == ' ') {
+ sb.append("%20");
+ } else {
+ sb.append(c[i]);
+ }
+ }
+ url = sb.toString();
+ }
+ link(url);
+
+ } else {
+ open(new String[] { filename });
}
}
+ /**
+ * Launch a process using a platforms shell, and an array of
+ * args passed on the command line.
+ */
+ public Process open(String args[]) {
+ try {
+ return Runtime.getRuntime().exec(args);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("Could not open " + join(args, ' '));
+ }
+ }
+
+
+
+
//////////////////////////////////////////////////////////////
diff --git a/core/PGraphics.java b/core/PGraphics.java
index a3e9d90d4..e726d9c9f 100644
--- a/core/PGraphics.java
+++ b/core/PGraphics.java
@@ -1789,7 +1789,7 @@ public class PGraphics extends PImage implements PConstants {
public void rotate(float angle, float vx, float vy, float vz) {
throw new RuntimeException("rotate(angle, x, y, z) " +
- "can only be used with depth()");
+ "can only be used with P3D or OPENGL");
}
@@ -1877,7 +1877,7 @@ public class PGraphics extends PImage implements PConstants {
float n20, float n21, float n22, float n23,
float n30, float n31, float n32, float n33) {
throw new RuntimeException("applyMatrix() with a 4x4 matrix " +
- "can only be used with depth()");
+ "can only be used with OPENGL or P3D");
}
diff --git a/core/PGraphics2.java b/core/PGraphics2.java
index a9145c746..2f3cb9030 100644
--- a/core/PGraphics2.java
+++ b/core/PGraphics2.java
@@ -809,13 +809,6 @@ public class PGraphics2 extends PGraphics {
}
- /**
- * Clears pixel buffer. Also clears the stencil and zbuffer
- * if they exist. Their existence is more accurate than using 'depth'
- * to test whether to clear them, because if they're non-null,
- * it means that depth() has been called somewhere in the program,
- * even if noDepth() was called before draw() exited.
- */
public void clear() {
g2.setColor(new Color(backgroundColor));
g2.fillRect(0, 0, width, height);
diff --git a/core/PGraphics3.java b/core/PGraphics3.java
index a423da1d7..f89599814 100644
--- a/core/PGraphics3.java
+++ b/core/PGraphics3.java
@@ -35,13 +35,13 @@ public class PGraphics3 extends PGraphics {
public PMatrix modelview; // = new PMatrix(MATRIX_STACK_DEPTH);
public PMatrix camera; // = new PMatrix();
- public PMatrix inverseCamera; // = new PMatrix();
+ public PMatrix cameraInv; // = new PMatrix();
// ........................................................
// Lighting-related variables
// inverse model matrix
- public PMatrix inverseModelview; // = new PMatrix(MATRIX_STACK_DEPTH);
+ public PMatrix modelviewInv; // = new PMatrix(MATRIX_STACK_DEPTH);
// store the facing direction to speed rendering
boolean useBackfaceCulling = false;
@@ -78,7 +78,7 @@ public class PGraphics3 extends PGraphics {
public PMatrix projection = new PMatrix();
// These two matrices always point to either the modelview
- // or the inverseModelview, but they are swapped during
+ // or the modelviewInv, but they are swapped during
// when in camera maniuplation mode. That way camera transforms
// are automatically accumulated in inverse on the modelview matrix.
public PMatrix forwardTransform;
@@ -227,7 +227,7 @@ public class PGraphics3 extends PGraphics {
*/
public PGraphics3() {
forwardTransform = modelview;
- reverseTransform = inverseModelview;
+ reverseTransform = modelviewInv;
}
@@ -244,7 +244,7 @@ public class PGraphics3 extends PGraphics {
// super will add the listeners to the applet, and call resize()
super(iwidth, iheight, parent);
forwardTransform = modelview;
- reverseTransform = inverseModelview;
+ reverseTransform = modelviewInv;
//resize(iwidth, iheight);
//projection = new PMatrix();
}
@@ -310,10 +310,10 @@ public class PGraphics3 extends PGraphics {
// making this again here because things are weird
projection = new PMatrix();
modelview = new PMatrix(MATRIX_STACK_DEPTH);
- inverseModelview = new PMatrix(MATRIX_STACK_DEPTH);
+ modelviewInv = new PMatrix(MATRIX_STACK_DEPTH);
camera = new PMatrix();
- inverseCamera = new PMatrix();
+ cameraInv = new PMatrix();
// set up the default camera
camera();
@@ -365,7 +365,7 @@ public class PGraphics3 extends PGraphics {
super.beginFrame();
modelview.set(camera);
- inverseModelview.set(inverseCamera);
+ modelviewInv.set(cameraInv);
// clear out the lights, they'll have to be turned on again
lightCount = 0;
@@ -415,7 +415,7 @@ public class PGraphics3 extends PGraphics {
public void angleMode(int mode) {
super.angleMode(mode);
modelview.angleMode(mode);
- inverseModelview.angleMode(mode);
+ modelviewInv.angleMode(mode);
projection.angleMode(mode);
}
*/
@@ -425,7 +425,7 @@ public class PGraphics3 extends PGraphics {
manipulatingCamera = false;
forwardTransform = modelview;
- reverseTransform = inverseModelview;
+ reverseTransform = modelviewInv;
//cameraMode(PERSPECTIVE);
perspective();
@@ -454,7 +454,7 @@ public class PGraphics3 extends PGraphics {
*/
//public void postSetup() {
//modelview.storeResetValue();
- //inverseModelview.storeResetValue();
+ //modelviewInv.storeResetValue();
//}
@@ -694,13 +694,6 @@ public class PGraphics3 extends PGraphics {
splineVertexCount = 3;
}
- // 'flat' may be a misnomer here because it's actually just
- // calculating whether z is zero for all the spline points,
- // so that it knows whether to calculate all three params,
- // or just two for x and y.
- //if (spline_vertices_flat) {
- //if (z != 0) spline_vertices_flat = false;
- //}
float vertex[] = splineVertices[splineVertexCount];
vertex[MX] = x;
@@ -722,17 +715,14 @@ public class PGraphics3 extends PGraphics {
vertex[SW] = strokeWeight;
}
- // this complicated "if" construct may defeat the purpose
if (textureImage != null) {
vertex[U] = textureU;
vertex[V] = textureV;
}
- //if (normalChanged) {
vertex[NX] = normalX;
vertex[NY] = normalY;
vertex[NZ] = normalZ;
- //}
splineVertexCount++;
@@ -760,17 +750,38 @@ public class PGraphics3 extends PGraphics {
/**
* See notes with the bezier() function.
*/
- public void bezierVertex(float x, float y) {
- spline_vertex(x, y, 0, true);
+ public void bezierVertex(float x2, float y2,
+ float x3, float y3,
+ float x4, float y4) {
+ bezierVertex(x2, y2, 0, x3, y3, 0, x4, y4, 0);
}
+
/**
* See notes with the bezier() function.
*/
- public void bezierVertex(float x, float y, float z) {
- spline_vertex(x, y, z, true);
+ public void bezierVertex(float x2, float y2, float z2,
+ float x3, float y3, float z3,
+ float x4, float y4, float z4) {
+ if (splineVertexCount > 0) {
+ float vertex[] = splineVertices[splineVertexCount-1];
+ spline_vertex(vertex[MX], vertex[MY], vertex[MZ], true);
+
+ } else if (vertexCount > 0) {
+ // make sure there's at least a call to vertex()
+ float vertex[] = vertices[vertexCount-1];
+ spline_vertex(vertex[MX], vertex[MY], vertex[MZ], true);
+
+ } else {
+ throw new RuntimeException("A call to vertex() must be used " +
+ "before bezierVertex()");
+ }
+ spline_vertex(x2, y2, z2, true);
+ spline_vertex(x3, y3, z3, true);
+ spline_vertex(x4, y4, z4, true);
}
+
/**
* See notes with the curve() function.
*/
@@ -1388,10 +1399,10 @@ public class PGraphics3 extends PGraphics {
// Multiply by TRANSPOSE!
// It's just one of those things. Model normals should be multiplied by the
// inverse transpose of the modelview matrix to get world normals.
- float nx = inverseModelview.m00*v[NX] + inverseModelview.m10*v[NY] + inverseModelview.m20*v[NZ] + inverseModelview.m30;
- float ny = inverseModelview.m01*v[NX] + inverseModelview.m11*v[NY] + inverseModelview.m21*v[NZ] + inverseModelview.m31;
- float nz = inverseModelview.m02*v[NX] + inverseModelview.m12*v[NY] + inverseModelview.m22*v[NZ] + inverseModelview.m32;
- float nw = inverseModelview.m03*v[NX] + inverseModelview.m13*v[NY] + inverseModelview.m23*v[NZ] + inverseModelview.m33;
+ float nx = modelviewInv.m00*v[NX] + modelviewInv.m10*v[NY] + modelviewInv.m20*v[NZ] + modelviewInv.m30;
+ float ny = modelviewInv.m01*v[NX] + modelviewInv.m11*v[NY] + modelviewInv.m21*v[NZ] + modelviewInv.m31;
+ float nz = modelviewInv.m02*v[NX] + modelviewInv.m12*v[NY] + modelviewInv.m22*v[NZ] + modelviewInv.m32;
+ float nw = modelviewInv.m03*v[NX] + modelviewInv.m13*v[NY] + modelviewInv.m23*v[NZ] + modelviewInv.m33;
v[NX] = nx;
v[NY] = ny;
@@ -2123,10 +2134,10 @@ public class PGraphics3 extends PGraphics {
float x3, float y3, float z3,
float x4, float y4, float z4) {
beginShape(LINE_STRIP);
- bezierVertex(x1, y1, z1);
- bezierVertex(x2, y2, z2);
- bezierVertex(x3, y3, z3);
- bezierVertex(x4, y4, z4);
+ vertex(x1, y1, z1);
+ bezierVertex(x2, y2, z2,
+ x3, y3, z3,
+ x4, y4, z4);
endShape();
}
@@ -2317,7 +2328,7 @@ public class PGraphics3 extends PGraphics {
}
// Do this to the inverse regardless of the lights
// to keep stack pointers in sync
- inverseModelview.push();
+ modelviewInv.push();
}
@@ -2328,7 +2339,7 @@ public class PGraphics3 extends PGraphics {
}
// Do this to the inverse regardless of the lights
// to keep stack pointers in sync
- inverseModelview.pop();
+ modelviewInv.pop();
}
@@ -2392,7 +2403,7 @@ public class PGraphics3 extends PGraphics {
public void cameraMode(int mode) {
resetProjection();
modelview.identity();
- inverseModelview.identity();
+ modelviewInv.identity();
if (mode == PERSPECTIVE) {
//System.out.println("setting camera to perspective");
@@ -2427,7 +2438,7 @@ public class PGraphics3 extends PGraphics {
} else {
//projection.identity();
manipulatingCamera = true;
- forwardTransform = inverseCamera; //inverseModelview;
+ forwardTransform = cameraInv; //modelviewInv;
reverseTransform = camera; //modelview;
//cameraMode = CUSTOM;
}
@@ -2450,7 +2461,7 @@ public class PGraphics3 extends PGraphics {
else {
manipulatingCamera = false;
forwardTransform = modelview;
- reverseTransform = inverseModelview;
+ reverseTransform = modelviewInv;
}
}
@@ -2617,11 +2628,11 @@ public class PGraphics3 extends PGraphics {
0, 0, 0, 1);
modelview.invTranslate(eyeX, eyeY, eyeZ);
- inverseModelview.applyMatrix(x0, x1, x2, 0,
+ modelviewInv.applyMatrix(x0, x1, x2, 0,
y0, y1, y2, 0,
z0, z1, z2, 0,
0, 0, 0, 1);
- inverseModelview.translate(eyeX, eyeY, eyeZ);
+ modelviewInv.translate(eyeX, eyeY, eyeZ);
*/
}
@@ -2839,9 +2850,9 @@ public class PGraphics3 extends PGraphics {
public void lightDirection(int num, float x, float y, float z) {
// Multiply by inverse transpose.
- lightNX[num] = inverseModelview.m00*x + inverseModelview.m10*y + inverseModelview.m20*z + inverseModelview.m30;
- lightNY[num] = inverseModelview.m01*x + inverseModelview.m11*y + inverseModelview.m21*z + inverseModelview.m31;
- lightNZ[num] = inverseModelview.m02*x + inverseModelview.m12*y + inverseModelview.m22*z + inverseModelview.m32;
+ lightNX[num] = modelviewInv.m00*x + modelviewInv.m10*y + modelviewInv.m20*z + modelviewInv.m30;
+ lightNY[num] = modelviewInv.m01*x + modelviewInv.m11*y + modelviewInv.m21*z + modelviewInv.m31;
+ lightNZ[num] = modelviewInv.m02*x + modelviewInv.m12*y + modelviewInv.m22*z + modelviewInv.m32;
float norm = mag(lightNX[num], lightNY[num], lightNZ[num]);
if (norm == 0 || norm == 1) return;
lightNX[num] /= norm;
@@ -3254,14 +3265,14 @@ public class PGraphics3 extends PGraphics {
protected void lightDirection(int num, float x, float y, float z) {
// Multiply by inverse transpose.
lightNX[num] =
- inverseModelview.m00*x + inverseModelview.m10*y +
- inverseModelview.m20*z + inverseModelview.m30;
+ modelviewInv.m00*x + modelviewInv.m10*y +
+ modelviewInv.m20*z + modelviewInv.m30;
lightNY[num] =
- inverseModelview.m01*x + inverseModelview.m11*y +
- inverseModelview.m21*z + inverseModelview.m31;
+ modelviewInv.m01*x + modelviewInv.m11*y +
+ modelviewInv.m21*z + modelviewInv.m31;
lightNZ[num] =
- inverseModelview.m02*x + inverseModelview.m12*y +
- inverseModelview.m22*z + inverseModelview.m32;
+ modelviewInv.m02*x + modelviewInv.m12*y +
+ modelviewInv.m22*z + modelviewInv.m32;
float norm = mag(lightNX[num], lightNY[num], lightNZ[num]);
if (norm == 0 || norm == 1) return;
diff --git a/core/todo.txt b/core/todo.txt
index 6dde51cf1..48b99a03c 100644
--- a/core/todo.txt
+++ b/core/todo.txt
@@ -27,34 +27,10 @@ o image(String name) and textFont(String name)
o do we change to font(arial, 12) ?
X remove angleMode() ?
X be consistent about getXxx() methods
-_ just use the variable names.. don't do overkill on fillR et al
-_ or just what functions are actually made public
-_ is fillRi needed? it's pretty goofy..
+X just use the variable names.. don't do overkill on fillR et al
+X or just what functions are actually made public
+X is fillRi needed? it's pretty goofy..
X how to handle full screen (opengl especially) or no screen (for scripts)
-_ expose api to launch files, folders, URLs
-X use with/in place of link()
-_ call it open()
-X what to call firstMouse
-_ implement rightMouse?
-_ yes, mouseButton = LEFT, CENTER, or RIGHT
-
-_ should we include a from and to for the directional light?
-
-_ rename video.Camera to video.Video ?
-_ VideoInput VideoOutput, SoundInput, SoundOutput or AudioInput/AudioOutput
-_ should nf() handle commas as well?
-_ yes, and add nf(int what) so that non-padded version works
-_ but don't put commas into the zero-padded version
-_ make nf/nfs/nfp not so weird
-_ nf(PLUS, ...) nf(PAD, ...) nfc(PLUS, ...)
-
-_ make the 1.4 code in PApplet load via reflection
-_ noCursor seems to be broken on the mac?
-
-_ don't let users on < 1.3 load JAVA2D, or < 1.4 load OPENGL
-_ error when running on 1.1...
-_ You need to install Java 1.3 or later to view this content.
-_ Click here to visit java.com and install.
tweaking up simong light code
o what's up with resetLights?
@@ -63,13 +39,32 @@ o preApplyMatrix, invApplyMatrix?
o applyMatrixPre and applyMatrixIn
o rotateXInv is ugly..
o irotateX?, papplyMatrix?
-_ make inverseCamera into cameraInv
+
+wednesday evening
+X expose api to launch files, folders, URLs
+X use with/in place of link()
+X call it open()
+X what to call firstMouse
+X implement rightMouse?
+X yes, mouseButton = LEFT, CENTER, or RIGHT
+X error when running on 1.1...
+X You need to install Java 1.3 or later to view this content.
+X Click here to visit java.com and install.
+X make inverseCamera into cameraInv
+X fix messages referring to depth()
+X route all of them through a single function rather than current waste
+
+_ rename video.Camera to video.Video ?
+_ VideoInput VideoOutput, SoundInput, SoundOutput or AudioInput/AudioOutput
+_ should nf() handle commas as well?
+_ yes, and add nf(int what) so that non-padded version works
+_ but don't put commas into the zero-padded version
+_ make nf/nfs/nfp not so weird
+_ nf(PLUS, ...) nf(PAD, ...) nfc(PLUS, ...)
+_ should we include a from and to for the directional light?
_ fix bezierVertex() in P3D for newer api
-_ fix shapes in P3D
-
-_ fix messages referring to depth()
-_ route all of them through a single function rather than current waste
+_ fix shapes in P3D (line loop, polygons, etc)
_ fix the flicker in java2d mode
X is it because the lock was taken off (g) in PApplet?
@@ -92,6 +87,11 @@ _ i.e. ABGR_EXT might allow for just two shifts instead of 4
_ allow access to native pixel buffer in opengl and power of 2
_ so that no need to copy/update everything
+_ make the 1.4 code in PApplet load via reflection
+_ doesn't appear necessary with 1.3 applets
+
+_ noCursor seems to be broken on the mac?
+
_ make get/getImpl for PGraphics/PGraphics2
_ make sure there's a loadPixels/updatePixels in PGraphics2
_ rewrite getImpl/setImpl inside opengl
@@ -181,6 +181,7 @@ _ sphere() and box() should set normals and take textures
_ background color seems to be wrong?
_ check this once lighting actually works
+_ don't let users on < 1.3 load JAVA2D, or < 1.4 load OPENGL
PApplet
_ printarr() of null array crashes without an error
diff --git a/todo.txt b/todo.txt
index d85c60e8a..aea81c206 100644
--- a/todo.txt
+++ b/todo.txt
@@ -6,11 +6,13 @@ o and check in the preproc'd code to cvs?
X need to add classes dir to cp for jikes make (on win and linux)
X get both versions of size() properly detected on export
X get latest sonia from amit
+X remove particles from current processing
+X move netscape library out of libs and into build/shared
_ remove PdeXxx prefixes on names, make PdeBase into just "Processing"
-_ remove particles from current processing
-_ move netscape library out of libs and into build/shared
+_ placement of 100x100 items is odd
+_ happens with P3D and maybe also P2D?
_ update .exe to use new class/package
_ update .app to use new class/package