rendering
Adobe LiveCycle Express — Cloud Computing Meets Adobe LiveCycle ES
Adobe LiveCycle Express is a new software-as-a-service (SaaS) product offering from Adobe that takes a cloud computing approach to delivering Adobe’s LiveCycle ES enterprise software suite using Ruby on Rails, Adobe Flex, and Amazon’s EC2 and S3 services. LiveCycle Express grew from a research project I conceived while working in Adobe’s Advanced Tchnology Labs division.
The site was launched on December 15, 2008 at http://livecycle.express.adobe.com.
The joint press release from Adobe and Amazon announcing LiveCycle Express can be found here: http://finance.yahoo.com/news/Adobe-Announces-LiveCycle-bw-14025946.html.
ThreeD – A 3-D Rendering Engine in Java
|
ThreeD is an object-oriented rendering engine package written in Java. The ThreeD graphics pipeline is designed to support the transformation and visualization of Entities, each of which are subclasses of objects which encapsulate their own rendering and transformation algorithms and conform to a specific interface. The engine supports a switched, double-buffering scheme for the image buffer and the Z-buffer, using a support thread to clean buffers before use.
The current implementation contains a single Entity subclass: The Polygon class. The Polygon class renders polygons in three dimensions (using homogeneous coordinates) with perspective transformation using the Z-buffer for hidden surface removal. Each Polygon has a uniform RGB color, and the rendered color is adjusted by a primitive lighting component based on the dot product of the Polygon surface normal and the view vector. Polygons are rendered using an integer scanline algorithm. Anti-aliasing and texture mapping are not currently supported, but the class could be easily modified to support these (and other similar) features.
Performance notes for v1.0, circa 1996…
The performance is somewhat less than I had hoped for. The average performance of the Test applet shown above is (running via Netscape 3.0 on a PowerPC Macintosh, 200×200 applet geometry):
| Entities Rendered Per Frame: | 384 |
|---|---|
| Average Render Time Per Frame: | 0.75 seconds (+- 0.05 seconds) |
| Average Frame Rate: | 1.33 frames/second |
| Average Entity Rendering Rate: | 512 entities/second |
The Test applet writes real-time performance statistics to the Java console, so you can gauge the performance of your browser and machine. The multi-threaded environment causes a few wrinkles in screen update management, since there is no synchronous method to force an image frame screen redraw. The solution is to use synchronous locks on the buffers to control write access and preclude buffer modification until the buffer has been appropriately read. Consequently, a non-trivial fraction of the rendering period is consumed while waiting for the screen update to complete. The double-buffering strategy is meant to address this, but the lack of a fast array assignment method in Java reduces its effectiveness, as it takes a significant amount of time to reset an entire buffer to zero.
Performance notes for v2.0, updated in 2006 for Java 1.5…
Hardware and JVM performance has certainly come a long way in 10 years. I recently updated the code for Java 1.5, and I found that I had to throttle back the frame rate to get acceptable visual clarity – the engine can render a frame faster than the JVM can refresh the screen, even at the double size (400×400) of the current applet above. Java now provides more extensive double-buffering and synchronous screen update mechanisms, and these permitted me to remove many of the hacks I needed back in 1996 with the original implementation running via Netscape 3.0.
Here are some typical stats for the updated code on Firefox 1.5 using the Java 1.5 browser plugin (400×400 applet geometry):
| Entities Rendered Per Frame: | 384 |
|---|---|
| Average Render Time Per Frame: | 0.02 seconds |
| Average Frame Rate: | 40 frames/second |
| Average Entity Rendering Rate: | 38400 entities/second |
ThreeD is now hosted on Sourceforge at http://sourceforge.net/projects/java3d/. Both source and binary distributions of ThreeD v2.0 are available for download.
The Image MeshWarp Applet
|
This is an implementation of a meshwarping algorithm, using polygon scan conversion with texture
mapping to produce the warped image. On release of the mouse button after modifying the position of a vertex, the four affected polygons incident on the modified vertex are rendered with a relatively standard Bresenham incremental scanline conversion algorithm, using the initial fixed grid polygons of the image as textures to be mapped onto the new polygons. The algorithm is lossy, in that the texture mapping does not integrate areas of the source textures to produce pixel values. The texture mapping is also prone to distortion along the edges of adjacent polygons, which can produce unrealistic results. Vertex adjustments are reversible and idempotent.
Ultimately, it’s more toy than serious graphics tool…but fun nonetheless.
The Image Morphing Applet
|
This is an implementation of a peculiar triangular morphing algorithm. Starting with a source image, a destination image, and three control points for each image, I basically divide each image into a mesh of triangles, using the four corners and three control points as vertices. These triangles are then split into what I call simple triangles, which are triangles with one horizontal edge. This results in 14 triangles for each image. I then interpolate between each source/destination triangle pair to generate each frame of the morph; I do a triangular scanline conversion into the intermediate frame triangle, using the source and destination triangles as color sources and the frame number (as a fraction of the total number of frames) as an alpha transparency value for the sources. It’s not very fast, and not very robust, but with carefully selected images and control points it seems to work reasonably. Notice that the degree of morphing (the degree of pixel tranformation and motion versus pure transparent fade and replacement) is highest near the control points (which in this case are the eyes and nose of the people in the images), dropping to zero at the edges of the image.
The original source code for the Image Morphing Applet (from 1996, written for Java 1.0.2) can be found here.
Subscribe
Recent Posts
- Observed Performance of Amazon EC2 Instances
- Cloud Computing and Mobile Devices
- Time and Clock Issues in Windows-Based EC2 Instances
- My experimental local and real-time search engine is now available
- Entropy in Cloud Computing Applications
- How to Jailbreak iPhone 3.01
- How to Detect the Front (Home) Page of a Wordpress Blog
- How to Create an Amazon EC2 AMI That is Larger Than 10GB
- Perl DBI and DBD::mysql on Cygwin — Connecting to a Native Windows Build of MySQL on a Windows 2003 AMI Within Amazon EC2
- Enterprise Cloud Computing – What is it, exactly?
- Ephemeral Drives in Amazon EC2 – When Are They Mounted?
- Cygwin Lighttpd with SSL
- Security for Cloud-based Enterprise Applications
- Cygwin SSHd on a Windows 2003 AMI Within Amazon EC2
- My experimental search engine is now available in 10 languages…
Posts