You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
(116) |
May
(220) |
Jun
(52) |
Jul
(30) |
Aug
(35) |
Sep
(24) |
Oct
(49) |
Nov
(44) |
Dec
(70) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(21) |
Feb
(30) |
Mar
(9) |
Apr
(44) |
May
(2) |
Jun
|
Jul
(10) |
Aug
(20) |
Sep
(25) |
Oct
(12) |
Nov
(16) |
Dec
(4) |
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(4) |
Jul
(25) |
Aug
|
Sep
|
Oct
|
Nov
(26) |
Dec
(10) |
2006 |
Jan
(5) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(33) |
2007 |
Jan
(4) |
Feb
(57) |
Mar
(17) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ma...@us...> - 2003-05-10 07:41:15
|
Update of /cvsroot/jrman/drafts/sampleData In directory sc8-pr-cvs1:/tmp/cvs-serv18678/sampleData Modified Files: cubeScene.rib Log Message: Undid small unnecesary changes. Added more displayed statistics. Index: cubeScene.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/cubeScene.rib,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** cubeScene.rib 9 May 2003 18:04:38 -0000 1.2 --- cubeScene.rib 10 May 2003 07:41:12 -0000 1.3 *************** *** 1,3 **** ! Format 800 600 1 PixelSamples 4 4 Exposure 1 2.5 --- 1,3 ---- ! Format 1000 750 1 PixelSamples 4 4 Exposure 1 2.5 |
From: <ma...@us...> - 2003-05-10 03:57:32
|
Update of /cvsroot/jrman/drafts/src/org/jrman/render In directory sc8-pr-cvs1:/tmp/cvs-serv30392/src/org/jrman/render Modified Files: RendererHidden.java Log Message: Some more optimizations.... Index: RendererHidden.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/RendererHidden.java,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** RendererHidden.java 9 May 2003 06:33:10 -0000 1.14 --- RendererHidden.java 10 May 2003 03:57:29 -0000 1.15 *************** *** 71,74 **** --- 71,76 ---- private int bucketHeight; + private int invisibleCount; + public void init(Frame frame, World world) { super.init(frame, world); *************** *** 87,91 **** public void addPrimitive(Primitive primitive) { ! internalAddPrimitive(primitive, -1, 0, false); } --- 89,93 ---- public void addPrimitive(Primitive primitive) { ! internalAddPrimitive(primitive, 0, 0, false); } *************** *** 109,113 **** boolean check) { BoundingVolume bv = primitive.getBoundingVolume(); ! bv = bv.transform(objectToCamera); if (clippingVolume.whereIs(bv) == Plane.Side.OUTSIDE) return true; --- 111,115 ---- boolean check) { BoundingVolume bv = primitive.getBoundingVolume(); ! bv = bv.transform3f(objectToCamera); if (clippingVolume.whereIs(bv) == Plane.Side.OUTSIDE) return true; *************** *** 135,147 **** Primitive primitive, BoundingVolume bv, ! int curColumn, ! int curRow, boolean check) { ! bv = bv.transform(cameraToRaster); primitive.setDistance(bv.getMinZ()); Bounds2f bounds = bv.toBounds2f(); if (!bounds.intersects(rasterWindow)) return; - primitive.setRasterBounds(bounds); float minX = bounds.getMinX() - rasterWindow.getMinX(); float minY = bounds.getMinY() - rasterWindow.getMinY(); --- 137,158 ---- Primitive primitive, BoundingVolume bv, ! int column, ! int row, boolean check) { ! bv = bv.transform3f(cameraToRaster); primitive.setDistance(bv.getMinZ()); Bounds2f bounds = bv.toBounds2f(); + primitive.setRasterBounds(bounds); + doPlaceInBucket(primitive, column, row, check); + } + + private void doPlaceInBucket( + Primitive primitive, + int curColumn, + int curRow, + boolean check) { + Bounds2f bounds = primitive.getRasterBounds(); if (!bounds.intersects(rasterWindow)) return; float minX = bounds.getMinX() - rasterWindow.getMinX(); float minY = bounds.getMinY() - rasterWindow.getMinY(); *************** *** 212,219 **** frame.getVerticalSamplingRate()); long start = System.currentTimeMillis(); for (int row = 0; row < bucketRows; row++) for (int column = 0; column < bucketColumns; column++) { Bucket bucket = getBucket(column, row); - Point2f rmin = rasterWindow.getMin(); float samplerX = rmin.x + bucketWidth * column; float samplerY = rmin.y + bucketHeight * row; --- 223,230 ---- frame.getVerticalSamplingRate()); long start = System.currentTimeMillis(); + Point2f rmin = rasterWindow.getMin(); for (int row = 0; row < bucketRows; row++) for (int column = 0; column < bucketColumns; column++) { Bucket bucket = getBucket(column, row); float samplerX = rmin.x + bucketWidth * column; float samplerY = rmin.y + bucketHeight * row; *************** *** 268,271 **** --- 279,283 ---- + gridCount / time + "grids/second"); + System.out.println("Invisibles: " + invisibleCount); } *************** *** 298,301 **** --- 310,314 ---- } } + invisibleCount++; return false; } *************** *** 303,309 **** private void placeInNextBucket(Primitive p, int column, int row) { if (column < bucketColumns - 1) ! internalAddPrimitive(p, column + 1, row, true); else if (row < bucketRows - 1) ! internalAddPrimitive(p, 0, row + 1, true); } --- 316,322 ---- private void placeInNextBucket(Primitive p, int column, int row) { if (column < bucketColumns - 1) ! doPlaceInBucket(p, column + 1, row, true); else if (row < bucketRows - 1) ! doPlaceInBucket(p, 0, row + 1, true); } |
From: <ma...@us...> - 2003-05-10 03:57:32
|
Update of /cvsroot/jrman/drafts/src/org/jrman/primitive In directory sc8-pr-cvs1:/tmp/cvs-serv30392/src/org/jrman/primitive Modified Files: Primitive.java Cylinder.java Quadric.java Torus.java Sphere.java Log Message: Some more optimizations.... Index: Primitive.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/primitive/Primitive.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Primitive.java 9 May 2003 06:33:11 -0000 1.8 --- Primitive.java 10 May 2003 03:57:29 -0000 1.9 *************** *** 23,28 **** import org.jrman.attributes.Attributes; - import org.jrman.geom.BoundingVolume; import org.jrman.geom.Bounds2f; import org.jrman.render.ShaderVariables; --- 23,28 ---- import org.jrman.attributes.Attributes; import org.jrman.geom.Bounds2f; + import org.jrman.geom.Bounds3f; import org.jrman.render.ShaderVariables; *************** *** 35,40 **** protected Bounds2f rasterBounds; - protected BoundingVolume boundingVolume; - protected float distance; --- 35,38 ---- *************** *** 48,58 **** } ! public BoundingVolume getBoundingVolume() { ! if (boundingVolume == null) ! boundingVolume = internalGetBoundingVolume(); ! return boundingVolume; ! } ! ! protected abstract BoundingVolume internalGetBoundingVolume(); public abstract Primitive[] split(); --- 46,50 ---- } ! public abstract Bounds3f getBoundingVolume(); public abstract Primitive[] split(); Index: Cylinder.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/primitive/Cylinder.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Cylinder.java 7 May 2003 07:08:35 -0000 1.1 --- Cylinder.java 10 May 2003 03:57:29 -0000 1.2 *************** *** 26,30 **** import org.jrman.attributes.Attributes; - import org.jrman.geom.BoundingVolume; import org.jrman.geom.Bounds3f; import org.jrman.grid.Grid; --- 26,29 ---- *************** *** 61,65 **** } ! protected BoundingVolume internalGetBoundingVolume() { float cosThetaMin = (float) Math.cos(thetaMin); float sinThetaMin = (float) Math.sin(thetaMin); --- 60,64 ---- } ! public Bounds3f getBoundingVolume() { float cosThetaMin = (float) Math.cos(thetaMin); float sinThetaMin = (float) Math.sin(thetaMin); Index: Quadric.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/primitive/Quadric.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** Quadric.java 7 May 2003 07:08:35 -0000 1.9 --- Quadric.java 10 May 2003 03:57:29 -0000 1.10 *************** *** 26,30 **** import javax.vecmath.Color3f; import javax.vecmath.Matrix4f; - import javax.vecmath.Point2f; import javax.vecmath.Point3f; import javax.vecmath.Point4f; --- 26,29 ---- *************** *** 422,429 **** public boolean isReadyToBeDiced(int gridSize) { ! Point2f min = rasterBounds.getMin(); ! Point2f max = rasterBounds.getMax(); ! float width = max.x - min.x; ! float height = max.y - min.y; boolean ready = width * height <= gridSize * attributes.getShadingRate(); if (!ready) --- 421,426 ---- public boolean isReadyToBeDiced(int gridSize) { ! float width = rasterBounds.getWidth(); ! float height = rasterBounds.getHeight(); boolean ready = width * height <= gridSize * attributes.getShadingRate(); if (!ready) Index: Torus.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/primitive/Torus.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Torus.java 7 May 2003 07:08:35 -0000 1.2 --- Torus.java 10 May 2003 03:57:29 -0000 1.3 *************** *** 26,30 **** import org.jrman.attributes.Attributes; - import org.jrman.geom.BoundingVolume; import org.jrman.geom.Bounds3f; import org.jrman.grid.Grid; --- 26,29 ---- *************** *** 65,69 **** } ! protected BoundingVolume internalGetBoundingVolume() { float zMin; float zMax; --- 64,68 ---- } ! public Bounds3f getBoundingVolume() { float zMin; float zMax; Index: Sphere.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/primitive/Sphere.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** Sphere.java 5 May 2003 08:29:08 -0000 1.15 --- Sphere.java 10 May 2003 03:57:29 -0000 1.16 *************** *** 25,29 **** import org.jrman.attributes.Attributes; - import org.jrman.geom.BoundingVolume; import org.jrman.geom.Bounds3f; import org.jrman.grid.Grid; --- 25,28 ---- *************** *** 68,72 **** } ! public BoundingVolume internalGetBoundingVolume() { float zMin = (float) Math.sin(phiMin) * radius; float zMax = (float) Math.sin(phiMax) * radius; --- 67,71 ---- } ! public Bounds3f getBoundingVolume() { float zMin = (float) Math.sin(phiMin) * radius; float zMax = (float) Math.sin(phiMax) * radius; |
Update of /cvsroot/jrman/drafts/src/org/jrman/geom In directory sc8-pr-cvs1:/tmp/cvs-serv30392/src/org/jrman/geom Modified Files: MutableBounds2f.java BoundingVolume.java Bounds3f.java MutableBounds3f.java Bounds2f.java ConvexHull3f.java Log Message: Some more optimizations.... Index: MutableBounds2f.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/MutableBounds2f.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** MutableBounds2f.java 15 Apr 2003 05:22:10 -0000 1.1 --- MutableBounds2f.java 10 May 2003 03:57:28 -0000 1.2 *************** *** 25,32 **** public void addPoint(float x, float y) { ! min.x = Math.min(x, min.x); ! min.y = Math.min(y, min.y); ! max.x =Math.max(x, max.x); ! max.y = Math.max(y, max.y); } --- 25,32 ---- public void addPoint(float x, float y) { ! minX = Math.min(x, minX); ! minY = Math.min(y, minY); ! maxX =Math.max(x, maxX); ! maxY = Math.max(y, maxY); } Index: BoundingVolume.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/BoundingVolume.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** BoundingVolume.java 7 May 2003 07:08:35 -0000 1.3 --- BoundingVolume.java 10 May 2003 03:57:28 -0000 1.4 *************** *** 22,26 **** public interface BoundingVolume { ! BoundingVolume transform(Transform transform); Plane.Side whichSideOf(Plane plane); --- 22,26 ---- public interface BoundingVolume { ! BoundingVolume transform3f(Transform transform); Plane.Side whichSideOf(Plane plane); Index: Bounds3f.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/Bounds3f.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Bounds3f.java 7 May 2003 07:08:35 -0000 1.8 --- Bounds3f.java 10 May 2003 03:57:28 -0000 1.9 *************** *** 26,32 **** public class Bounds3f implements BoundingVolume { ! protected Point3f max; ! protected Point3f min; public static Bounds3f ALL = --- 26,43 ---- public class Bounds3f implements BoundingVolume { ! // Not thread safe! ! private static Point3f p = new Point3f(); ! protected float minX; ! ! protected float maxX; ! ! protected float minY; ! ! protected float maxY; ! ! protected float minZ; ! ! protected float maxZ; public static Bounds3f ALL = *************** *** 50,82 **** public Bounds3f(float xMin, float xMax, float yMin, float yMax, float zMin, float zMax) { ! min = new Point3f(xMin, yMin, zMin); ! max = new Point3f(xMax, yMax, zMax); } ! public Bounds3f(Point3f newMin, Point3f newMax) { ! min = new Point3f(newMin); ! max = new Point3f(newMax); } ! public float getMinZ() { ! return min.z; } public Bounds2f toBounds2f() { ! return new Bounds2f(min.x, max.x, min.y, max.y); } public boolean intersects(Bounds3f other) { ! if (min.x > other.max.x) return false; ! if (max.x < other.min.x) return false; ! if (min.y > other.max.y) return false; ! if (max.y < other.min.y) return false; ! if (min.z > other.max.z) return false; ! if (max.z < other.min.z) return false; return true; --- 61,96 ---- public Bounds3f(float xMin, float xMax, float yMin, float yMax, float zMin, float zMax) { ! minX = xMin; ! maxX = xMax; ! minY = yMin; ! maxY = yMax; ! minZ = zMin; ! maxZ = zMax; } ! public Bounds3f(Point3f min, Point3f max) { ! this(min.x, max.x, min.y, max.y, min.z, max.z); } ! public float getMinZ() { ! return minZ; } public Bounds2f toBounds2f() { ! return new Bounds2f(minX, maxX, minY, maxY); } public boolean intersects(Bounds3f other) { ! if (minX > other.maxX) return false; ! if (maxX < other.minX) return false; ! if (minY > other.maxY) return false; ! if (maxY < other.minY) return false; ! if (minZ > other.maxZ) return false; ! if (maxZ < other.minZ) return false; return true; *************** *** 84,130 **** public boolean contains(Point3f p) { ! if (p.x < min.x) return false; ! if (p.x > max.x) return false; ! if (p.y < min.y) return false; ! if (p.y > max.y) return false; ! if (p.z < min.z) return false; ! if (p.z > max.z) return false; return true; } ! public Bounds3f transformToBounds3f(Transform transform) { MutableBounds3f mb = new MutableBounds3f(); ! Point3f p = new Point3f(); ! p.set(min.x, min.y, min.z); transform.transformPoint(p); mb.addPoint(p); ! p.set(min.x, min.y, max.z); transform.transformPoint(p); mb.addPoint(p); ! p.set(min.x, max.y, min.z); transform.transformPoint(p); mb.addPoint(p); ! p.set(min.x, max.y, max.z); transform.transformPoint(p); mb.addPoint(p); ! p.set(max.x, min.y, min.z); transform.transformPoint(p); mb.addPoint(p); ! p.set(max.x, min.y, max.z); transform.transformPoint(p); mb.addPoint(p); ! p.set(max.x, max.y, min.z); transform.transformPoint(p); mb.addPoint(p); ! p.set(max.x, max.y, max.z); transform.transformPoint(p); mb.addPoint(p); ! return new Bounds3f(mb.min, mb.max); } --- 98,155 ---- public boolean contains(Point3f p) { ! if (p.x < minX) return false; ! if (p.x > maxX) return false; ! if (p.y < minY) return false; ! if (p.y > maxY) return false; ! if (p.z < minZ) return false; ! if (p.z > maxZ) return false; return true; } ! public BoundingVolume transform3f(Transform transform) { ! /* MutableBounds3f mb = new MutableBounds3f(); ! p.set(minX, minY, minZ); transform.transformPoint(p); mb.addPoint(p); ! p.set(minX, minY, maxZ); transform.transformPoint(p); mb.addPoint(p); ! p.set(minX, maxY, minZ); transform.transformPoint(p); mb.addPoint(p); ! p.set(minX, maxY, maxZ); transform.transformPoint(p); mb.addPoint(p); ! p.set(maxX, minY, minZ); transform.transformPoint(p); mb.addPoint(p); ! p.set(maxX, minY, maxZ); transform.transformPoint(p); mb.addPoint(p); ! p.set(maxX, maxY, minZ); transform.transformPoint(p); mb.addPoint(p); ! p.set(maxX, maxY, maxZ); transform.transformPoint(p); mb.addPoint(p); ! return mb; ! */ ! ConvexHull3f c = new ConvexHull3f(); ! c.addPoint(minX, minY, minZ); ! c.addPoint(minX, minY, maxZ); ! c.addPoint(minX, maxY, minZ); ! c.addPoint(minX, maxY, maxZ); ! c.addPoint(maxX, minY, minZ); ! c.addPoint(maxX, minY, maxZ); ! c.addPoint(maxX, maxY, minZ); ! c.addPoint(maxX, maxY, maxZ); ! return c.transform3f(transform); } *************** *** 132,142 **** boolean inside = false; boolean outside = false; ! Point3f p = new Point3f(); ! p.set(min.x, min.y, min.z); if (plane.isInside(p)) inside = true; else outside = true; ! p.set(min.x, min.y, max.z); if (plane.isInside(p)) { inside = true; --- 157,166 ---- boolean inside = false; boolean outside = false; ! p.set(minX, minY, minZ); if (plane.isInside(p)) inside = true; else outside = true; ! p.set(minX, minY, maxZ); if (plane.isInside(p)) { inside = true; *************** *** 148,152 **** return Plane.Side.BOTH_SIDES; } ! p.set(min.x, max.y, min.z); if (plane.isInside(p)) { inside = true; --- 172,176 ---- return Plane.Side.BOTH_SIDES; } ! p.set(minX, maxY, minZ); if (plane.isInside(p)) { inside = true; *************** *** 158,162 **** return Plane.Side.BOTH_SIDES; } ! p.set(min.x, max.y, max.z); if (plane.isInside(p)) { inside = true; --- 182,186 ---- return Plane.Side.BOTH_SIDES; } ! p.set(minX, maxY, maxZ); if (plane.isInside(p)) { inside = true; *************** *** 168,172 **** return Plane.Side.BOTH_SIDES; } ! p.set(max.x, min.y, min.z); if (plane.isInside(p)) { inside = true; --- 192,196 ---- return Plane.Side.BOTH_SIDES; } ! p.set(maxX, minY, minZ); if (plane.isInside(p)) { inside = true; *************** *** 178,182 **** return Plane.Side.BOTH_SIDES; } ! p.set(max.x, min.y, max.z); if (plane.isInside(p)) { inside = true; --- 202,206 ---- return Plane.Side.BOTH_SIDES; } ! p.set(maxX, minY, maxZ); if (plane.isInside(p)) { inside = true; *************** *** 188,192 **** return Plane.Side.BOTH_SIDES; } ! p.set(max.x, max.y, min.z); if (plane.isInside(p)) { inside = true; --- 212,216 ---- return Plane.Side.BOTH_SIDES; } ! p.set(maxX, maxY, minZ); if (plane.isInside(p)) { inside = true; *************** *** 198,202 **** return Plane.Side.BOTH_SIDES; } ! p.set(max.x, max.y, max.z); if (plane.isInside(p)) { inside = true; --- 222,226 ---- return Plane.Side.BOTH_SIDES; } ! p.set(maxX, maxY, maxZ); if (plane.isInside(p)) { inside = true; *************** *** 211,244 **** } - public BoundingVolume transform(Transform transform) { - ConvexHull3f c = new ConvexHull3f(); - c.addPoint(min.x, min.y, min.z); - c.addPoint(min.x, min.y, max.z); - c.addPoint(min.x, max.y, min.z); - c.addPoint(min.x, max.y, max.z); - c.addPoint(max.x, min.y, min.z); - c.addPoint(max.x, min.y, max.z); - c.addPoint(max.x, max.y, min.z); - c.addPoint(max.x, max.y, max.z); - return c.transform(transform); - } - public Bounds3f getBoundingBox() { return this; } - public Point3f getMax() { - return new Point3f(max); - } - - public Point3f getMin() { - return new Point3f(min); - } - public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Bounds3f"); ! sb.append(", min: ").append(min); ! sb.append(", max: ").append(max); return sb.toString(); } --- 235,263 ---- } public Bounds3f getBoundingBox() { return this; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Bounds3f"); ! sb ! .append(", min: ") ! .append('(') ! .append(minX) ! .append(", ") ! .append(minY) ! .append("' ") ! .append(minZ) ! .append(')'); ! sb ! .append(", max: ") ! .append('(') ! .append(maxX) ! .append(", ") ! .append(maxY) ! .append(", ") ! .append(maxZ) ! .append(')'); return sb.toString(); } Index: MutableBounds3f.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/MutableBounds3f.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** MutableBounds3f.java 13 Apr 2003 05:15:32 -0000 1.1 --- MutableBounds3f.java 10 May 2003 03:57:28 -0000 1.2 *************** *** 26,35 **** public void addPoint(float x, float y, float z) { ! min.x = Math.min(x, min.x); ! min.y = Math.min(y, min.y); ! min.z = Math.min(z, min.z); ! max.x = Math.max(x, max.x); ! max.y = Math.max(y, max.y); ! max.z = Math.max(z, max.z); } --- 26,35 ---- public void addPoint(float x, float y, float z) { ! minX = Math.min(x, minX); ! minY = Math.min(y, minY); ! minZ = Math.min(z, minZ); ! maxX = Math.max(x, maxX); ! maxY = Math.max(y, maxY); ! maxZ = Math.max(z, maxZ); } Index: Bounds2f.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/Bounds2f.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Bounds2f.java 9 May 2003 06:33:11 -0000 1.8 --- Bounds2f.java 10 May 2003 03:57:28 -0000 1.9 *************** *** 25,41 **** public class Bounds2f { ! protected Point2f max; ! ! protected Point2f min; public Bounds2f(float xMin, float xMax, float yMin, float yMax) { ! min = new Point2f(xMin, yMin); ! max = new Point2f(xMax, yMax); } public Bounds2f(Point2f min, Point2f max) { ! this.min = new Point2f(min); ! this.max = new Point2f(max); } --- 25,49 ---- public class Bounds2f { + + // Not thread safe! + private static Point2f p = new Point2f(); ! protected float minX; ! ! protected float maxX; ! ! protected float minY; ! ! protected float maxY; public Bounds2f(float xMin, float xMax, float yMin, float yMax) { ! minX = xMin; ! maxX = xMax; ! minY = yMin; ! maxY = yMax; } public Bounds2f(Point2f min, Point2f max) { ! this(min.x, max.x, min.y, max.y); } *************** *** 45,55 **** public boolean intersects(Bounds2f other) { ! if (min.x > other.max.x) return false; ! if (max.x < other.min.x) return false; ! if (min.y > other.max.y) return false; ! if (max.y < other.min.y) return false; return true; --- 53,63 ---- public boolean intersects(Bounds2f other) { ! if (minX > other.maxX) return false; ! if (maxX < other.minX) return false; ! if (minY > other.maxY) return false; ! if (maxY < other.minY) return false; return true; *************** *** 58,99 **** public Bounds2f transform(Transform transform) { MutableBounds2f mb = new MutableBounds2f(); ! Point2f p = new Point2f(); ! p.set(min.x, min.y); transform.transformPoint(p); mb.addPoint(p); ! p.set(min.x, max.y); transform.transformPoint(p); mb.addPoint(p); ! p.set(max.x, min.y); transform.transformPoint(p); mb.addPoint(p); ! p.set(max.x, max.y); transform.transformPoint(p); mb.addPoint(p); ! return new Bounds2f(mb.min, mb.max); } public Point2f getMax() { ! return new Point2f(max); } public Point2f getMin() { ! return new Point2f(min); } public float getMinX() { ! return min.x; } public float getMaxX() { ! return max.x; } public float getMinY() { ! return min.y; } public float getMaxY() { ! return max.y; } --- 66,114 ---- public Bounds2f transform(Transform transform) { MutableBounds2f mb = new MutableBounds2f(); ! p.set(minX, minY); transform.transformPoint(p); mb.addPoint(p); ! p.set(minX, maxY); transform.transformPoint(p); mb.addPoint(p); ! p.set(maxX, minY); transform.transformPoint(p); mb.addPoint(p); ! p.set(maxX, maxY); transform.transformPoint(p); mb.addPoint(p); ! return mb; } public Point2f getMax() { ! return new Point2f(maxX, maxY); } public Point2f getMin() { ! return new Point2f(minX, minY); } public float getMinX() { ! return minX; } public float getMaxX() { ! return maxX; } public float getMinY() { ! return minY; } public float getMaxY() { ! return maxY; ! } ! ! public float getWidth() { ! return maxX - minX; ! } ! ! public float getHeight() { ! return maxY - minY; } *************** *** 101,106 **** StringBuffer sb = new StringBuffer(); sb.append("Bounds2f"); ! sb.append(", min: ").append(min); ! sb.append(", max: ").append(max); return sb.toString(); } --- 116,121 ---- StringBuffer sb = new StringBuffer(); sb.append("Bounds2f"); ! sb.append(", min: ").append('(').append(minX).append(", ").append(minY).append(')'); ! sb.append(", max: ").append('(').append(maxX).append(", ").append(maxY).append(')'); return sb.toString(); } Index: ConvexHull3f.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/ConvexHull3f.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** ConvexHull3f.java 7 May 2003 07:08:35 -0000 1.8 --- ConvexHull3f.java 10 May 2003 03:57:28 -0000 1.9 *************** *** 56,60 **** } ! public BoundingVolume transform(Transform transform) { ConvexHull3f result = new ConvexHull3f(); Point3f tmp = new Point3f(); --- 56,60 ---- } ! public BoundingVolume transform3f(Transform transform) { ConvexHull3f result = new ConvexHull3f(); Point3f tmp = new Point3f(); |
From: <ma...@us...> - 2003-05-10 03:57:32
|
Update of /cvsroot/jrman/drafts/sampleData In directory sc8-pr-cvs1:/tmp/cvs-serv30392/sampleData Modified Files: unit.rib ManySpheres.rib Log Message: Some more optimizations.... Index: unit.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/unit.rib,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** unit.rib 9 May 2003 06:33:11 -0000 1.1 --- unit.rib 10 May 2003 03:57:29 -0000 1.2 *************** *** 1 **** ! ReadArchive "sphereUnit.rib" --- 1 ---- ! ReadArchive "torusSphereUnit.rib" Index: ManySpheres.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/ManySpheres.rib,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** ManySpheres.rib 9 May 2003 00:05:14 -0000 1.9 --- ManySpheres.rib 10 May 2003 03:57:29 -0000 1.10 *************** *** 7,10 **** --- 7,11 ---- PixelFilter "box" 1 1 Projection "perspective" "fov" 50 + #Projection "perspective" "fov" 90 ShadingRate 1 Surface "fakedlight" *************** *** 14,17 **** --- 15,19 ---- WorldBegin ReadArchive "AllSpheres.rib" + #ReadArchive "ss.rib" Translate 0 7 0 Color 1 1 0 |
From: <ma...@us...> - 2003-05-09 18:04:41
|
Update of /cvsroot/jrman/drafts/sampleData In directory sc8-pr-cvs1:/tmp/cvs-serv25155/sampleData Modified Files: cubeScene.rib Added Files: torusSphereUnit.rib Log Message: Small changes to cubeScene.rib --- NEW FILE: torusSphereUnit.rib --- TransformBegin Translate 0 -.4 0 Rotate 90 1 0 0 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate 0 .4 0 Rotate 90 1 0 0 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate -.4 0 0 Rotate 90 0 1 0 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate .4 0 0 Rotate 90 0 1 0 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate 0 0 .4 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate 0 0 -.4 Torus .4 .1 0 360 360 TransformEnd AttributeBegin Color 1 .7 0 Sphere .3 -.3 .3 360 AttributeEnd Index: cubeScene.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/cubeScene.rib,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** cubeScene.rib 9 May 2003 06:33:11 -0000 1.1 --- cubeScene.rib 9 May 2003 18:04:38 -0000 1.2 *************** *** 16,19 **** --- 16,20 ---- Translate 20 20 0 Rotate 60 1 1 1 + Scale 1.5 1.5 1.5 ReadArchive "cube.rib" AttributeEnd *************** *** 23,26 **** --- 24,28 ---- Translate -15 20 0 Rotate 60 1 0 1 + Scale 1.5 1.5 1.5 ReadArchive "cube.rib" AttributeEnd *************** *** 28,33 **** AttributeBegin Color 0 0 1 ! Translate 15 -10 0 Rotate 45 0 1 1 ReadArchive "cube.rib" AttributeEnd --- 30,36 ---- AttributeBegin Color 0 0 1 ! Translate 20 -10 0 Rotate 45 0 1 1 + Scale 1.5 1.5 1.5 ReadArchive "cube.rib" AttributeEnd *************** *** 37,40 **** --- 40,44 ---- Translate -15 -12 0 Rotate 45 1 1 0 + Scale 1.5 1.5 1.5 ReadArchive "cube.rib" AttributeEnd *************** *** 44,47 **** --- 48,52 ---- Translate 0 0 15 Rotate 0 1 0 0 + Scale 1.5 1.5 1.5 ReadArchive "cube.rib" AttributeEnd *************** *** 51,54 **** --- 56,60 ---- Translate 10 -20 5 Rotate -60 1 0 1 + Scale 1.5 1.5 1.5 ReadArchive "cube.rib" AttributeEnd |
From: <ma...@us...> - 2003-05-09 06:33:14
|
Update of /cvsroot/jrman/drafts/src/org/jrman/geom In directory sc8-pr-cvs1:/tmp/cvs-serv28650/src/org/jrman/geom Modified Files: Bounds2f.java Log Message: Added culling optimization. Index: Bounds2f.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/Bounds2f.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Bounds2f.java 3 May 2003 18:02:48 -0000 1.7 --- Bounds2f.java 9 May 2003 06:33:11 -0000 1.8 *************** *** 81,84 **** --- 81,100 ---- return new Point2f(min); } + + public float getMinX() { + return min.x; + } + + public float getMaxX() { + return max.x; + } + + public float getMinY() { + return min.y; + } + + public float getMaxY() { + return max.y; + } public String toString() { |
Update of /cvsroot/jrman/drafts/sampleData In directory sc8-pr-cvs1:/tmp/cvs-serv28650/sampleData Added Files: torusUnit.rib row.rib cubeScene.rib sphereUnit.rib cylinderUnit.rib unit.rib cube.rib square.rib Log Message: Added culling optimization. --- NEW FILE: torusUnit.rib --- TransformBegin Translate 0 -.4 0 Rotate 90 1 0 0 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate 0 .4 0 Rotate 90 1 0 0 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate -.4 0 0 Rotate 90 0 1 0 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate .4 0 0 Rotate 90 0 1 0 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate 0 0 .4 Torus .4 .1 0 360 360 TransformEnd TransformBegin Translate 0 0 -.4 Torus .4 .1 0 360 360 TransformEnd --- NEW FILE: row.rib --- TransformBegin Translate -5 0 0 ReadArchive "unit.rib" Translate 1 0 0 ReadArchive "unit.rib" Translate 1 0 0 ReadArchive "unit.rib" Translate 1 0 0 ReadArchive "unit.rib" Translate 1 0 0 ReadArchive "unit.rib" Translate 1 0 0 ReadArchive "unit.rib" Translate 1 0 0 ReadArchive "unit.rib" Translate 1 0 0 ReadArchive "unit.rib" Translate 1 0 0 ReadArchive "unit.rib" Translate 1 0 0 ReadArchive "unit.rib" TransformEnd --- NEW FILE: cubeScene.rib --- Format 800 600 1 PixelSamples 4 4 Exposure 1 2.5 Display "cubeScene.tif" "framebuffer" "rgb" PixelFilter "box" 1 1 Projection "perspective" "fov" 50 ShadingRate 1 Surface "fakedlight" Translate 0 0 60 Rotate 20 0 0 1 Rotate -30 1 0 0 WorldBegin # red AttributeBegin Color 1 0 0 Translate 20 20 0 Rotate 60 1 1 1 ReadArchive "cube.rib" AttributeEnd # green AttributeBegin Color 0 1 0 Translate -15 20 0 Rotate 60 1 0 1 ReadArchive "cube.rib" AttributeEnd # blue AttributeBegin Color 0 0 1 Translate 15 -10 0 Rotate 45 0 1 1 ReadArchive "cube.rib" AttributeEnd # yellow AttributeBegin Color 1 1 0 Translate -15 -12 0 Rotate 45 1 1 0 ReadArchive "cube.rib" AttributeEnd # cyan AttributeBegin Color 0 1 1 Translate 0 0 15 Rotate 0 1 0 0 ReadArchive "cube.rib" AttributeEnd # magenta AttributeBegin Color 1 0 1 Translate 10 -20 5 Rotate -60 1 0 1 ReadArchive "cube.rib" AttributeEnd # large gray AttributeBegin Color .6 .6 .6 Translate 0 -50 100 Scale 12 12 12 ReadArchive "cube.rib" AttributeEnd WorldEnd --- NEW FILE: sphereUnit.rib --- Sphere .5 -.5 .5 360 --- NEW FILE: cylinderUnit.rib --- Cylinder .5 -.5 .5 360 --- NEW FILE: unit.rib --- ReadArchive "sphereUnit.rib" --- NEW FILE: cube.rib --- TransformBegin Translate 0 0 -5 ReadArchive "square.rib" Translate 0 0 1 ReadArchive "square.rib" Translate 0 0 1 ReadArchive "square.rib" Translate 0 0 1 ReadArchive "square.rib" Translate 0 0 1 ReadArchive "square.rib" Translate 0 0 1 ReadArchive "square.rib" Translate 0 0 1 ReadArchive "square.rib" Translate 0 0 1 ReadArchive "square.rib" Translate 0 0 1 ReadArchive "square.rib" Translate 0 0 1 ReadArchive "square.rib" TransformEnd --- NEW FILE: square.rib --- TransformBegin Translate 0 -5 0 ReadArchive "row.rib" Translate 0 1 0 ReadArchive "row.rib" Translate 0 1 0 ReadArchive "row.rib" Translate 0 1 0 ReadArchive "row.rib" Translate 0 1 0 ReadArchive "row.rib" Translate 0 1 0 ReadArchive "row.rib" Translate 0 1 0 ReadArchive "row.rib" Translate 0 1 0 ReadArchive "row.rib" Translate 0 1 0 ReadArchive "row.rib" Translate 0 1 0 ReadArchive "row.rib" TransformEnd |
From: <ma...@us...> - 2003-05-09 06:33:14
|
Update of /cvsroot/jrman/drafts/src/org/jrman/render In directory sc8-pr-cvs1:/tmp/cvs-serv28650/src/org/jrman/render Modified Files: Bucket.java SamplePoint.java RendererHidden.java Micropolygon.java Log Message: Added culling optimization. Index: Bucket.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/Bucket.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Bucket.java 7 May 2003 07:08:34 -0000 1.3 --- Bucket.java 9 May 2003 06:33:10 -0000 1.4 *************** *** 25,28 **** --- 25,29 ---- import org.jrman.primitive.Primitive; + import org.jrman.util.NullStack; public class Bucket { *************** *** 68,72 **** public void flush() { primitives = new ArrayList(); ! micropolygons = new Stack(); } --- 69,73 ---- public void flush() { primitives = new ArrayList(); ! micropolygons = new NullStack(); } Index: SamplePoint.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/SamplePoint.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** SamplePoint.java 9 May 2003 00:05:13 -0000 1.8 --- SamplePoint.java 9 May 2003 06:33:10 -0000 1.9 *************** *** 70,74 **** ocolor.set(0f, 0f, 0f); int i = 0; ! while (i < samples.size()) { Sample sample = (Sample) samples.get(i++); if (sample.isOpaque()) --- 70,75 ---- ocolor.set(0f, 0f, 0f); int i = 0; ! int size = samples.size(); ! while (i < size) { Sample sample = (Sample) samples.get(i++); if (sample.isOpaque()) Index: RendererHidden.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/RendererHidden.java,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** RendererHidden.java 7 May 2003 07:08:34 -0000 1.13 --- RendererHidden.java 9 May 2003 06:33:10 -0000 1.14 *************** *** 58,64 **** private Bounds2f rasterWindow; ! private Point2f rasterWindowMin; ! private Bucket[] buckets; --- 58,64 ---- private Bounds2f rasterWindow; ! private Point2f rasterWindowMin; ! private Bucket[] buckets; *************** *** 87,93 **** public void addPrimitive(Primitive primitive) { Transform objectToWorld = primitive.getAttributes().getTransform(); Transform objectToCamera = worldToCamera.concat(objectToWorld); ! if (!addPrimitive(primitive, 0, objectToCamera)) System.err.println("Can't split primitive at eye plane: " + primitive); } --- 87,101 ---- public void addPrimitive(Primitive primitive) { + internalAddPrimitive(primitive, -1, 0, false); + } + + private void internalAddPrimitive( + Primitive primitive, + int curColumn, + int curRow, + boolean check) { Transform objectToWorld = primitive.getAttributes().getTransform(); Transform objectToCamera = worldToCamera.concat(objectToWorld); ! if (!addPrimitive(primitive, 0, objectToCamera, curColumn, curRow, check)) System.err.println("Can't split primitive at eye plane: " + primitive); } *************** *** 96,100 **** Primitive primitive, int recursionLevel, ! Transform objectToCamera) { BoundingVolume bv = primitive.getBoundingVolume(); bv = bv.transform(objectToCamera); --- 104,111 ---- Primitive primitive, int recursionLevel, ! Transform objectToCamera, ! int curColumn, ! int curRow, ! boolean check) { BoundingVolume bv = primitive.getBoundingVolume(); bv = bv.transform(objectToCamera); *************** *** 103,107 **** Plane.Side side = bv.whichSideOf(eyePlane); if (side == Plane.Side.INSIDE) { ! placeInBucket(primitive, bv); return true; } --- 114,118 ---- Plane.Side side = bv.whichSideOf(eyePlane); if (side == Plane.Side.INSIDE) { ! placeInBucket(primitive, bv, curColumn, curRow, check); return true; } *************** *** 111,129 **** Primitive[] sub = primitive.split(); for (int i = 0; i < sub.length; i++) ! if (!addPrimitive(sub[i], recursionLevel + 1, objectToCamera)) return false; return true; } ! private void placeInBucket(Primitive primitive, BoundingVolume bv) { primitive.setDistance(bv.getMinZ()); ! Bounds2f bounds = bv.transform(cameraToRaster).toBounds2f(); if (!bounds.intersects(rasterWindow)) return; primitive.setRasterBounds(bounds); ! Point2f min = bounds.getMin(); ! min.sub(rasterWindow.getMin()); ! int column = Calc.clamp((int) (min.x / bucketWidth), 0, bucketColumns - 1); ! int row = Calc.clamp((int) (min.y / bucketHeight), 0, bucketRows - 1); getBucket(column, row).addPrimitive(primitive); } --- 122,172 ---- Primitive[] sub = primitive.split(); for (int i = 0; i < sub.length; i++) ! if (!addPrimitive(sub[i], ! recursionLevel + 1, ! objectToCamera, ! curColumn, ! curRow, ! check)) return false; return true; } ! private void placeInBucket( ! Primitive primitive, ! BoundingVolume bv, ! int curColumn, ! int curRow, ! boolean check) { ! bv = bv.transform(cameraToRaster); primitive.setDistance(bv.getMinZ()); ! Bounds2f bounds = bv.toBounds2f(); if (!bounds.intersects(rasterWindow)) return; primitive.setRasterBounds(bounds); ! float minX = bounds.getMinX() - rasterWindow.getMinX(); ! float minY = bounds.getMinY() - rasterWindow.getMinY(); ! int column = Calc.clamp((int) (minX / bucketWidth), 0, bucketColumns - 1); ! int row = Calc.clamp((int) (minY / bucketHeight), 0, bucketRows - 1); ! if (check && row <= curRow) { ! float maxY = bounds.getMaxY() - rasterWindow.getMinY(); ! int maxRow = Calc.clamp((int) Math.ceil(maxY / bucketHeight), 0, bucketRows - 1); ! if (maxRow < curRow) ! return; ! row = curRow; ! float maxX = bounds.getMaxX() - rasterWindow.getMinX(); ! int maxColumn = ! Calc.clamp((int) Math.ceil(maxX / bucketWidth), 0, bucketColumns - 1); ! if (column <= curColumn && curColumn <= maxColumn) { ! getBucket(curColumn, curRow).addPrimitive(primitive); ! return; ! } ! if (column < curColumn) { ! if (maxRow < curRow + 1) ! return; ! if (curRow == bucketRows - 1) ! return; ! row++; ! } ! } getBucket(column, row).addPrimitive(primitive); } *************** *** 172,198 **** for (int column = 0; column < bucketColumns; column++) { Bucket bucket = getBucket(column, row); - while (bucket.hasMorePrimitives()) { - Primitive p = bucket.getNextPrimitive(); - if (p.isReadyToBeDiced(gridSize)) { - gridCount++; - p.dice(shaderVariables); - Attributes attr = p.getAttributes(); - Transform objectToWorld = attr.getTransform(); - Transform objectToCamera = worldToCamera.concat(objectToWorld); - shaderVariables.transform(objectToCamera); - shaderVariables.I.set(shaderVariables.P); - attr.getSurface().shade(shaderVariables); - shaderVariables.transform(cameraToRaster); - shaderVariables.getMicropolygons(this); - } else { - Primitive[] sub = p.split(); - for (int i = 0; i < sub.length; i++) - addPrimitive(sub[i]); - } - } Point2f rmin = rasterWindow.getMin(); float samplerX = rmin.x + bucketWidth * column; float samplerY = rmin.y + bucketHeight * row; sampler.init(samplerX, samplerY); sampler.sampleBucket(bucket); bucket.flush(); --- 215,245 ---- for (int column = 0; column < bucketColumns; column++) { Bucket bucket = getBucket(column, row); Point2f rmin = rasterWindow.getMin(); float samplerX = rmin.x + bucketWidth * column; float samplerY = rmin.y + bucketHeight * row; sampler.init(samplerX, samplerY); + while (bucket.hasMorePrimitives()) { + Primitive p = bucket.getNextPrimitive(); + if (isPrimitiveVisible(p, sampler)) { + if (p.isReadyToBeDiced(gridSize)) { + gridCount++; + p.dice(shaderVariables); + Attributes attr = p.getAttributes(); + Transform objectToWorld = attr.getTransform(); + Transform objectToCamera = worldToCamera.concat(objectToWorld); + shaderVariables.transform(objectToCamera); + shaderVariables.I.set(shaderVariables.P); + attr.getSurface().shade(shaderVariables); + shaderVariables.transform(cameraToRaster); + shaderVariables.getMicropolygons(this); + sampler.sampleBucket(bucket); + } else { + Primitive[] sub = p.split(); + for (int i = 0; i < sub.length; i++) + internalAddPrimitive(sub[i], column, row, true); + } + } else + placeInNextBucket(p, column, row); + } sampler.sampleBucket(bucket); bucket.flush(); *************** *** 210,215 **** if (buckets[i].hasMorePrimitives()) System.out.println("More primitives: " + i); - if (buckets[i].hasMoreMicropolygons()) - System.out.println("More micropolygons: " + i); } long end = System.currentTimeMillis(); --- 257,260 ---- *************** *** 223,226 **** --- 268,309 ---- + gridCount / time + "grids/second"); + } + + private boolean isPrimitiveVisible(Primitive p, Sampler sampler) { + Point2f smin = sampler.getMin(); + Bounds2f pb = p.getRasterBounds(); + float pMinX = pb.getMinX() - smin.x; + float pMaxX = pb.getMaxX() - smin.x; + float pMinY = pb.getMinY() - smin.y; + float pMaxY = pb.getMaxY() - smin.y; + int minColumn = + Calc.clamp((int) (pMinX / sampler.getSampleWidth()), 0, sampler.getWidth() - 1); + int minRow = + Calc.clamp((int) (pMinY / sampler.getSampleHeight()), 0, sampler.getHeight() - 1); + int maxColumn = + Calc.clamp( + (int) Math.ceil(pMaxX / sampler.getSampleWidth()), + 0, + sampler.getWidth() - 1); + int maxRow = + Calc.clamp( + (int) Math.ceil(pMaxY / sampler.getSampleHeight()), + 0, + sampler.getHeight() - 1); + for (int row = minRow; row <= maxRow; row++) { + for (int col = minColumn; col <= maxColumn; col++) { + SamplePoint sp = sampler.getSamplePoint(col, row); + if (!sp.isOpaque() || sp.getZ() > p.getDistance()) + return true; + } + } + return false; + } + + private void placeInNextBucket(Primitive p, int column, int row) { + if (column < bucketColumns - 1) + internalAddPrimitive(p, column + 1, row, true); + else if (row < bucketRows - 1) + internalAddPrimitive(p, 0, row + 1, true); } Index: Micropolygon.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/Micropolygon.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** Micropolygon.java 9 May 2003 00:05:13 -0000 1.9 --- Micropolygon.java 9 May 2003 06:33:10 -0000 1.10 *************** *** 141,147 **** Calc.clamp((int) (mpMinY / sampler.getSampleHeight()), 0, sampler.getHeight() - 1); int maxColumn = ! Calc.clamp((int) (mpMaxX / sampler.getSampleWidth()), 0, sampler.getWidth() - 1); int maxRow = ! Calc.clamp((int) (mpMaxY / sampler.getSampleHeight()), 0, sampler.getHeight() - 1); for (int row = minRow; row <= maxRow; row++) { boolean found = false; --- 141,147 ---- Calc.clamp((int) (mpMinY / sampler.getSampleHeight()), 0, sampler.getHeight() - 1); int maxColumn = ! Calc.clamp((int) Math.ceil(mpMaxX / sampler.getSampleWidth()), 0, sampler.getWidth() - 1); int maxRow = ! Calc.clamp((int) Math.ceil(mpMaxY / sampler.getSampleHeight()), 0, sampler.getHeight() - 1); for (int row = minRow; row <= maxRow; row++) { boolean found = false; |
From: <ma...@us...> - 2003-05-09 06:33:14
|
Update of /cvsroot/jrman/drafts/src/org/jrman/primitive In directory sc8-pr-cvs1:/tmp/cvs-serv28650/src/org/jrman/primitive Modified Files: Primitive.java Log Message: Added culling optimization. Index: Primitive.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/primitive/Primitive.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Primitive.java 7 May 2003 07:08:35 -0000 1.7 --- Primitive.java 9 May 2003 06:33:11 -0000 1.8 *************** *** 73,76 **** --- 73,80 ---- return distance; } + + public Bounds2f getRasterBounds() { + return rasterBounds; + } } |
From: <ma...@us...> - 2003-05-09 06:33:14
|
Update of /cvsroot/jrman/drafts/src/org/jrman/util In directory sc8-pr-cvs1:/tmp/cvs-serv28650/src/org/jrman/util Added Files: NullStack.java Log Message: Added culling optimization. --- NEW FILE: NullStack.java --- /* NullStack.java Copyright (C) 2003 Gerardo Horvilleur Martinez This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.jrman.util; import java.util.Stack; public class NullStack extends Stack { public Object push(Object item) { // Doesn't do anything (discards object) return null; } } |
From: <ma...@us...> - 2003-05-09 00:05:18
|
Update of /cvsroot/jrman/drafts/src/org/jrman/render In directory sc8-pr-cvs1:/tmp/cvs-serv21934/src/org/jrman/render Modified Files: SamplePoint.java Sample.java Micropolygon.java RenderCanvas.java Log Message: More performance optimizations. Index: SamplePoint.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/SamplePoint.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** SamplePoint.java 8 May 2003 05:00:33 -0000 1.7 --- SamplePoint.java 9 May 2003 00:05:13 -0000 1.8 *************** *** 36,42 **** --- 36,47 ---- private Color3f opacity = new Color3f(); + private boolean opaque; + + private float z; + public void init(float x, float y) { point.set(x, y); samples.clear(); + opaque = false; } *************** *** 47,50 **** --- 52,59 ---- if (s.behind(sample)) { samples.add(--i, sample); + if (sample.isOpaque()) { + z = sample.getZ(); + opaque = true; + } return; } else if (s.isOpaque()) *************** *** 52,55 **** --- 61,68 ---- } samples.add(sample); + if (sample.isOpaque()) { + z = sample.getZ(); + opaque = true; + } } *************** *** 75,78 **** --- 88,99 ---- public Point2f getPoint() { return point; + } + + public boolean isOpaque() { + return opaque; + } + + public float getZ() { + return z; } Index: Sample.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/Sample.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Sample.java 6 May 2003 02:15:44 -0000 1.2 --- Sample.java 9 May 2003 00:05:13 -0000 1.3 *************** *** 68,71 **** --- 68,75 ---- opacity.z = opacityBlue; } + + public float getZ() { + return z; + } } Index: Micropolygon.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/Micropolygon.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Micropolygon.java 8 May 2003 05:53:07 -0000 1.8 --- Micropolygon.java 9 May 2003 00:05:13 -0000 1.9 *************** *** 75,78 **** --- 75,80 ---- private float maxY = -Constants.INFINITY; + + private float minZ = Constants.INFINITY; public boolean init( *************** *** 101,107 **** oneOverNz = 1f / cp.z; // get bounds ! addPointToBounds(a.x, a.y); ! addPointToBounds(b.x, b.y); ! addPointToBounds(c.x, c.y); ax = a.x; ay = a.y; --- 103,109 ---- oneOverNz = 1f / cp.z; // get bounds ! addPointToBounds(a.x, a.y, a.z); ! addPointToBounds(b.x, b.y, b.z); ! addPointToBounds(c.x, c.y, c.z); ax = a.x; ay = a.y; *************** *** 120,128 **** } ! private void addPointToBounds(float x, float y) { minX = Math.min(minX, x); maxX = Math.max(maxX, x); minY = Math.min(minY, y); maxY = Math.max(maxY, y); } --- 122,131 ---- } ! private void addPointToBounds(float x, float y, float z) { minX = Math.min(minX, x); maxX = Math.max(maxX, x); minY = Math.min(minY, y); maxY = Math.max(maxY, y); + minZ = Math.min(minZ, z); } *************** *** 144,148 **** boolean found = false; for (int col = minColumn; col <= maxColumn; col++) { ! boolean touched = sample(sampler.getSamplePoint(col, row)); if (found && !touched) break; --- 147,154 ---- boolean found = false; for (int col = minColumn; col <= maxColumn; col++) { ! SamplePoint sp = sampler.getSamplePoint(col, row); ! if (sp.isOpaque() && sp.getZ() < minZ) ! continue; ! boolean touched = sample(sp); if (found && !touched) break; Index: RenderCanvas.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/RenderCanvas.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** RenderCanvas.java 3 May 2003 18:02:48 -0000 1.1 --- RenderCanvas.java 9 May 2003 00:05:13 -0000 1.2 *************** *** 52,56 **** public void paint(Graphics g) { ! g.drawImage(image, 0, 0, this); } --- 52,56 ---- public void paint(Graphics g) { ! g.drawImage(image, 0, 0, null); } |
From: <ma...@us...> - 2003-05-09 00:05:18
|
Update of /cvsroot/jrman/drafts/sampleData In directory sc8-pr-cvs1:/tmp/cvs-serv21934/sampleData Modified Files: ManySpheres.rib Added Files: ManySpheres3.rib Log Message: More performance optimizations. --- NEW FILE: ManySpheres3.rib --- Format 1000 700 1 PixelSamples 4 4 Exposure 1 2.5 Display "ManySpheres.tif" "framebuffer" "rgb" #Display "ManySpheres.tif" "file" "rgb" #Option "limits" "bucketsize" [32 32] "gridsize" [1024] PixelFilter "box" 1 1 Projection "perspective" "fov" 80 ShadingRate 1 Surface "fakedlight" Translate 0 0 60 Rotate 20 0 0 1 Rotate -50 1 0 0 WorldBegin ReadArchive "AllSpheres.rib" TransformBegin Translate 0 50 49 Rotate 90 1 0 0 ReadArchive "AllSpheres.rib" TransformEnd TransformBegin Translate 50 50 0 Rotate 90 0 0 1 ReadArchive "AllSpheres.rib" TransformEnd TransformBegin Translate -50 50 0 Rotate 90 0 0 1 ReadArchive "AllSpheres.rib" TransformEnd Translate 0 7 0 Color 1 1 0 TransformBegin Translate 1 0 2 Rotate 30 0 1 0 Scale 2 2 2 Sphere 2 -.6 .6 360 TransformEnd TransformBegin Translate -1 0 2.5 Rotate 60 1 0 0 Scale 2 2 2 Sphere 2 -.6 .6 360 TransformEnd TransformBegin Translate 6 0 6 Color 1 1 1 Opacity .6 .6 .6 Sphere 2 -2 2 360 TransformEnd TransformBegin Translate -6 0 6 Color 1 1 0 Opacity .6 .6 .6 Sphere 2 -2 2 360 TransformEnd TransformBegin Translate 6 0 -6 Color 0 1 1 Opacity .6 .6 .6 Sphere 2 -2 2 360 TransformEnd TransformBegin Translate -6 0 -6 Color 1 0 1 Opacity .6 .6 .6 Sphere 2 -2 2 360 TransformEnd Opacity 1 1 1 TransformBegin Color .7 .7 1 Translate -20 0 10 ReadArchive "Toruses.rib" TransformEnd TransformBegin Color 1 .7 .3 Translate 10 2 15 Rotate 45 1 1 1 ReadArchive "Toruses.rib" TransformEnd TransformBegin Color 1 .5 .8 Opacity .8 .8 .8 Translate 20 0 -15 Rotate 90 1 0 0 ReadArchive "Toruses.rib" TransformEnd TransformBegin Color 1 .7 .7 Opacity 1 1 1 Translate -15 0 -20 Torus 4 1 0 360 360 TransformEnd TransformBegin Color 1 .4 .1 Opacity 1 1 1 Translate 5 5 -25 Rotate 45 1 .5 1 Cylinder 4 -5 5 360 TransformEnd WorldEnd Index: ManySpheres.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/ManySpheres.rib,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** ManySpheres.rib 8 May 2003 05:00:33 -0000 1.8 --- ManySpheres.rib 9 May 2003 00:05:14 -0000 1.9 *************** *** 1,3 **** ! Format 1200 900 1 PixelSamples 4 4 Exposure 1 2.5 --- 1,3 ---- ! Format 800 600 1 PixelSamples 4 4 Exposure 1 2.5 |
From: <ma...@us...> - 2003-05-08 05:53:12
|
Update of /cvsroot/jrman/drafts/src/org/jrman/render In directory sc8-pr-cvs1:/tmp/cvs-serv7243/src/org/jrman/render Modified Files: Micropolygon.java Log Message: Very small optimizations. Index: Micropolygon.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/Micropolygon.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Micropolygon.java 8 May 2003 05:00:33 -0000 1.7 --- Micropolygon.java 8 May 2003 05:53:07 -0000 1.8 *************** *** 54,58 **** private float ny; ! private float nz; private float colorRed; --- 54,58 ---- private float ny; ! private float oneOverNz; private float colorRed; *************** *** 99,103 **** nx = cp.x; ny = cp.y; ! nz = cp.z; // get bounds addPointToBounds(a.x, a.y); --- 99,103 ---- nx = cp.x; ny = cp.y; ! oneOverNz = 1f / cp.z; // get bounds addPointToBounds(a.x, a.y); *************** *** 141,147 **** int maxRow = Calc.clamp((int) (mpMaxY / sampler.getSampleHeight()), 0, sampler.getHeight() - 1); ! for (int col = minColumn; col <= maxColumn; col++) { boolean found = false; ! for (int row = minRow; row <= maxRow; row++) { boolean touched = sample(sampler.getSamplePoint(col, row)); if (found && !touched) --- 141,147 ---- int maxRow = Calc.clamp((int) (mpMaxY / sampler.getSampleHeight()), 0, sampler.getHeight() - 1); ! for (int row = minRow; row <= maxRow; row++) { boolean found = false; ! for (int col = minColumn; col <= maxColumn; col++) { boolean touched = sample(sampler.getSamplePoint(col, row)); if (found && !touched) *************** *** 156,165 **** if ((ay - by) * (point.x - ax) + (bx - ax) * (point.y - ay) > 0f) return false; - ; if ((by - cy) * (point.x - bx) + (cx - bx) * (point.y - by) > 0f) return false; if ((cy - ay) * (point.x - cx) + (ax - cx) * (point.y - cy) > 0f) return false; ! float z = (nx * (ax - point.x) + ny * (ay - point.y)) / nz + az; sp.addSample( new Sample( --- 156,164 ---- if ((ay - by) * (point.x - ax) + (bx - ax) * (point.y - ay) > 0f) return false; if ((by - cy) * (point.x - bx) + (cx - bx) * (point.y - by) > 0f) return false; if ((cy - ay) * (point.x - cx) + (ax - cx) * (point.y - cy) > 0f) return false; ! float z = (nx * (ax - point.x) + ny * (ay - point.y)) * oneOverNz + az; sp.addSample( new Sample( |
From: <ma...@us...> - 2003-05-08 05:00:49
|
Update of /cvsroot/jrman/drafts/sampleData In directory sc8-pr-cvs1:/tmp/cvs-serv23386/sampleData Modified Files: torus.rib AllSpheres.rib illum2.rib ManySpheres.rib Log Message: Fixed Micropolygon to calculate the right Z. Changed default near clipping plane. Index: torus.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/torus.rib,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** torus.rib 7 May 2003 07:08:28 -0000 1.2 --- torus.rib 8 May 2003 05:00:24 -0000 1.3 *************** *** 2,6 **** PixelSamples 4 4 Exposure 1 2.5 - Clipping 1 1000 Projection "perspective" "fov" 20 Surface "fakedlight" --- 2,5 ---- Index: AllSpheres.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/AllSpheres.rib,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** AllSpheres.rib 7 May 2003 07:08:28 -0000 1.6 --- AllSpheres.rib 8 May 2003 05:00:24 -0000 1.7 *************** *** 1,49999 **** TransformBegin ! Color 0.7516363909242589 0.6574902447925991 0.1546365675780207 Translate -50.0 0 -50.0 Sphere .5 -5 .5 360 TransformEnd TransformBegin ! Color 0.9173950907566873 0.3868976810759951 0.4806802510129693 Translate -49.0 0 -50.0 Sphere .5 -5 .5 360 TransformEnd [...99969 lines suppressed...] TransformEnd TransformBegin ! Color 0.06391462839075401 0.43453697523630896 0.8978128575300919 Translate 46.0 0 49.0 Sphere .5 -5 .5 360 TransformEnd TransformBegin ! Color 0.6800573390504798 0.5570326432653143 0.7865476933462299 Translate 47.0 0 49.0 Sphere .5 -5 .5 360 TransformEnd TransformBegin ! Color 0.7698193137607469 0.8031015030784779 0.940612215091028 Translate 48.0 0 49.0 Sphere .5 -5 .5 360 TransformEnd TransformBegin ! Color 0.5856514319393741 0.12505471274536872 0.22810784961305908 Translate 49.0 0 49.0 Sphere .5 -5 .5 360 Index: illum2.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/illum2.rib,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** illum2.rib 8 Apr 2003 20:02:30 -0000 1.1 --- illum2.rib 8 May 2003 05:00:33 -0000 1.2 *************** *** 3,7 **** # converted by VModel V0.6 (C)2002 Michael Granz - Display "Illum2.tif" "file" "rgba" Format 480 360 -1 --- 3,6 ---- Index: ManySpheres.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/ManySpheres.rib,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** ManySpheres.rib 7 May 2003 07:08:34 -0000 1.7 --- ManySpheres.rib 8 May 2003 05:00:33 -0000 1.8 *************** *** 1,8 **** ! Format 1024 768 1 PixelSamples 4 4 Exposure 1 2.5 Display "ManySpheres.tif" "framebuffer" "rgb" #Display "ManySpheres.tif" "file" "rgb" - Clipping 1 1000 #Option "limits" "bucketsize" [32 32] "gridsize" [1024] PixelFilter "box" 1 1 --- 1,7 ---- ! Format 1200 900 1 PixelSamples 4 4 Exposure 1 2.5 Display "ManySpheres.tif" "framebuffer" "rgb" #Display "ManySpheres.tif" "file" "rgb" #Option "limits" "bucketsize" [32 32] "gridsize" [1024] PixelFilter "box" 1 1 |
From: <ma...@us...> - 2003-05-08 05:00:36
|
Update of /cvsroot/jrman/drafts/src/org/jrman/render In directory sc8-pr-cvs1:/tmp/cvs-serv23386/src/org/jrman/render Modified Files: SamplePoint.java ShaderVariables.java Micropolygon.java Sampler.java Log Message: Fixed Micropolygon to calculate the right Z. Changed default near clipping plane. Index: SamplePoint.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/SamplePoint.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** SamplePoint.java 7 May 2003 07:08:34 -0000 1.6 --- SamplePoint.java 8 May 2003 05:00:33 -0000 1.7 *************** *** 41,48 **** } ! public void sampleMicropolygon(Micropolygon mp) { ! Sample sample = mp.getSample(point); ! if (sample == null) ! return; int i = 0; while (i < samples.size()) { --- 41,45 ---- } ! public void addSample(Sample sample) { int i = 0; while (i < samples.size()) { *************** *** 74,77 **** --- 71,78 ---- ocolor.add(color); } + } + + public Point2f getPoint() { + return point; } Index: ShaderVariables.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/ShaderVariables.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ShaderVariables.java 6 May 2003 20:54:27 -0000 1.3 --- ShaderVariables.java 8 May 2003 05:00:33 -0000 1.4 *************** *** 102,107 **** for (int row = 0; row < rows - 1; row++) { int offset = row * columns + col; ! rh.addToBuckets( ! new Micropolygon( p[offset], p[offset + 1], --- 102,108 ---- for (int row = 0; row < rows - 1; row++) { int offset = row * columns + col; ! Micropolygon mp = new Micropolygon(); ! if (mp ! .init( p[offset], p[offset + 1], *************** *** 112,118 **** o[offset].x, o[offset].y, ! o[offset].z)); ! rh.addToBuckets( ! new Micropolygon( p[offset + columns + 1], p[offset + 1], --- 113,121 ---- o[offset].x, o[offset].y, ! o[offset].z)) ! rh.addToBuckets(mp); ! mp = new Micropolygon(); ! if (mp ! .init( p[offset + columns + 1], p[offset + 1], *************** *** 123,127 **** o[offset + columns + 1].x, o[offset + columns + 1].y, ! o[offset + columns + 1].z)); } } --- 126,131 ---- o[offset + columns + 1].x, o[offset + columns + 1].y, ! o[offset + columns + 1].z)) ! rh.addToBuckets(mp); } } Index: Micropolygon.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/Micropolygon.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Micropolygon.java 7 May 2003 07:08:34 -0000 1.6 --- Micropolygon.java 8 May 2003 05:00:33 -0000 1.7 *************** *** 24,30 **** import javax.vecmath.Vector3f; import org.jrman.util.Constants; ! public class Micropolygon { // These static Vector3f are not thead safe!!! --- 24,31 ---- import javax.vecmath.Vector3f; + import org.jrman.util.Calc; import org.jrman.util.Constants; ! public class Micropolygon { // These static Vector3f are not thead safe!!! *************** *** 38,41 **** --- 39,44 ---- private float ay; + + private float az; private float bx; *************** *** 47,51 **** private float cy; ! private float z; private float colorRed; --- 50,58 ---- private float cy; ! private float nx; ! ! private float ny; ! ! private float nz; private float colorRed; *************** *** 69,73 **** private float maxY = -Constants.INFINITY; ! public Micropolygon( Point3f a, Point3f b, --- 76,80 ---- private float maxY = -Constants.INFINITY; ! public boolean init( Point3f a, Point3f b, *************** *** 83,86 **** --- 90,95 ---- ac.sub(c, a); cp.cross(ab, ac); + if (cp.z == 0f) + return false; if (cp.z > 0) { Point3f tmp = b; *************** *** 88,91 **** --- 97,103 ---- c = tmp; } + nx = cp.x; + ny = cp.y; + nz = cp.z; // get bounds addPointToBounds(a.x, a.y); *************** *** 94,102 **** ax = a.x; ay = a.y; bx = b.x; by = b.y; cx = c.x; cy = c.y; - z = (a.z + b.z + c.z) / 3f; colorRed = cRed; colorGreen = cGreen; --- 106,114 ---- ax = a.x; ay = a.y; + az = a.z; bx = b.x; by = b.y; cx = c.x; cy = c.y; colorRed = cRed; colorGreen = cGreen; *************** *** 105,108 **** --- 117,121 ---- opacityGreen = oGreen; opacityBlue = oBlue; + return true; } *************** *** 114,132 **** } ! public Sample getSample(Point2f point) { if ((ay - by) * (point.x - ax) + (bx - ax) * (point.y - ay) > 0f) ! return null; if ((by - cy) * (point.x - bx) + (cx - bx) * (point.y - by) > 0f) ! return null; if ((cy - ay) * (point.x - cx) + (ax - cx) * (point.y - cy) > 0f) ! return null; ! return new Sample( ! colorRed, ! colorGreen, ! colorBlue, ! opacityRed, ! opacityGreen, ! opacityBlue, ! z); } --- 127,175 ---- } ! public void sample(Sampler sampler) { ! Point2f smin = sampler.getMin(); ! float mpMinX = minX - smin.x; ! float mpMaxX = maxX - smin.x; ! float mpMinY = minY - smin.y; ! float mpMaxY = maxY - smin.y; ! int minColumn = ! Calc.clamp((int) (mpMinX / sampler.getSampleWidth()), 0, sampler.getWidth() - 1); ! int minRow = ! Calc.clamp((int) (mpMinY / sampler.getSampleHeight()), 0, sampler.getHeight() - 1); ! int maxColumn = ! Calc.clamp((int) (mpMaxX / sampler.getSampleWidth()), 0, sampler.getWidth() - 1); ! int maxRow = ! Calc.clamp((int) (mpMaxY / sampler.getSampleHeight()), 0, sampler.getHeight() - 1); ! for (int col = minColumn; col <= maxColumn; col++) { ! boolean found = false; ! for (int row = minRow; row <= maxRow; row++) { ! boolean touched = sample(sampler.getSamplePoint(col, row)); ! if (found && !touched) ! break; ! found = touched; ! } ! } ! } ! ! public boolean sample(SamplePoint sp) { ! Point2f point = sp.getPoint(); if ((ay - by) * (point.x - ax) + (bx - ax) * (point.y - ay) > 0f) ! return false; ! ; if ((by - cy) * (point.x - bx) + (cx - bx) * (point.y - by) > 0f) ! return false; if ((cy - ay) * (point.x - cx) + (ax - cx) * (point.y - cy) > 0f) ! return false; ! float z = (nx * (ax - point.x) + ny * (ay - point.y)) / nz + az; ! sp.addSample( ! new Sample( ! colorRed, ! colorGreen, ! colorBlue, ! opacityRed, ! opacityGreen, ! opacityBlue, ! z)); ! return true; } Index: Sampler.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/Sampler.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Sampler.java 6 May 2003 20:54:27 -0000 1.4 --- Sampler.java 8 May 2003 05:00:33 -0000 1.5 *************** *** 23,31 **** import javax.vecmath.Point2f; - import org.jrman.util.Calc; - public class Sampler { ! Point2f min = new Point2f(); private int width; --- 23,29 ---- import javax.vecmath.Point2f; public class Sampler { ! private Point2f min = new Point2f(); private int width; *************** *** 70,74 **** while (bucket.hasMoreMicropolygons()) { Micropolygon mp = bucket.getNextMicropolygon(); ! sampleMicropolygon(mp); } } --- 68,72 ---- while (bucket.hasMoreMicropolygons()) { Micropolygon mp = bucket.getNextMicropolygon(); ! mp.sample(this); } } *************** *** 80,99 **** } ! private void sampleMicropolygon(Micropolygon mp) { ! float mpMinX = mp.getMinX() - min.x; ! float mpMaxX = mp.getMaxX() - min.x; ! float mpMinY = mp.getMinY() - min.y; ! float mpMaxY = mp.getMaxY() - min.y; ! int minColumn = Calc.clamp((int) (mpMinX / sampleWidth), 0, width - 1); ! int minRow = Calc.clamp((int) (mpMinY / sampleHeight), 0, height - 1); ! int maxColumn = Calc.clamp((int) (mpMaxX / sampleWidth), 0, width - 1); ! int maxRow = Calc.clamp((int) (mpMaxY / sampleHeight), 0, height - 1); ! for (int col = minColumn; col <= maxColumn; col++) ! for (int row = minRow; row <= maxRow; row++) ! getSamplePoint(col, row).sampleMicropolygon(mp); } ! private SamplePoint getSamplePoint(int column, int row) { ! return samplePoints[row * width + column]; } --- 78,103 ---- } ! public SamplePoint getSamplePoint(int column, int row) { ! return samplePoints[row * width + column]; } ! public int getHeight() { ! return height; ! } ! ! public Point2f getMin() { ! return min; ! } ! ! public float getSampleHeight() { ! return sampleHeight; ! } ! ! public float getSampleWidth() { ! return sampleWidth; ! } ! ! public int getWidth() { ! return width; } |
From: <ma...@us...> - 2003-05-08 05:00:36
|
Update of /cvsroot/jrman/drafts/src/org/jrman/geom In directory sc8-pr-cvs1:/tmp/cvs-serv23386/src/org/jrman/geom Modified Files: PerspectiveTransform.java Log Message: Fixed Micropolygon to calculate the right Z. Changed default near clipping plane. Index: PerspectiveTransform.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/PerspectiveTransform.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** PerspectiveTransform.java 2 May 2003 02:07:22 -0000 1.6 --- PerspectiveTransform.java 8 May 2003 05:00:33 -0000 1.7 *************** *** 27,30 **** --- 27,32 ---- public class PerspectiveTransform extends AffineTransform { + + private Point4f hpoint = new Point4f(); public static PerspectiveTransform createWithFov(float fov, float near, float far) { *************** *** 71,75 **** public void transformPoint(Point3f point) { ! Point4f hpoint = new Point4f(point); transformHPoint(hpoint); point.project(hpoint); --- 73,77 ---- public void transformPoint(Point3f point) { ! hpoint.set(point); transformHPoint(hpoint); point.project(hpoint); *************** *** 77,81 **** public void transformPoint(Point3f point, Point3f out) { ! Point4f hpoint = new Point4f(point); transformHPoint(hpoint); out.project(hpoint); --- 79,83 ---- public void transformPoint(Point3f point, Point3f out) { ! hpoint.set(point); transformHPoint(hpoint); out.project(hpoint); |
From: <ma...@us...> - 2003-05-08 05:00:36
|
Update of /cvsroot/jrman/drafts/src/org/jrman/parser In directory sc8-pr-cvs1:/tmp/cvs-serv23386/src/org/jrman/parser Modified Files: Frame.java Log Message: Fixed Micropolygon to calculate the right Z. Changed default near clipping plane. Index: Frame.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/parser/Frame.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Frame.java 6 May 2003 02:15:44 -0000 1.6 --- Frame.java 8 May 2003 05:00:33 -0000 1.7 *************** *** 116,120 **** cropWindow = new Bounds2f(0f, 1f, 0f, 1f); cameraProjection = CameraProjection.ORTHOGRAPHIC; ! nearClipping = Constants.EPSILON; farClipping = Constants.INFINITY; fStop = Constants.INFINITY; --- 116,120 ---- cropWindow = new Bounds2f(0f, 1f, 0f, 1f); cameraProjection = CameraProjection.ORTHOGRAPHIC; ! nearClipping = 1e-2f; farClipping = Constants.INFINITY; fStop = Constants.INFINITY; |
From: <ma...@us...> - 2003-05-07 07:08:51
|
Update of /cvsroot/jrman/drafts/sampleData In directory sc8-pr-cvs1:/tmp/cvs-serv12091/sampleData Modified Files: torus.rib AllSpheres.rib ManySpheres.rib sphere.rib Added Files: ManySpheres2.rib Log Message: Added Cylinder primitive. Fixed Torus bounding box and splitting. More optimizations. --- NEW FILE: ManySpheres2.rib --- Format 320 240 1 PixelSamples 4 4 Exposure 1 2.5 Display "ManySpheres.tif" "framebuffer" "rgb" #Display "ManySpheres.tif" "file" "rgb" Clipping 1 1000 #Option "limits" "bucketsize" [32 32] "gridsize" [1024] PixelFilter "box" 1 1 Projection "perspective" "fov" 50 ShadingRate 1 Surface "fakedlight" Translate 0 0 0 Rotate 0 0 0 0 Rotate 0 0 0 0 WorldBegin ReadArchive "AllSpheres.rib" Translate 0 7 0 Color 1 1 0 TransformBegin Translate 1 0 2 Rotate 30 0 1 0 Scale 2 2 2 Sphere 2 -.6 .6 360 TransformEnd TransformBegin Translate -1 0 2.5 Rotate 60 1 0 0 Scale 2 2 2 Sphere 2 -.6 .6 360 TransformEnd TransformBegin Translate 6 0 6 Color 1 1 1 Opacity .6 .6 .6 Sphere 2 -2 2 360 TransformEnd TransformBegin Translate -6 0 6 Color 1 1 0 Opacity .6 .6 .6 Sphere 2 -2 2 360 TransformEnd TransformBegin Translate 6 0 -6 Color 0 1 1 Opacity .6 .6 .6 Sphere 2 -2 2 360 TransformEnd TransformBegin Translate -6 0 -6 Color 1 0 1 Opacity .6 .6 .6 Sphere 2 -2 2 360 TransformEnd Opacity 1 1 1 TransformBegin Color .7 .7 1 Translate -20 0 10 ReadArchive "Toruses.rib" TransformEnd TransformBegin Color 1 .7 .3 Translate 10 2 15 Rotate 45 1 1 1 ReadArchive "Toruses.rib" TransformEnd TransformBegin Color 1 .5 .8 Opacity .8 .8 .8 Translate 20 0 -15 Rotate 90 1 0 0 ReadArchive "Toruses.rib" TransformEnd TransformBegin Color 1 .7 .7 Opacity 1 1 1 Translate -15 0 -20 Torus 4 1 0 360 360 TransformEnd WorldEnd Index: torus.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/torus.rib,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** torus.rib 5 May 2003 08:29:00 -0000 1.1 --- torus.rib 7 May 2003 07:08:28 -0000 1.2 *************** *** 7,12 **** --- 7,22 ---- Translate 0 0 40 WorldBegin + ShadingRate 1 + AttributeBegin + Translate 0 4 0 + Rotate -45 1 1 1 + Color 1 .2 .2 + Cylinder 2 -2 2 360 + AttributeEnd + AttributeBegin Rotate 60 1 0 0 + Rotate -90 0 0 1 Color .7 .7 1 Torus 4 1 0 360 360 + AttributeEnd WorldEnd Index: AllSpheres.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/AllSpheres.rib,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** AllSpheres.rib 6 May 2003 20:54:27 -0000 1.5 --- AllSpheres.rib 7 May 2003 07:08:28 -0000 1.6 *************** *** 1,49999 **** TransformBegin ! Color 0.35725051092004734 0.8644315924761157 0.11209025407020479 Translate -50.0 0 -50.0 Sphere .5 -5 .5 360 TransformEnd TransformBegin ! Color 0.31682536262019567 0.7874515034708262 0.25900414974998287 Translate -49.0 0 -50.0 Sphere .5 -5 .5 360 TransformEnd [...99969 lines suppressed...] TransformEnd TransformBegin ! Color 0.816077708287556 0.999469248534231 0.9527452058689353 Translate 46.0 0 49.0 Sphere .5 -5 .5 360 TransformEnd TransformBegin ! Color 0.6835831913051594 0.6434962431734536 0.49997656378580346 Translate 47.0 0 49.0 Sphere .5 -5 .5 360 TransformEnd TransformBegin ! Color 0.5850201763671775 0.6838299853399034 0.5390656595575416 Translate 48.0 0 49.0 Sphere .5 -5 .5 360 TransformEnd TransformBegin ! Color 0.7516140509800229 0.915906440098534 0.8417151984982242 Translate 49.0 0 49.0 Sphere .5 -5 .5 360 Index: ManySpheres.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/ManySpheres.rib,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ManySpheres.rib 6 May 2003 20:54:36 -0000 1.6 --- ManySpheres.rib 7 May 2003 07:08:34 -0000 1.7 *************** *** 1,7 **** ! Format 1200 900 1 PixelSamples 4 4 Exposure 1 2.5 Clipping 1 1000 ! #Option "limits" "bucketsize" [64 64] "gridsize" [4096] Projection "perspective" "fov" 50 ShadingRate 1 --- 1,10 ---- ! Format 1024 768 1 PixelSamples 4 4 Exposure 1 2.5 + Display "ManySpheres.tif" "framebuffer" "rgb" + #Display "ManySpheres.tif" "file" "rgb" Clipping 1 1000 ! #Option "limits" "bucketsize" [32 32] "gridsize" [1024] ! PixelFilter "box" 1 1 Projection "perspective" "fov" 50 ShadingRate 1 Index: sphere.rib =================================================================== RCS file: /cvsroot/jrman/drafts/sampleData/sphere.rib,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** sphere.rib 5 May 2003 08:29:07 -0000 1.7 --- sphere.rib 7 May 2003 07:08:34 -0000 1.8 *************** *** 3,7 **** Exposure 1 2.5 Clipping 1 1000 ! #Option "limits" "gridsize" [64] ScreenWindow -.8 .8 -.6 .6 Projection "perspective" "fov" 20 --- 3,7 ---- Exposure 1 2.5 Clipping 1 1000 ! Option "limits" "bucketsize" [24 24] "gridsize" [576] ScreenWindow -.8 .8 -.6 .6 Projection "perspective" "fov" 20 |
From: <ma...@us...> - 2003-05-07 07:08:42
|
Update of /cvsroot/jrman/drafts/src/org/jrman/parser In directory sc8-pr-cvs1:/tmp/cvs-serv12091/src/org/jrman/parser Modified Files: Parser.java Log Message: Added Cylinder primitive. Fixed Torus bounding box and splitting. More optimizations. Index: Parser.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/parser/Parser.java,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** Parser.java 5 May 2003 08:29:08 -0000 1.34 --- Parser.java 7 May 2003 07:08:35 -0000 1.35 *************** *** 56,59 **** --- 56,60 ---- import org.jrman.options.Quantizer; import org.jrman.parser.keywords.KeywordParser; + import org.jrman.primitive.Cylinder; import org.jrman.primitive.Sphere; import org.jrman.primitive.Torus; *************** *** 678,684 **** if (inAreaLightSource) return; ! phiMin = (float) Math.toRadians(phiMin); ! phiMax = (float) Math.toRadians(phiMax); ! thetaMax = (float) Math.toRadians(thetaMax); renderer.addPrimitive( new Torus( --- 679,685 ---- if (inAreaLightSource) return; ! phiMin = (float) Math.toRadians(phiMin); ! phiMax = (float) Math.toRadians(phiMax); ! thetaMax = (float) Math.toRadians(thetaMax); renderer.addPrimitive( new Torus( *************** *** 691,694 **** --- 692,708 ---- parameters, getAttributes())); + } + + public void addCylinder( + float radius, + float zmin, + float zmax, + float thetaMax, + Map parameters) { + if (inAreaLightSource) + return; + thetaMax = (float) Math.toRadians(thetaMax); + renderer.addPrimitive( + new Cylinder(radius, zmin, zmax, 0f, thetaMax, parameters, getAttributes())); } |
From: <ma...@us...> - 2003-05-07 07:08:42
|
Update of /cvsroot/jrman/drafts/src/org/jrman/render In directory sc8-pr-cvs1:/tmp/cvs-serv12091/src/org/jrman/render Modified Files: Bucket.java SamplePoint.java RendererHidden.java Micropolygon.java Log Message: Added Cylinder primitive. Fixed Torus bounding box and splitting. More optimizations. Index: Bucket.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/Bucket.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Bucket.java 2 May 2003 05:02:08 -0000 1.2 --- Bucket.java 7 May 2003 07:08:34 -0000 1.3 *************** *** 20,23 **** --- 20,25 ---- package org.jrman.render; + import java.util.ArrayList; + import java.util.List; import java.util.Stack; *************** *** 26,35 **** public class Bucket { ! private Stack primitives = new Stack(); private Stack micropolygons = new Stack(); public void addPrimitive(Primitive primitive) { ! primitives.push(primitive); } --- 28,45 ---- public class Bucket { ! private List primitives = new ArrayList(); private Stack micropolygons = new Stack(); public void addPrimitive(Primitive primitive) { ! int i = 0; ! while (i < primitives.size()) { ! Primitive p = (Primitive) primitives.get(i++); ! if (p.getDistance() < primitive.getDistance()) { ! primitives.add(--i, primitive); ! return; ! } ! } ! primitives.add(primitive); } *************** *** 39,43 **** public Primitive getNextPrimitive() { ! return (Primitive) primitives.pop(); } --- 49,55 ---- public Primitive getNextPrimitive() { ! Primitive p = (Primitive) primitives.get(primitives.size() - 1); ! primitives.remove(primitives.size() - 1); ! return p; } *************** *** 55,59 **** public void flush() { ! primitives = new Stack(); micropolygons = new Stack(); } --- 67,71 ---- public void flush() { ! primitives = new ArrayList(); micropolygons = new Stack(); } Index: SamplePoint.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/SamplePoint.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** SamplePoint.java 6 May 2003 20:54:27 -0000 1.5 --- SamplePoint.java 7 May 2003 07:08:34 -0000 1.6 *************** *** 51,55 **** samples.add(--i, sample); return; ! } } samples.add(sample); --- 51,56 ---- samples.add(--i, sample); return; ! } else if (s.isOpaque()) ! return; } samples.add(sample); Index: RendererHidden.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/RendererHidden.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** RendererHidden.java 6 May 2003 20:54:27 -0000 1.12 --- RendererHidden.java 7 May 2003 07:08:34 -0000 1.13 *************** *** 117,120 **** --- 117,121 ---- private void placeInBucket(Primitive primitive, BoundingVolume bv) { + primitive.setDistance(bv.getMinZ()); Bounds2f bounds = bv.transform(cameraToRaster).toBounds2f(); if (!bounds.intersects(rasterWindow)) Index: Micropolygon.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/render/Micropolygon.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Micropolygon.java 6 May 2003 20:54:27 -0000 1.5 --- Micropolygon.java 7 May 2003 07:08:34 -0000 1.6 *************** *** 26,30 **** import org.jrman.util.Constants; ! public class Micropolygon { // These static Vector3f are not thead safe!!! --- 26,30 ---- import org.jrman.util.Constants; ! public class Micropolygon { // These static Vector3f are not thead safe!!! |
From: <ma...@us...> - 2003-05-07 07:08:42
|
Update of /cvsroot/jrman/drafts/src/org/jrman/parser/keywords In directory sc8-pr-cvs1:/tmp/cvs-serv12091/src/org/jrman/parser/keywords Modified Files: KeywordCylinder.java Log Message: Added Cylinder primitive. Fixed Torus bounding box and splitting. More optimizations. Index: KeywordCylinder.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/parser/keywords/KeywordCylinder.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** KeywordCylinder.java 7 Apr 2003 08:24:24 -0000 1.2 --- KeywordCylinder.java 7 May 2003 07:08:35 -0000 1.3 *************** *** 20,23 **** --- 20,25 ---- package org.jrman.parser.keywords; + import java.util.Map; + import org.jrman.parser.Tokenizer; *************** *** 35,53 **** // Expect radius match(st, TK_NUMBER); ! // Expect z min match(st, TK_NUMBER); ! // Expect z max match(st, TK_NUMBER); ! // Expect theta max match(st, TK_NUMBER); ! if (array) match(st, TK_RBRACE); - // Expect parameter list ! parseParameterList(st); } --- 37,55 ---- // Expect radius match(st, TK_NUMBER); ! float radius = (float) st.nval; // Expect z min match(st, TK_NUMBER); ! float zmin = (float) st.nval; // Expect z max match(st, TK_NUMBER); ! float zmax = (float) st.nval; // Expect theta max match(st, TK_NUMBER); ! float thetaMax = (float) st.nval; if (array) match(st, TK_RBRACE); // Expect parameter list ! Map parameters = parseParameterList(st); ! parser.addCylinder(radius, zmin, zmax, thetaMax, parameters); } |
From: <ma...@us...> - 2003-05-07 07:08:42
|
Update of /cvsroot/jrman/drafts In directory sc8-pr-cvs1:/tmp/cvs-serv12091 Modified Files: .classpath Log Message: Added Cylinder primitive. Fixed Torus bounding box and splitting. More optimizations. Index: .classpath =================================================================== RCS file: /cvsroot/jrman/drafts/.classpath,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** .classpath 16 Apr 2003 09:19:33 -0000 1.4 --- .classpath 7 May 2003 07:08:35 -0000 1.5 *************** *** 3,8 **** <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="src" path="tests"/> - <classpathentry kind="lib" path="/extra/mago/progs/eclipse/plugins/org.junit_3.8.1/junit.jar"/> <classpathentry kind="output" path="build"/> </classpath> --- 3,6 ---- |
From: <ma...@us...> - 2003-05-07 07:08:42
|
Update of /cvsroot/jrman/drafts/src/org/jrman/geom In directory sc8-pr-cvs1:/tmp/cvs-serv12091/src/org/jrman/geom Modified Files: ConvexHull3f.java BoundingVolume.java Bounds3f.java Log Message: Added Cylinder primitive. Fixed Torus bounding box and splitting. More optimizations. Index: ConvexHull3f.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/ConvexHull3f.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** ConvexHull3f.java 3 May 2003 18:02:48 -0000 1.7 --- ConvexHull3f.java 7 May 2003 07:08:35 -0000 1.8 *************** *** 27,40 **** --- 27,46 ---- import javax.vecmath.Point4f; + import org.jrman.util.Constants; + public class ConvexHull3f implements BoundingVolume { private Collection points = new ArrayList(); + + private float minZ = Constants.INFINITY; public void addPoint(Point3f point) { points.add(new Point3f(point)); + minZ = Math.min(minZ, point.z); } public void addPoint(float x, float y, float z) { points.add(new Point3f(x, y, z)); + minZ = Math.min(minZ, z); } *************** *** 43,46 **** --- 49,57 ---- p.project(hpoint); points.add(p); + minZ = Math.min(minZ, p.z); + } + + public float getMinZ() { + return minZ; } Index: BoundingVolume.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/BoundingVolume.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** BoundingVolume.java 3 May 2003 18:02:47 -0000 1.2 --- BoundingVolume.java 7 May 2003 07:08:35 -0000 1.3 *************** *** 29,32 **** Bounds2f toBounds2f(); ! } --- 29,33 ---- Bounds2f toBounds2f(); ! ! float getMinZ(); } Index: Bounds3f.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/geom/Bounds3f.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Bounds3f.java 3 May 2003 18:02:48 -0000 1.7 --- Bounds3f.java 7 May 2003 07:08:35 -0000 1.8 *************** *** 58,61 **** --- 58,65 ---- max = new Point3f(newMax); } + + public float getMinZ() { + return min.z; + } public Bounds2f toBounds2f() { |
From: <ma...@us...> - 2003-05-07 07:08:42
|
Update of /cvsroot/jrman/drafts/src/org/jrman/primitive In directory sc8-pr-cvs1:/tmp/cvs-serv12091/src/org/jrman/primitive Modified Files: Quadric.java Torus.java Primitive.java Added Files: Cylinder.java Log Message: Added Cylinder primitive. Fixed Torus bounding box and splitting. More optimizations. --- NEW FILE: Cylinder.java --- /* Cylinder.java Copyright (C) 2003 Gerardo Horvilleur Martinez This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.jrman.primitive; import java.util.Map; import javax.vecmath.Point3f; import javax.vecmath.Vector3f; import org.jrman.attributes.Attributes; import org.jrman.geom.BoundingVolume; import org.jrman.geom.Bounds3f; import org.jrman.grid.Grid; import org.jrman.grid.Point3fGrid; import org.jrman.grid.Vector3fGrid; import org.jrman.render.ShaderVariables; public class Cylinder extends Quadric { float radius; float zmin; float zmax; float thetaMin; float thetaMax; public Cylinder( float radius, float zmin, float zmax, float thetaMin, float thetaMax, Map parameters, Attributes attributes) { super(parameters, attributes); this.radius = radius; this.zmin = zmin; this.zmax = zmax; this.thetaMin = thetaMin; this.thetaMax = thetaMax; } protected BoundingVolume internalGetBoundingVolume() { float cosThetaMin = (float) Math.cos(thetaMin); float sinThetaMin = (float) Math.sin(thetaMin); float cosThetaMax = (float) Math.cos(thetaMax); float sinThetaMax = (float) Math.sin(thetaMax); float xMin; float xMax = cosThetaMin * radius; xMax = Math.max(xMax, cosThetaMax * radius); float yMin; float yMax; if (thetaMin < Math.PI && thetaMax > Math.PI) xMin = -radius; else { xMin = cosThetaMin * radius; xMin = Math.min(xMin, cosThetaMax * radius); } if (thetaMin < Math.PI / 2 && thetaMax > Math.PI / 2) yMax = radius; else { yMax = sinThetaMin * radius; yMax = Math.max(yMax, sinThetaMax * radius); } if (thetaMin < Math.PI * 3 / 2 && thetaMax > Math.PI * 3 / 2) yMin = -radius; else { yMin = sinThetaMin * radius; yMin = Math.min(yMin, sinThetaMax * radius); } Bounds3f result = new Bounds3f(xMin, xMax, yMin, yMax, zmin, zmax); return result; } public Primitive[] split() { Primitive[] result = new Primitive[2]; if ((thetaMax - thetaMin) * radius > zmax - zmin) { result[0] = new Cylinder( radius, zmin, zmax, thetaMin, (thetaMin + thetaMax) / 2f, interpolateParameters(0f, .5f, 0f, 1f), attributes); result[1] = new Cylinder( radius, zmin, zmax, (thetaMin + thetaMax) / 2f, thetaMax, interpolateParameters(.5f, 1f, 0f, 1f), attributes); } else { result[0] = new Cylinder( radius, zmin, (zmin + zmax) / 2f, thetaMin, thetaMax, interpolateParameters(0f, 1f, 0f, .5f), attributes); result[1] = new Cylinder( radius, (zmin + zmax) / 2f, zmax, thetaMin, thetaMax, interpolateParameters(0f, 1f, .5f, 1f), attributes); } return result; } protected void dice_P(ShaderVariables shaderVariables) { int uSize = Grid.getUSize(); int vSize = Grid.getVSize(); float thetaDelta = (thetaMax - thetaMin) / (uSize - 1); float zDelta = (zmax - zmin) / (vSize - 1); Point3fGrid P = shaderVariables.P; Point3f tmp = new Point3f(); float theta = thetaMin; for (int u = 0; u < uSize; u++) { float cosTheta = (float) Math.cos(theta); float sinTheta = (float) Math.sin(theta); float z = zmin; for (int v = 0; v < vSize; v++) { tmp.x = radius * cosTheta; tmp.y = radius * sinTheta; tmp.z = z; P.set(u, v, tmp); z += zDelta; } theta += thetaDelta; } } protected void dice_Ng(ShaderVariables shaderVariables) { int uSize = Grid.getUSize(); int vSize = Grid.getVSize(); float thetaDelta = (thetaMax - thetaMin) / (uSize - 1); float zDelta = (zmax - zmin) / (vSize - 1); Vector3fGrid Ng = shaderVariables.Ng; Vector3f tmp = new Vector3f(); float theta = thetaMin; tmp.x = 0f; tmp.y = 0f; for (int u = 0; u < uSize; u++) { float z = zmin; for (int v = 0; v < vSize; v++) { tmp.z = z; Ng.set(u, v, tmp); z += zDelta; } theta += thetaDelta; } Ng.sub(shaderVariables.P, Ng); } } Index: Quadric.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/primitive/Quadric.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Quadric.java 6 May 2003 02:15:45 -0000 1.8 --- Quadric.java 7 May 2003 07:08:35 -0000 1.9 *************** *** 427,435 **** float height = max.y - min.y; boolean ready = width * height <= gridSize * attributes.getShadingRate(); float idealSize = (width * height) / attributes.getShadingRate(); idealSize = Calc.clamp(idealSize, 36f, gridSize); int side = (int) (Math.ceil(Math.sqrt(idealSize))) + 1; Grid.setSize(side, side); ! return ready; } --- 427,437 ---- float height = max.y - min.y; boolean ready = width * height <= gridSize * attributes.getShadingRate(); + if (!ready) + return false; float idealSize = (width * height) / attributes.getShadingRate(); idealSize = Calc.clamp(idealSize, 36f, gridSize); int side = (int) (Math.ceil(Math.sqrt(idealSize))) + 1; Grid.setSize(side, side); ! return true; } Index: Torus.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/primitive/Torus.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Torus.java 5 May 2003 08:29:08 -0000 1.1 --- Torus.java 7 May 2003 07:08:35 -0000 1.2 *************** *** 80,84 **** float cosPhiMinR = (float) Math.cos(phiMin) * minorRadius; float cosPhiMaxR = (float) Math.cos(phiMax) * minorRadius; ! float rMin = majorRadius + Math.min(cosPhiMinR, cosPhiMaxR); float rMax = majorRadius + Math.max(cosPhiMinR, cosPhiMaxR); float cosThetaMin = (float) Math.cos(thetaMin); --- 80,88 ---- float cosPhiMinR = (float) Math.cos(phiMin) * minorRadius; float cosPhiMaxR = (float) Math.cos(phiMax) * minorRadius; ! float rMin; ! if (phiMin < Math.PI && phiMax > Math.PI) ! rMin = majorRadius - minorRadius; ! else ! rMin = majorRadius + Math.min(cosPhiMinR, cosPhiMaxR); float rMax = majorRadius + Math.max(cosPhiMinR, cosPhiMaxR); float cosThetaMin = (float) Math.cos(thetaMin); *************** *** 123,127 **** public Primitive[] split() { Primitive[] result = new Primitive[2]; ! if (thetaMax - thetaMin > phiMax - phiMin) { result[0] = new Torus( --- 127,131 ---- public Primitive[] split() { Primitive[] result = new Primitive[2]; ! if ((thetaMax - thetaMin) * majorRadius > (phiMax - phiMin) * minorRadius) { result[0] = new Torus( Index: Primitive.java =================================================================== RCS file: /cvsroot/jrman/drafts/src/org/jrman/primitive/Primitive.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Primitive.java 2 May 2003 05:02:08 -0000 1.6 --- Primitive.java 7 May 2003 07:08:35 -0000 1.7 *************** *** 37,40 **** --- 37,42 ---- protected BoundingVolume boundingVolume; + protected float distance; + protected Primitive(Map parameters, Attributes attributes) { this.parameters = parameters; *************** *** 62,65 **** --- 64,75 ---- public void setRasterBounds(Bounds2f bounds) { this.rasterBounds = bounds; + } + + public void setDistance(float f) { + distance = f; + } + + public float getDistance() { + return distance; } |