.. | .. |
---|
228 | 228 | void PushMatrix(double[][] matrix, int count) |
---|
229 | 229 | { |
---|
230 | 230 | matrixdepth++; |
---|
231 | | - // GraphreeD.tracein(matrix); |
---|
| 231 | + // GrafreeD.tracein(matrix); |
---|
232 | 232 | if (matrix == null) |
---|
233 | 233 | return; // Identity |
---|
234 | 234 | |
---|
.. | .. |
---|
253 | 253 | |
---|
254 | 254 | void PushMatrix(double[][] matrix) |
---|
255 | 255 | { |
---|
256 | | - // GraphreeD.tracein(matrix); |
---|
| 256 | + // GrafreeD.tracein(matrix); |
---|
257 | 257 | PushMatrix(matrix,1); |
---|
258 | 258 | } |
---|
259 | 259 | |
---|
260 | 260 | void PushMatrix() |
---|
261 | 261 | { |
---|
262 | | - // GraphreeD.tracein(null); |
---|
| 262 | + // GrafreeD.tracein(null); |
---|
263 | 263 | if (matrixdepth++ < MAXSTACK - 1) |
---|
264 | 264 | { |
---|
265 | 265 | currentGL.glPushMatrix(); |
---|
.. | .. |
---|
274 | 274 | { |
---|
275 | 275 | --matrixdepth; |
---|
276 | 276 | |
---|
277 | | - // GraphreeD.traceout(inverse); |
---|
| 277 | + // GrafreeD.traceout(inverse); |
---|
278 | 278 | if (inverse == null) |
---|
279 | 279 | return; // Identity |
---|
280 | 280 | |
---|
.. | .. |
---|
292 | 292 | |
---|
293 | 293 | void PopMatrix() |
---|
294 | 294 | { |
---|
295 | | - // GraphreeD.traceout(null); |
---|
| 295 | + // GrafreeD.traceout(null); |
---|
296 | 296 | // inverse == null?? |
---|
297 | 297 | if (--matrixdepth < MAXSTACK - 1) |
---|
298 | 298 | { |
---|
.. | .. |
---|
491 | 491 | System.err.println("LIVE = " + isLIVE()); |
---|
492 | 492 | |
---|
493 | 493 | if (!isLIVE()) // save sound |
---|
494 | | - GraphreeD.savesound = true; // wav.save(); |
---|
| 494 | + GrafreeD.savesound = true; // wav.save(); |
---|
495 | 495 | // else |
---|
496 | 496 | repaint(); // start loop // may 2013 |
---|
497 | 497 | } |
---|
.. | .. |
---|
768 | 768 | class CacheTexture |
---|
769 | 769 | { |
---|
770 | 770 | com.sun.opengl.util.texture.Texture texture; |
---|
| 771 | + com.sun.opengl.util.texture.TextureData texturedata; |
---|
| 772 | + |
---|
771 | 773 | int resolution; |
---|
772 | 774 | |
---|
773 | 775 | CacheTexture(com.sun.opengl.util.texture.Texture tex, int res) |
---|
.. | .. |
---|
1998 | 2000 | */ |
---|
1999 | 2001 | TextureData ReduceTexture(TextureData texturedata, int resolution) // String name) |
---|
2000 | 2002 | { |
---|
| 2003 | + int pixelformat = texturedata.getPixelFormat(); |
---|
| 2004 | + |
---|
2001 | 2005 | int stride = 1; |
---|
2002 | | - if (texturedata.getPixelFormat() == GetGL().GL_RGB || texturedata.getPixelFormat() == GetGL().GL_BGR) // || texturedata.getPixelFormat() == GL.GL_LUMINANCE) |
---|
| 2006 | + if (pixelformat == GetGL().GL_RGB || pixelformat == GetGL().GL_BGR) // || texturedata.getPixelFormat() == GL.GL_LUMINANCE) |
---|
2003 | 2007 | stride = 3; |
---|
2004 | | - if (texturedata.getPixelFormat() == GetGL().GL_RGBA || texturedata.getPixelFormat() == GetGL().GL_BGRA) // || texturedata.getPixelFormat() == GL.GL_LUMINANCE_ALPHA) |
---|
| 2008 | + if (pixelformat == GetGL().GL_RGBA || pixelformat == GetGL().GL_BGRA) // || texturedata.getPixelFormat() == GL.GL_LUMINANCE_ALPHA) |
---|
2005 | 2009 | stride = 4; |
---|
2006 | 2010 | |
---|
2007 | 2011 | int width = texturedata.getWidth(); |
---|
.. | .. |
---|
6331 | 6335 | { |
---|
6332 | 6336 | bumpdepth--; |
---|
6333 | 6337 | |
---|
6334 | | - // GraphreeD.trace("POP " + tex + "(" + pigmentdepth + ")" + " : " + pigmentstack[pigmentdepth] + " vs " + texture); |
---|
| 6338 | + // GrafreeD.trace("POP " + tex + "(" + pigmentdepth + ")" + " : " + pigmentstack[pigmentdepth] + " vs " + texture); |
---|
6335 | 6339 | if (bumpstack[bumpdepth] != (texture!=null?texture.texture:null)) |
---|
6336 | 6340 | { |
---|
6337 | 6341 | // assert (bumpstack[bumpdepth] == texture); |
---|
.. | .. |
---|
6361 | 6365 | { |
---|
6362 | 6366 | pigmentdepth--; |
---|
6363 | 6367 | |
---|
6364 | | - // GraphreeD.trace("POP " + tex + "(" + pigmentdepth + ")" + " : " + pigmentstack[pigmentdepth] + " vs " + texture); |
---|
| 6368 | + // GrafreeD.trace("POP " + tex + "(" + pigmentdepth + ")" + " : " + pigmentstack[pigmentdepth] + " vs " + texture); |
---|
6365 | 6369 | if (pigmentstack[pigmentdepth] != (texture!=null?texture.texture:null)) |
---|
6366 | 6370 | { |
---|
6367 | 6371 | // assert (pigmentstack[pigmentdepth] == texture); |
---|
.. | .. |
---|
6451 | 6455 | return; // true; |
---|
6452 | 6456 | } |
---|
6453 | 6457 | |
---|
6454 | | - com.sun.opengl.util.texture.Texture GetTexture(String tex, boolean bump, int resolution) |
---|
| 6458 | + CacheTexture GetCacheTexture(String tex, boolean bump, int resolution) |
---|
6455 | 6459 | { |
---|
6456 | 6460 | CacheTexture/*com.sun.opengl.util.texture.Texture*/ texture = null; |
---|
6457 | 6461 | |
---|
.. | .. |
---|
6665 | 6669 | thetex.texture.dispose(); |
---|
6666 | 6670 | textures.remove(texname); |
---|
6667 | 6671 | } |
---|
| 6672 | + |
---|
| 6673 | + texture.texturedata = texturedata; |
---|
6668 | 6674 | textures.put(texname, texture); |
---|
6669 | 6675 | |
---|
6670 | 6676 | // newtex = true; |
---|
.. | .. |
---|
6681 | 6687 | } |
---|
6682 | 6688 | } |
---|
6683 | 6689 | |
---|
| 6690 | + return texture; |
---|
| 6691 | + } |
---|
| 6692 | + |
---|
| 6693 | + com.sun.opengl.util.texture.Texture GetTexture(String tex, boolean bump, int resolution) |
---|
| 6694 | + { |
---|
| 6695 | + CacheTexture texture = GetCacheTexture(tex, bump, resolution); |
---|
| 6696 | + |
---|
6684 | 6697 | if (bump) |
---|
6685 | 6698 | { |
---|
6686 | | - // GraphreeD.trace("PUSH BUMP " + tex + "(" + bumpdepth + ")" + " : " + texture); |
---|
| 6699 | + // GrafreeD.trace("PUSH BUMP " + tex + "(" + bumpdepth + ")" + " : " + texture); |
---|
6687 | 6700 | bumpstack[bumpdepth++] = texture!=null?texture.texture:null; |
---|
6688 | 6701 | } |
---|
6689 | 6702 | else |
---|
6690 | 6703 | { |
---|
6691 | | - // GraphreeD.trace("PUSH PIGMENT " + tex + "(" + pigmentdepth + ")" + " : " + texture); |
---|
| 6704 | + // GrafreeD.trace("PUSH PIGMENT " + tex + "(" + pigmentdepth + ")" + " : " + texture); |
---|
6692 | 6705 | pigmentstack[pigmentdepth++] = texture!=null?texture.texture:null; |
---|
6693 | 6706 | } |
---|
6694 | 6707 | |
---|
6695 | 6708 | return texture!=null?texture.texture:null; |
---|
| 6709 | + } |
---|
| 6710 | + |
---|
| 6711 | + com.sun.opengl.util.texture.TextureData GetTextureData(String tex, boolean bump, int resolution) |
---|
| 6712 | + { |
---|
| 6713 | + CacheTexture texture = GetCacheTexture(tex, bump, resolution); |
---|
| 6714 | + |
---|
| 6715 | + return texture!=null?texture.texturedata:null; |
---|
6696 | 6716 | } |
---|
6697 | 6717 | |
---|
6698 | 6718 | boolean BindTexture(String tex, boolean bump, int resolution) |
---|
.. | .. |
---|
7424 | 7444 | //gl.glFrustum(-0.5*scale, 0.5*scale, -0.5*scale, 0.5*scale, 1, 100); |
---|
7425 | 7445 | //glu.gluPerspective(lightshaper_fovy, 1, lightshaper_zNear, lightshaper_zFar); |
---|
7426 | 7446 | double scale = lightCamera.SCALE / lightCamera.Distance(); |
---|
| 7447 | +// PATCH FILLE AUX JEANS |
---|
| 7448 | + //scale *= lightCamera.shaper_fovy / 25; |
---|
7427 | 7449 | gl.glScaled(2 * scale, 2 * scale, -scale); |
---|
7428 | 7450 | gl.glTranslated(0, 0, lightCamera.DECAL); |
---|
7429 | 7451 | |
---|
.. | .. |
---|
7572 | 7594 | |
---|
7573 | 7595 | float[] options1 = new float[]{1000, 0.00001f, 20, 0, 0}; // focus, aperture, Shadow blur, aniso, anisoV |
---|
7574 | 7596 | float[] options2 = new float[]{0, 1, 0, 0}; // fog density, intensity, elevation |
---|
7575 | | - float[] options3 = new float[]{1, 1, 1, 1}; // fog color. image intensity |
---|
| 7597 | + float[] options3 = new float[]{1, 1, 1, 0}; // fog color |
---|
| 7598 | + float[] options4 = new float[]{1, 0, 1, 0}; // image intensity, subsurface, lightsheen |
---|
7576 | 7599 | |
---|
7577 | 7600 | static int imagecount = 0; // movie generation |
---|
7578 | 7601 | |
---|
.. | .. |
---|
7610 | 7633 | |
---|
7611 | 7634 | //System.out.println("start frame"); |
---|
7612 | 7635 | gl.glClear(gl.GL_ACCUM_BUFFER_BIT); |
---|
7613 | | - for (jitter = 0; jitter < ACSIZE; jitter++) //, GraphreeD.wav.cursor += LIVE ? 735 : 0) |
---|
| 7636 | + for (jitter = 0; jitter < ACSIZE; jitter++) //, GrafreeD.wav.cursor += LIVE ? 735 : 0) |
---|
7614 | 7637 | { |
---|
7615 | 7638 | framecount++; |
---|
7616 | 7639 | |
---|
7617 | 7640 | if (CameraPane.tickcount > 0) |
---|
7618 | 7641 | CameraPane.tickcount--; |
---|
7619 | 7642 | |
---|
7620 | | -// GraphreeD.wav.cursor += 735; // 44100 Hz / 120 Hz * 2 (for 16 bits) |
---|
| 7643 | +// GrafreeD.wav.cursor += 735; // 44100 Hz / 120 Hz * 2 (for 16 bits) |
---|
7621 | 7644 | // restartframe = true; |
---|
7622 | 7645 | if (options1[2] > 100 && (jitter%2==0)) |
---|
7623 | 7646 | { |
---|
.. | .. |
---|
7672 | 7695 | |
---|
7673 | 7696 | if (renderCamera != lightCamera) |
---|
7674 | 7697 | for (int count = parentcam.GetTransformCount(); --count>=0;) |
---|
7675 | | - LA.matConcat(parentcam.toParent, matrix, matrix); |
---|
| 7698 | + LA.matConcat(matrix, parentcam.toParent, matrix); |
---|
7676 | 7699 | |
---|
7677 | 7700 | // LA.matConcat(renderCamera.toScreen, renderCamera.toParent, matrix); |
---|
7678 | 7701 | |
---|
.. | .. |
---|
7688 | 7711 | |
---|
7689 | 7712 | if (renderCamera != lightCamera) |
---|
7690 | 7713 | for (int count = parentcam.GetTransformCount(); --count>=0;) |
---|
7691 | | - LA.matConcat(matrix, parentcam.fromParent, matrix); |
---|
| 7714 | + LA.matConcat(parentcam.fromParent, matrix, matrix); |
---|
7692 | 7715 | |
---|
7693 | 7716 | // LA.matConcat(renderCamera.fromParent, renderCamera.fromScreen, matrix); |
---|
7694 | 7717 | |
---|
.. | .. |
---|
7905 | 7928 | |
---|
7906 | 7929 | if (!BOXMODE) |
---|
7907 | 7930 | { |
---|
7908 | | - System.out.println("image: " + fullname + " (" + (GraphreeD.wav.cursor / 735 / 4) + ")"); |
---|
| 7931 | + System.out.println("image: " + fullname + " (wav cursor=" + (GrafreeD.wav.cursor / 735 / 4) + ")"); |
---|
7909 | 7932 | } |
---|
7910 | 7933 | |
---|
7911 | 7934 | if (!BOXMODE) |
---|
.. | .. |
---|
7933 | 7956 | { |
---|
7934 | 7957 | if (ACSIZE > 1) |
---|
7935 | 7958 | { |
---|
7936 | | - // System.err.println("image #" + (GraphreeD.wav.cursor / 735 / 4)); |
---|
| 7959 | + // System.err.println("image #" + (GrafreeD.wav.cursor / 735 / 4)); |
---|
7937 | 7960 | } |
---|
7938 | 7961 | } |
---|
7939 | 7962 | |
---|
.. | .. |
---|
7943 | 7966 | ABORTED = false; |
---|
7944 | 7967 | } |
---|
7945 | 7968 | else |
---|
7946 | | - GraphreeD.wav.cursor += 735 * ACSIZE; |
---|
| 7969 | + GrafreeD.wav.cursor += 735 * ACSIZE; |
---|
7947 | 7970 | |
---|
7948 | 7971 | if (false) |
---|
7949 | 7972 | { |
---|
.. | .. |
---|
8613 | 8636 | |
---|
8614 | 8637 | public void display(GLAutoDrawable drawable) |
---|
8615 | 8638 | { |
---|
8616 | | - if (GraphreeD.savesound && GraphreeD.hassound) |
---|
| 8639 | + if (GrafreeD.savesound && GrafreeD.hassound) |
---|
8617 | 8640 | { |
---|
8618 | | - GraphreeD.wav.save(); |
---|
8619 | | - GraphreeD.savesound = false; |
---|
8620 | | - GraphreeD.hassound = false; |
---|
| 8641 | + GrafreeD.wav.save(); |
---|
| 8642 | + GrafreeD.savesound = false; |
---|
| 8643 | + GrafreeD.hassound = false; |
---|
8621 | 8644 | } |
---|
8622 | 8645 | // if (DEBUG_SELECTION) |
---|
8623 | 8646 | // { |
---|
.. | .. |
---|
8747 | 8770 | Object3D theobject = object; |
---|
8748 | 8771 | Object3D theparent = object.parent; |
---|
8749 | 8772 | object.parent = null; |
---|
8750 | | - object = (Object3D)GraphreeD.clone(object); |
---|
| 8773 | + object = (Object3D)GrafreeD.clone(object); |
---|
8751 | 8774 | object.Stripify(); |
---|
8752 | 8775 | if (theobject.selection == null || theobject.selection.Size() == 0) |
---|
8753 | 8776 | theobject.PreprocessOcclusion(this); |
---|
.. | .. |
---|
8766 | 8789 | if (!IsFrozen()) |
---|
8767 | 8790 | { |
---|
8768 | 8791 | // dec 2012 |
---|
8769 | | - if (!(!flash && !lightMode && drawMode == DEFAULT && ANTIALIAS > 0)) |
---|
| 8792 | + if (!ambientOcclusion && !(!flash && !lightMode && drawMode == DEFAULT && ANTIALIAS > 0)) |
---|
8770 | 8793 | { |
---|
8771 | 8794 | framecount++; |
---|
8772 | 8795 | shadowbuffer.display(); |
---|
.. | .. |
---|
8894 | 8917 | // if (parentcam != renderCamera) // not a light |
---|
8895 | 8918 | if (cam != lightCamera) |
---|
8896 | 8919 | for (int count = parentcam.GetTransformCount(); --count>=0;) |
---|
8897 | | - LA.matConcat(parentcam.toParent, matrix, matrix); |
---|
| 8920 | + LA.matConcat(matrix, parentcam.toParent, matrix); |
---|
8898 | 8921 | |
---|
8899 | 8922 | for (int j = 0; j < 4; j++) |
---|
8900 | 8923 | { |
---|
.. | .. |
---|
8909 | 8932 | // if (parentcam != renderCamera) // not a light |
---|
8910 | 8933 | if (cam != lightCamera) |
---|
8911 | 8934 | for (int count = parentcam.GetTransformCount(); --count>=0;) |
---|
8912 | | - LA.matConcat(matrix, parentcam.fromParent, matrix); |
---|
| 8935 | + LA.matConcat(parentcam.fromParent, matrix, matrix); |
---|
8913 | 8936 | |
---|
8914 | 8937 | //LA.matConcat(cam.fromScreen, parentcam.fromParent, matrix); |
---|
8915 | 8938 | |
---|
.. | .. |
---|
9071 | 9094 | //gl.glFrustum(-0.5*scale, 0.5*scale, -0.5*scale, 0.5*scale, 1, 100); |
---|
9072 | 9095 | //glu.gluPerspective(lightshaper_fovy, 1, lightshaper_zNear, lightshaper_zFar); |
---|
9073 | 9096 | double scale = lightCamera.SCALE / lightCamera.Distance(); |
---|
| 9097 | +// PATCH FILLE AUX JEANS |
---|
| 9098 | + //scale *= lightCamera.shaper_fovy / 25; |
---|
9074 | 9099 | gl.glScaled(2 * scale, 2 * scale, -scale); |
---|
9075 | 9100 | gl.glTranslated(0, 0, lightCamera.DECAL); |
---|
9076 | 9101 | |
---|
.. | .. |
---|
9210 | 9235 | { |
---|
9211 | 9236 | //glu.gluPerspective(lightshaper_fovy, 1, lightshaper_zNear, lightshaper_zFar); |
---|
9212 | 9237 | double scale = lightCamera.SCALE / lightCamera.Distance(); |
---|
| 9238 | +// PATCH FILLE AUX JEANS |
---|
| 9239 | + //scale *= lightCamera.shaper_fovy / 25; |
---|
9213 | 9240 | gl.glScaled(2 * scale, 2 * scale, -scale); |
---|
9214 | 9241 | gl.glTranslated(0, 0, lightCamera.DECAL); |
---|
9215 | 9242 | //System.out.println("DECAL = " + LIGHTDECAL + "; SCALE = " + LIGHTSCALE); |
---|
.. | .. |
---|
9361 | 9388 | |
---|
9362 | 9389 | gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 63, options2, 0); |
---|
9363 | 9390 | gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 62, options3, 0); |
---|
| 9391 | + gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 61, options4, 0); |
---|
9364 | 9392 | |
---|
9365 | 9393 | options2[0] *= renderCamera.Distance(); |
---|
9366 | 9394 | |
---|
.. | .. |
---|
9642 | 9670 | e.printStackTrace(); |
---|
9643 | 9671 | } |
---|
9644 | 9672 | |
---|
9645 | | - if (GraphreeD.RENDERME > 0) |
---|
9646 | | - GraphreeD.RENDERME--; // mechante magouille |
---|
| 9673 | + if (GrafreeD.RENDERME > 0) |
---|
| 9674 | + GrafreeD.RENDERME--; // mechante magouille |
---|
9647 | 9675 | |
---|
9648 | 9676 | ONESTEP = false; |
---|
9649 | 9677 | } |
---|
.. | .. |
---|
9716 | 9744 | BindTextures(DEFAULT_TEXTURES, 2); |
---|
9717 | 9745 | } |
---|
9718 | 9746 | //System.out.println("--> " + stackdepth); |
---|
9719 | | -// GraphreeD.traceon(); |
---|
| 9747 | +// GrafreeD.traceon(); |
---|
9720 | 9748 | |
---|
9721 | 9749 | // DRAW |
---|
9722 | 9750 | object.draw(this, /*(Composite)*/ object, false, false); |
---|
.. | .. |
---|
9732 | 9760 | selectedpoint.radius = radius; |
---|
9733 | 9761 | selectedpoint.recalculate(); |
---|
9734 | 9762 | selectedpoint.material = new cMaterial(); |
---|
9735 | | - selectedpoint.material.color = 0.25f; |
---|
| 9763 | + selectedpoint.material.color = 0.15f; // Yellow |
---|
9736 | 9764 | selectedpoint.material.modulation = 0.75f; |
---|
9737 | 9765 | |
---|
9738 | | - debugpoint.radius = radius; |
---|
9739 | | - debugpoint.recalculate(); |
---|
9740 | | - debugpoint.material = new cMaterial(); |
---|
9741 | | - debugpoint.material.color = 0.25f; |
---|
9742 | | - debugpoint.material.modulation = 0.75f; |
---|
| 9766 | + debugpointG.radius = radius; |
---|
| 9767 | + debugpointG.recalculate(); |
---|
| 9768 | + debugpointG.material = new cMaterial(); |
---|
| 9769 | + debugpointG.material.color = 0.25f; // Green |
---|
| 9770 | + debugpointG.material.modulation = 0.75f; |
---|
9743 | 9771 | |
---|
9744 | | - debugpoint2.radius = radius; |
---|
9745 | | - debugpoint2.recalculate(); |
---|
9746 | | - debugpoint2.material = new cMaterial(); |
---|
9747 | | - debugpoint2.material.color = 0.75f; |
---|
9748 | | - debugpoint2.material.modulation = 0.75f; |
---|
| 9772 | + debugpointP.radius = radius; |
---|
| 9773 | + debugpointP.recalculate(); |
---|
| 9774 | + debugpointP.material = new cMaterial(); |
---|
| 9775 | + debugpointP.material.color = 0.75f; // Purple |
---|
| 9776 | + debugpointP.material.modulation = 0.75f; |
---|
| 9777 | + |
---|
| 9778 | + debugpointC.radius = radius; |
---|
| 9779 | + debugpointC.recalculate(); |
---|
| 9780 | + debugpointC.material = new cMaterial(); |
---|
| 9781 | + debugpointC.material.color = 0.5f; // Cyan |
---|
| 9782 | + debugpointC.material.modulation = 0.75f; |
---|
| 9783 | + |
---|
| 9784 | + debugpointR.radius = radius; |
---|
| 9785 | + debugpointR.recalculate(); |
---|
| 9786 | + debugpointR.material = new cMaterial(); |
---|
| 9787 | + debugpointR.material.color = 0f; // Red |
---|
| 9788 | + debugpointR.material.modulation = 0.75f; |
---|
9749 | 9789 | |
---|
9750 | 9790 | InitPoints(radius); |
---|
9751 | 9791 | } |
---|
9752 | 9792 | selectedpoint.draw(this, /*(Composite)*/ null, false, false); |
---|
9753 | | - //debugpoint.draw(this, /*(Composite)*/ null, false); |
---|
9754 | | - //debugpoint2.draw(this, /*(Composite)*/ null, false); |
---|
9755 | | - DrawPoints(this); |
---|
| 9793 | + debugpointG.draw(this, /*(Composite)*/ null, false,false); |
---|
| 9794 | + debugpointP.draw(this, /*(Composite)*/ null, false,false); |
---|
| 9795 | + debugpointC.draw(this, /*(Composite)*/ null, false,false); |
---|
| 9796 | + debugpointR.draw(this, /*(Composite)*/ null, false,false); |
---|
| 9797 | + // DrawPoints(this); |
---|
9756 | 9798 | } |
---|
9757 | 9799 | |
---|
9758 | 9800 | // debugstuff.draw(this, /*(Composite)*/ null, false); |
---|
9759 | 9801 | } |
---|
9760 | | -// GraphreeD.traceoff(); |
---|
| 9802 | +// GrafreeD.traceoff(); |
---|
9761 | 9803 | //System.out.println(stackdepth); |
---|
9762 | 9804 | if (drawMode == 0) |
---|
9763 | 9805 | { |
---|
.. | .. |
---|
9789 | 9831 | |
---|
9790 | 9832 | if (checker != null && drawMode == DEFAULT) |
---|
9791 | 9833 | { |
---|
9792 | | - // BindTexture(IMMORTAL_TEXTURE); |
---|
| 9834 | + //BindTexture(IMMORTAL_TEXTURE); |
---|
| 9835 | + BindTextures(checker.GetTextures(), checker.texres); |
---|
9793 | 9836 | // NEAREST |
---|
9794 | 9837 | GetGL().glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST); // GL.GL_LINEAR); |
---|
9795 | 9838 | DrawChecker(gl); |
---|
9796 | 9839 | //checker.Draw(this, null, false); |
---|
9797 | 9840 | // ReleaseTexture(IMMORTAL_TEXTURE); |
---|
| 9841 | + ReleaseTextures(checker.GetTextures()); |
---|
9798 | 9842 | } |
---|
9799 | 9843 | |
---|
9800 | 9844 | if (object.parent != null) |
---|
.. | .. |
---|
10253 | 10297 | return; |
---|
10254 | 10298 | } |
---|
10255 | 10299 | |
---|
10256 | | - if (obj instanceof CheckerIG) |
---|
| 10300 | + if (obj instanceof Checker) |
---|
10257 | 10301 | { |
---|
10258 | 10302 | checker = obj; |
---|
10259 | 10303 | |
---|
.. | .. |
---|
10325 | 10369 | "PARAM params6 = program.env[6];" + // bump, noise, borderfade, fog punchthrough |
---|
10326 | 10370 | "PARAM params7 = program.env[7];" + // noise power, opacity power |
---|
10327 | 10371 | "PARAM options0 = program.env[63];" + // fog density, intensity, elevation |
---|
10328 | | - "PARAM options1 = program.env[62];" + // fog rgb color, image intensity |
---|
| 10372 | + "PARAM options1 = program.env[62];" + // fog rgb color |
---|
| 10373 | + "PARAM options2 = program.env[61];" + // image intensity, subsurface, lightsheen |
---|
10329 | 10374 | "PARAM pointlight = program.env[127];" + // ... |
---|
10330 | 10375 | "PARAM zero = { 0.0, 0.0, 0.0, 0.0 };" + |
---|
10331 | 10376 | "PARAM halfhalf = { 0.25, 0.25, 0.25, 1.0 };" + |
---|
10332 | 10377 | "PARAM half = { 0.5, 0.5, 0.5, 1.0 };" + |
---|
| 10378 | + "PARAM threequarter = { 0.75, 0.75, 0.75, 1.0 };" + |
---|
10333 | 10379 | "PARAM two = { 2.0, 2.0, 2.0, 1.0 };" + |
---|
10334 | 10380 | "PARAM ten = { 10, 10, 10, 1.0 };" + |
---|
10335 | 10381 | "PARAM one3rd = { 0.5, 0.33333333333, 0.333333333, 1.0 };" + |
---|
.. | .. |
---|
10350 | 10396 | "PARAM lodbias = { 10,10,10,10 };" + // 20, -2, -20, 1.0 };" + |
---|
10351 | 10397 | "PARAM infinity = { 100000000, 100000000, 100000000, 1.0 };" + |
---|
10352 | 10398 | "PARAM one2048th = { 0.00048828125, 0.00048828125, 0.00048828125, 1.0 };" + |
---|
| 10399 | + "PARAM ninetenth = { 0.9, 0.9, 0.9, 1.0 };" + |
---|
10353 | 10400 | "PARAM almostone = { 0.999, 0.999, 0.999, 1.0 };" + |
---|
10354 | 10401 | "PARAM c256 = { 256, 256, 256, 1.0 };" + |
---|
10355 | 10402 | "PARAM c256i = { 0.00390625, 0.00390625, 0.00390625, 1.0 };" + |
---|
.. | .. |
---|
10390 | 10437 | "TEMP R1;" + |
---|
10391 | 10438 | "TEMP R2;" + |
---|
10392 | 10439 | "TEMP R3;" + |
---|
| 10440 | + "TEMP min;" + |
---|
| 10441 | + "TEMP max;" + |
---|
| 10442 | + "TEMP average;" + |
---|
| 10443 | + "TEMP saturation;" + |
---|
10393 | 10444 | "TEMP keep1;" + |
---|
10394 | 10445 | "TEMP keep2;" + |
---|
10395 | 10446 | "TEMP keep3;" + |
---|
.. | .. |
---|
10920 | 10971 | |
---|
10921 | 10972 | // skin? |
---|
10922 | 10973 | // Saturation for skin |
---|
10923 | | - /**/ // c'est ici |
---|
10924 | | - (Skinshader? "DP3 temp.x, final,one;" + |
---|
| 10974 | + /**/ |
---|
| 10975 | + (Skinshader? |
---|
| 10976 | + "DP3 average.x, final,one;" + |
---|
| 10977 | + "MUL average, one3rd.xxxx,average.xxxx;" + |
---|
| 10978 | + |
---|
| 10979 | + "MIN min.x, final.x,final.y;" + |
---|
| 10980 | + "MIN min.x, min.x,final.z;" + |
---|
| 10981 | + |
---|
| 10982 | + "MAX max.x, final.x,final.y;" + |
---|
| 10983 | + "MAX max.x, max.x,final.z;" + |
---|
| 10984 | + "MOV max, max.xxxx;" + |
---|
| 10985 | + |
---|
| 10986 | + "SUB saturation, max, final;" + |
---|
| 10987 | + |
---|
| 10988 | + "ADD temp.x, max.x, one10th.x;" + |
---|
| 10989 | + "RCP temp.x, temp.x;" + |
---|
| 10990 | + "MUL temp.x, temp.x, half.x;" + |
---|
| 10991 | + "MUL saturation, saturation, temp.xxxx;" + |
---|
| 10992 | + |
---|
| 10993 | + "DP3 ndotl.x, normald, light;" + |
---|
| 10994 | + "MAX ndotl.x, ndotl.x, -ndotl.x;" + |
---|
| 10995 | + |
---|
| 10996 | + "SUB temp.x, one.x, ndotl.x;" + |
---|
| 10997 | + "ADD temp.x, temp.x, options2.z;" + // lightsheen |
---|
| 10998 | + "ADD temp.y, one.y, options2.y;" + // sursurface |
---|
| 10999 | + "MUL temp.x, temp.x, temp.y;" + |
---|
| 11000 | + |
---|
| 11001 | + "MUL saturation, saturation, temp.xxxx;" + |
---|
| 11002 | + "SUB_SAT temp, max, saturation;" + |
---|
| 11003 | +/** |
---|
| 11004 | + "DP3 temp.x, final,one;" + |
---|
10925 | 11005 | "MUL R2, one3rd.xxxx,temp.xxxx;" + |
---|
10926 | | - "SUB temp, final,R2;" + |
---|
| 11006 | + "SUB temp, final, R2;" + |
---|
| 11007 | + |
---|
10927 | 11008 | // using light angle |
---|
10928 | 11009 | "DP3 ndotl.x, normald,light;" + |
---|
10929 | 11010 | //"SLT ndotl.y, ndotl.x, zero.x;" + |
---|
.. | .. |
---|
10936 | 11017 | // using light intensity |
---|
10937 | 11018 | "MOV ndotl.z, R2.x;" + |
---|
10938 | 11019 | "MUL ndotl.z, ndotl.z, ndotl.z;" + // tuning... |
---|
10939 | | - |
---|
10940 | 11020 | // june 2014 |
---|
10941 | 11021 | "MAD R1.x, ndotl.z,slope.y,one.x;" + |
---|
10942 | 11022 | // "SUB ndotl.x, one.x, ndotl.x;" + |
---|
.. | .. |
---|
10948 | 11028 | //"MUL R2.y, shadow.x,R2.y;" + // avril 2014 |
---|
10949 | 11029 | |
---|
10950 | 11030 | "MAD temp.x, R2.y, ndotl.y, temp.x;" + // red shift (skin) |
---|
| 11031 | +/**/ |
---|
10951 | 11032 | |
---|
10952 | 11033 | // "ADD final, R2,temp;" + |
---|
10953 | 11034 | "MOV final, temp;" |
---|
.. | .. |
---|
11037 | 11118 | /**/ |
---|
11038 | 11119 | // HDR |
---|
11039 | 11120 | "MOV temp.z, final.a;" + |
---|
11040 | | - "MUL final, final,options1.w;" + |
---|
| 11121 | + "MUL final, final,options2.x;" + |
---|
11041 | 11122 | "MOV final.a, temp.z;" + |
---|
11042 | 11123 | /**/ |
---|
11043 | 11124 | |
---|
.. | .. |
---|
11074 | 11155 | "MOV final.z, zero.x;" + |
---|
11075 | 11156 | "MOV final.a, one.w;":"" |
---|
11076 | 11157 | ) + |
---|
| 11158 | + /* |
---|
11077 | 11159 | (NORMALdebug?"MOV final.x, normal.x;" + |
---|
11078 | 11160 | "MOV final.y, normal.y;" + |
---|
11079 | 11161 | "MOV final.z, normal.z;" + |
---|
11080 | 11162 | "MOV final.a, one.w;":"" |
---|
| 11163 | + ) + |
---|
| 11164 | + */ |
---|
| 11165 | + (NORMALdebug?"SUB final.x, one.x, final.x;" + |
---|
| 11166 | + "SUB final.y, one.x, final.y;" + |
---|
| 11167 | + "SUB final.z, one.x, final.z;" + |
---|
| 11168 | + "MOV final.a, final.a;":"" |
---|
11081 | 11169 | ) + |
---|
11082 | 11170 | // "MOV final, bumpmap;" + |
---|
11083 | 11171 | "MOV result.color, final;" + |
---|
.. | .. |
---|
11223 | 11311 | String Shadow(String depth, String shadow) |
---|
11224 | 11312 | { |
---|
11225 | 11313 | return "MAX temp.x, ndotl.x, one64th.x;" + |
---|
| 11314 | + "MIN temp.x, temp.x, ninetenth.x;" + |
---|
11226 | 11315 | /**/ |
---|
11227 | 11316 | // Sine |
---|
11228 | 11317 | "MUL temp.y, temp.x, temp.x;" + |
---|
.. | .. |
---|
12775 | 12864 | { |
---|
12776 | 12865 | mouseMode |= ZOOM; |
---|
12777 | 12866 | } |
---|
12778 | | - if ((modifiers & META) == META) |
---|
| 12867 | + |
---|
| 12868 | + boolean capsLocked = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK); |
---|
| 12869 | + if (capsLocked || (modifiers & META) == META) |
---|
12779 | 12870 | { |
---|
12780 | 12871 | mouseMode |= VR; // BACKFORTH; |
---|
12781 | 12872 | } |
---|
.. | .. |
---|
12789 | 12880 | } |
---|
12790 | 12881 | if ((modifiers & SHIFT) == SHIFT || forcetranslate) |
---|
12791 | 12882 | { |
---|
| 12883 | + mouseMode &= ~VR; |
---|
12792 | 12884 | mouseMode |= TRANSLATE; |
---|
12793 | 12885 | } |
---|
12794 | 12886 | // if ((modifiers & SHIFT_META) == SHIFT_META) |
---|
.. | .. |
---|
13178 | 13270 | FlipTransform(); |
---|
13179 | 13271 | break; |
---|
13180 | 13272 | case ENTER: |
---|
13181 | | - object.editWindow.ScreenFit(); // Edit(); |
---|
| 13273 | + // object.editWindow.ScreenFit(); // Edit(); |
---|
| 13274 | + ToggleLive(); |
---|
13182 | 13275 | break; |
---|
13183 | 13276 | case DELETE: |
---|
13184 | 13277 | ClearSelection(); |
---|
.. | .. |
---|
14355 | 14448 | gl.glPushAttrib(GL.GL_ALL_ATTRIB_BITS); |
---|
14356 | 14449 | gl.glPushMatrix(); |
---|
14357 | 14450 | gl.glLoadIdentity(); |
---|
14358 | | - PushMatrix(checker.toParent); |
---|
| 14451 | + //PushMatrix(checker.toParent); |
---|
14359 | 14452 | |
---|
14360 | 14453 | gl.glMatrixMode(GL.GL_TEXTURE); |
---|
14361 | 14454 | gl.glPushMatrix(); |
---|
.. | .. |
---|
14378 | 14471 | |
---|
14379 | 14472 | gl.glNormal3f(0.0f, 0.0f, 1.0f); |
---|
14380 | 14473 | |
---|
14381 | | - float step = 0.1666f; //0.25f; |
---|
14382 | | - float stepv = step * 1652 / 998; |
---|
| 14474 | + float step = 2; // 0.1666f; //0.25f; |
---|
| 14475 | + float stepv = 2; // step * 1652 / 998; |
---|
14383 | 14476 | |
---|
14384 | 14477 | int i0 = 0; |
---|
14385 | 14478 | /* |
---|
.. | .. |
---|
14449 | 14542 | |
---|
14450 | 14543 | //float u = (i+1)/2; |
---|
14451 | 14544 | //float v = (j+1)/2; |
---|
14452 | | - gl.glTexCoord2f((i + 1) / 2, (j + 1) / 2); // (1,0) // (i+1+step)/2,(j+1)/2); |
---|
| 14545 | + if (checker.flipV) |
---|
| 14546 | + gl.glTexCoord2f((i + 1) / 2, 1 - (j + 1) / 2); |
---|
| 14547 | + else |
---|
| 14548 | + gl.glTexCoord2f((i + 1) / 2, (j + 1) / 2); // (1,0) // (i+1+step)/2,(j+1)/2); |
---|
14453 | 14549 | gl.glVertex3f(i, j, -0.5f); |
---|
14454 | 14550 | |
---|
| 14551 | + if (checker.flipV) |
---|
| 14552 | + gl.glTexCoord2f((i + 1 + step) / 2, 1 - (j + 1) / 2); // (1,1) // (i+1+step)/2,(j+1+step)/2); |
---|
| 14553 | + else |
---|
14455 | 14554 | gl.glTexCoord2f((i + 1 + step) / 2, (j + 1) / 2); // (1,1) // (i+1+step)/2,(j+1+step)/2); |
---|
14456 | 14555 | gl.glVertex3f(i + step, j, -0.5f); |
---|
14457 | 14556 | |
---|
| 14557 | + if (checker.flipV) |
---|
| 14558 | + gl.glTexCoord2f((i + 1 + step) / 2, 1 - (j + 1 + stepv) / 2); // (0,1) //(i+1)/2,(j+1+step)/2); |
---|
| 14559 | + else |
---|
14458 | 14560 | gl.glTexCoord2f((i + 1 + step) / 2, (j + 1 + stepv) / 2); // (0,1) //(i+1)/2,(j+1+step)/2); |
---|
14459 | 14561 | gl.glVertex3f(i + step, j + stepv, -0.5f); |
---|
14460 | 14562 | |
---|
| 14563 | + if (checker.flipV) |
---|
| 14564 | + gl.glTexCoord2f((i + 1) / 2, 1 - (j + 1 + stepv) / 2); // (0,0) //(i+1)/2,(j+1)/2); |
---|
| 14565 | + else |
---|
14461 | 14566 | gl.glTexCoord2f((i + 1) / 2, (j + 1 + stepv) / 2); // (0,0) //(i+1)/2,(j+1)/2); |
---|
14462 | 14567 | gl.glVertex3f(i, j + stepv, -0.5f); |
---|
14463 | 14568 | } |
---|
.. | .. |
---|
14469 | 14574 | gl.glMatrixMode(GL.GL_PROJECTION); |
---|
14470 | 14575 | gl.glPopMatrix(); |
---|
14471 | 14576 | gl.glMatrixMode(GL.GL_MODELVIEW); |
---|
14472 | | - PopMatrix(null); // checker.toParent); // null); |
---|
| 14577 | + //PopMatrix(null); // checker.toParent); // null); |
---|
14473 | 14578 | gl.glPopMatrix(); |
---|
14474 | 14579 | PopTextureMatrix(checker.toParent); |
---|
14475 | 14580 | gl.glMatrixMode(GL.GL_TEXTURE); |
---|
.. | .. |
---|
14639 | 14744 | // System.err.println("view = " + view[8] + " " + view[9] + " " + view[10] + " " + view[11]); |
---|
14640 | 14745 | // System.err.println("view = " + view[12] + " " + view[13] + " " + view[14] + " " + view[15]); |
---|
14641 | 14746 | |
---|
| 14747 | + // Will fit the mesh !!! |
---|
| 14748 | + selectedpoint.toParent[0][0] = 0.0001; |
---|
| 14749 | + selectedpoint.toParent[1][1] = 0.0001; |
---|
| 14750 | + selectedpoint.toParent[2][2] = 0.0001; |
---|
| 14751 | + |
---|
14642 | 14752 | glu.gluUnProject(x,y,depth,view,0,tempmat2,0,viewport,0,selectedpoint.toParent[3],0); |
---|
14643 | 14753 | |
---|
14644 | 14754 | // if (object.selection != null && object.selection.Size() > 0) |
---|
.. | .. |
---|
14682 | 14792 | System.out.println("; fromto " + sel + " " + Trunk(previousselectedpoint.toParent[3][0]) + " " + Trunk(previousselectedpoint.toParent[3][2]) + " " + Trunk(selectedpoint.toParent[3][0]) + " " + Trunk(selectedpoint.toParent[3][2])); |
---|
14683 | 14793 | } |
---|
14684 | 14794 | |
---|
14685 | | - previousselectedpoint = (Sphere) GraphreeD.clone(selectedpoint); |
---|
| 14795 | + previousselectedpoint = (Sphere) GrafreeD.clone(selectedpoint); |
---|
14686 | 14796 | } |
---|
14687 | 14797 | } |
---|
14688 | 14798 | |
---|
14689 | 14799 | if (!movingcamera && !PAINTMODE) |
---|
14690 | 14800 | object.editWindow.ScreenFitPoint(); // fev 2014 |
---|
14691 | 14801 | |
---|
14692 | | - if (PAINTMODE && GraphreeD.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0) |
---|
| 14802 | + if (PAINTMODE && GrafreeD.clipboard.size() == 1) // object.editWindow.copy.selection.Size() > 0) |
---|
14693 | 14803 | { |
---|
14694 | | - Object3D paintobj = GraphreeD.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0); |
---|
| 14804 | + Object3D paintobj = GrafreeD.clipboard.get(0); // object.editWindow.copy.selection.elementAt(0); |
---|
14695 | 14805 | |
---|
14696 | 14806 | Object3D group = new Object3D("inst" + paintcount++); |
---|
14697 | 14807 | |
---|
.. | .. |
---|
15027 | 15137 | gl.glFlush(); |
---|
15028 | 15138 | |
---|
15029 | 15139 | /**/ |
---|
15030 | | - gl.glReadPixels(0, 0, OCCLUSION_SIZE, OCCLUSION_SIZE, GL.GL_BGRA, GL.GL_UNSIGNED_INT_8_8_8_8_REV, occlusionsizebuffer); |
---|
| 15140 | + gl.glReadPixels(0, 0, OCCLUSION_SIZE, OCCLUSION_SIZE, GL.GL_DEPTH_COMPONENT, GL.GL_FLOAT, occlusionsizebuffer); |
---|
15031 | 15141 | |
---|
15032 | | - int[] pixels = occlusionsizebuffer.array(); |
---|
| 15142 | + float[] pixels = occlusionsizebuffer.array(); |
---|
15033 | 15143 | |
---|
15034 | 15144 | double r = 0, g = 0, b = 0; |
---|
15035 | 15145 | |
---|
15036 | 15146 | double count = 0; |
---|
| 15147 | + |
---|
| 15148 | + gl.glGetDoublev(gl.GL_PROJECTION_MATRIX, tempmat2, 0); |
---|
| 15149 | + |
---|
| 15150 | + float mindepth = 1; |
---|
| 15151 | + |
---|
| 15152 | + double FACTOR = 1; |
---|
15037 | 15153 | |
---|
15038 | 15154 | for (int i = 0; i < pixels.length; i++) |
---|
15039 | 15155 | { |
---|
.. | .. |
---|
15118 | 15234 | |
---|
15119 | 15235 | double scale = ray.z; // 1; // cos |
---|
15120 | 15236 | |
---|
15121 | | - int p = pixels[newindex]; |
---|
| 15237 | + float depth = pixels[newindex]; |
---|
15122 | 15238 | |
---|
15123 | 15239 | /* |
---|
15124 | 15240 | int newindex2 = (x + 1) * OCCLUSION_SIZE + y; |
---|
.. | .. |
---|
15142 | 15258 | scale = (1 - modu) * modv; |
---|
15143 | 15259 | */ |
---|
15144 | 15260 | |
---|
15145 | | - r += ((p >> 16) & 0xFF) * scale / 255; |
---|
15146 | | - g += ((p >> 8) & 0xFF) * scale / 255; |
---|
15147 | | - b += (p & 0xFF) * scale / 255; |
---|
| 15261 | + //r += ((p >> 16) & 0xFF) * scale / 255; |
---|
| 15262 | + //g += ((p >> 8) & 0xFF) * scale / 255; |
---|
| 15263 | + //b += (p & 0xFF) * scale / 255; |
---|
| 15264 | + |
---|
| 15265 | + if (mindepth > depth) |
---|
| 15266 | + { |
---|
| 15267 | + mindepth = depth; |
---|
| 15268 | + } |
---|
15148 | 15269 | |
---|
| 15270 | + double z_eye = tempmat2[3*4 + 2] / (depth * -2.0 + 1.0 - tempmat2[2*4 + 2]); |
---|
| 15271 | + |
---|
| 15272 | + double factor = 1 - Math.exp(-z_eye * z_eye / FACTOR); |
---|
| 15273 | + |
---|
| 15274 | + r += factor * scale; |
---|
| 15275 | + g += factor * scale; |
---|
| 15276 | + b += factor * scale; |
---|
| 15277 | + |
---|
15149 | 15278 | count += scale; |
---|
15150 | 15279 | } |
---|
15151 | 15280 | |
---|
.. | .. |
---|
15261 | 15390 | int AAbuffersize = 0; |
---|
15262 | 15391 | |
---|
15263 | 15392 | //double[] selectedpoint = new double[3]; |
---|
15264 | | - static Sphere selectedpoint = new Sphere(); |
---|
| 15393 | + static Superellipsoid selectedpoint = new Superellipsoid(); |
---|
15265 | 15394 | static Sphere previousselectedpoint = null; |
---|
15266 | | - static Sphere debugpoint = new Sphere(); |
---|
15267 | | - static Sphere debugpoint2 = new Sphere(); |
---|
| 15395 | + static Sphere debugpointG = new Sphere(); |
---|
| 15396 | + static Sphere debugpointP = new Sphere(); |
---|
| 15397 | + static Sphere debugpointC = new Sphere(); |
---|
| 15398 | + static Sphere debugpointR = new Sphere(); |
---|
15268 | 15399 | |
---|
15269 | 15400 | static Sphere debugpoints[] = new Sphere[8]; |
---|
15270 | 15401 | |
---|
.. | .. |
---|
15317 | 15448 | static IntBuffer texturesizebuffer = IntBuffer.allocate(TEX_SIZE * TEX_SIZE); |
---|
15318 | 15449 | static IntBuffer selectsizebuffer = IntBuffer.allocate(SELECT_SIZE * SELECT_SIZE); |
---|
15319 | 15450 | static java.nio.FloatBuffer pointselectsizebuffer = java.nio.FloatBuffer.allocate(SELECT_SIZE * SELECT_SIZE); |
---|
15320 | | - static IntBuffer occlusionsizebuffer = IntBuffer.allocate(OCCLUSION_SIZE * OCCLUSION_SIZE); |
---|
| 15451 | + //static IntBuffer occlusionsizebuffer = IntBuffer.allocate(OCCLUSION_SIZE * OCCLUSION_SIZE); |
---|
| 15452 | + static java.nio.FloatBuffer occlusionsizebuffer = java.nio.FloatBuffer.allocate(OCCLUSION_SIZE * OCCLUSION_SIZE); |
---|
15321 | 15453 | static BufferedImage bufimage = new BufferedImage(TEX_SIZE, TEX_SIZE, BufferedImage.TYPE_INT_RGB); |
---|
15322 | 15454 | static BufferedImage textest = new cBufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); |
---|
15323 | 15455 | static java.util.Vector<BufferedImage> billboards = new java.util.Vector<BufferedImage>(); |
---|