Progress Report
29 August 2004
Done:
- When a camera or object gets renamed the world does not automatically make it the current camera or object. Instead it gives a pop-up window confirming the name change.
- Debug statements removed.
- Mouse clicks no longer allowed in object change area if there are no objects to change.
- File now saves whether ground plane is on or off. Older saved files are assumed to have ground plane ON. New World call sets ground plane to ON.
- If you quit by closing the window it will ask you if you want to save first.
- Angles of over 360 become their under-360 counterparts.
- Add "what's behind me" lesson to world. Pop-up window telling what to do in world as it's opening. Separate file names of lessons from names that appear in open Pre-Made world option list.
- Go To camera algorithm is better but not perfect.
- Maybe it would be cool to have a sky texture as background and represent "Up"? Add cartoon sun in direction light is coming from? -OR- allow background color to be choosen via menu item in World (like for ground plane). Change background color of ObjectIcon accordingly. ~ Decided not to do this since having more options or a busier background could take away from the focus of the program.
What's still left to do:
HIGH PRIORITY
- Clicking on a camera avatar doesn't always select that camera, especially as you get further away from it. Check to see if both sides of polygons are being checked if the polygon is two sided.
- Double check Go To camera algorithm still needs a bit of help. Sometimes it doesn't get all the way there.
MEDIUM PRIORITY
- Only repaint when needed. This may mean adding a paint method to world. This should also fix what is probably a related issue: on older computers canvas dissappears briefly whenever doing something else like selecting menus, pushing buttons, etc. Look into double buffering issues.
- For dealing with lag: (1)"gray out" value change area during lag between when signal to change has been given and program's response to it. (2) "flash" object if processing. Flash could mean changing color of outline to red or something. -OR- Have values of position (for example) change as position is changing instead of just jumping to show end position when finished with move. I think this last one is the ideal way to handle this.
- Determine if collision detection on cameras is a good idea. Specifically, avoiding going through other objects when moving between cameras.
- Combo box for changing cameras & objects: add icon or color box to show what color that particular named camera or object is. See Providing a Custom Renderer for JComboBox. Can this be done in the menu bar also? Specifically View & Object menus.
- Maybe move color chooser to directly under name selector in property panels?
LOW PRIORITY
- Fix printing feature.
- Create a web page with hints for why Viewpoints may not be running.
- Look for places in code to add garbage collection.
- Smooth out camera icon by making image file larger: VSMALL width x SMALL height for texture.
- Just a thought - add black outlines or something along edges or objects or arrows to distinguish objects that are same color from each other.
- More lights? Or different arrangement thereof?
- If I add a help menu I should add a system-independent About Box and an Undo menu item. For functionality of Undo, look into UndoManager class and Swing undo classes.
- Main page of website: modify "goal" section to be just about what program *is*. Move java related stuff elsewhere. Maybe later in page mention that mac users already have JWS.
- Black dot in center of position change area: make it reposition object to either 0,0,0 or center of current view? (1h)
- Ideas to distinquish cameras: add name of camera on back of each camera icon's head, (2) make cameras have different icons like woman, cat, dog, etc.
- Add triangle for person icon's "nose". This requires more debugging regarding adding "nose" object as child object to camera avatar.
Previous Entries
Done:
- Rotation problems with Look At and Go To fixed including special cases where changes are exactly 180. Cameras can now be completely upside down and look at things behind them and have appropriate rotation changes.
- Slight error with file save has been fixed: after file open, camera avatars were not restoring to their camera's rotation.
- Position change areas: overlapping arrows make it hard to select arrow behind the front one. So, the "stem" of the arrow in front becomes skinnier so we can see the one behind it better.
Done:
- Appropriate camera or object is automatically selected in Rename, Copy, Delete, etc.
- Add ability to double click objects in New Object, Copy, etc. instead of needing to push the OK button.
- Fixed highlighting of Z axis +/- in Look Around so it will turn off when it's supposed to.
- File confusion with saveAs has been fixed. And file name once again appears in title bar as appropriate. Pop-up message added to tell user when file is done saving and what name it saved as.
Done:
- File save works on PCs now too.
- BUG: problem where program looses ability to quit via menu after working with file menu. Does this happen because OS X sees that the JNLP file services are there? Maybe... This bug occurs in other applications created by Sun and run via Java Web Start on Mac OS X. So particular bug is being put aside.
- Black background added behind icons so that if object is white the icon can still be seen.
Done:
- Fixed problem wherein camera avatars were wrong placement in space and dissappear sometimes.
Done:
- Outlined arrows in value change areas when mouse over so you know you can click on it.
- Decided to leave ground plane as is with one square = 1 unit across but not extended further.
- Edit menu is not needed. Actions are: undo, cut, copy, paste, clear and select all. Cut, copy, paste and clear are taken care of within other menus on a world, view or object specific basic. Select all would be very complicated and it doesn't seem like it's really something we want to have the option to do. I guess selecting a couple of objects at a time might be useful but complicated code-wise. That just leaves Undo. Undo seems useful, but where would I put it? It seems silly to have an Edit menu with only one menu item but it doesn't seem to fit in any other menus... unless I add a help menu.
- Fixed problem with Look At... in View menu. If what you wanted to look at was behind you it often didn't rotate the camera correctly to see it.
- When a camera is selected in main window it is outlined it to say "this is where you clicked".
- Fixed bug where default camera could be changed by using Look At.
Done:
- Ability to turn on and off ground plane added to World menu.
- Solved another issue with File open/save. Cannot use Resource Bundle to get strings in Camera class. It was the source of the errors with file opening.
- Little black arrows added back into rotation change area (which now has cone-shaped axes).
- Better names given to position, rotation, scale, zoom and camera.
- Fixed problem where while opening a file the view would incrementally shift toward current camera from file. Now it just jumps to the current camera view stored in the file.
Done:
- File open & save is fixed. Fixed issue where different threads were trying to access the same file at the same time. Old saved files cannot be opened!
Done:
- Fixed minor error with algorithm to select an object via a mouse click.
- Decided not to modify viewing angle for camera because it causes less accuracy in the object selection by mouse clicks.
- Rotation change triangles are now more cone-shaped. Black rotation arrows integrated into cone end. This fixed problem where little black arrows sometimes didn't line up right.
- Wording changed from View to Camera. (It's assumed that 9-12 yrs olds will understand the concept of a camera.)
- It is noted that rotation values are in degrees. Also change increment values for rotation are now 1, 5, 10, 45, 90 since that is more closely related to how we think about degrees.
- World is now smaller, only 50 units in each direction (100 units across).
- Indicator of what file is currently open added to title bar.
- Added icons for other object types besides square. Color and shape of icons changes according to current camera and current object.
Done:
- Problem with Look At... has been minimized some in that the camera can be further away before running into a problem.
- In position change areas: foreshortened arrows for axes.
Done:
- Camera modifications: position of camera is based on location of "eyes" of avatar. "Eyes" are 1 unit off "ground". Person icon is big enough so it's "feet" reach the ground. New default position of camera choosen. Person icon has been given transparent eyes to look out of.
- Fixed problems with Go To... and Look At... in View menu such that sometimes end result is not what it should be. Problem was same order-of-rotations bug from highlighter objects.
- Extraneous suspend() & resume() statements removed.
- "Pre-made" world menu item added to load saved worlds from jar file. This is needed in order to load worlds for the study.
- Opening a file does now automatically selects the camera that was selected when the file was saved.
- Keyboard shortcuts for menu items removed.
- Different visual representation of rotation for cameras has been made since it rotates along camera's x,y,z not world's. The area for changing values should have a more clear relationship to how the camera responds to changes in each rotation (yawl/y, pitch/x, roll/z). This makes camera rotation changes much more understandable.
- Fixed heavyweight/lightweight gui elements issue on older PCs. Menus were being drawn behind World canvas sometimes.
- Fixed window height issue on PCs. Window wasn't tall enough to show all of color button. <
Done:
- File open/save fixed. Program froze if there was more than one camera or object to save because PipedInputStream and PipedOutputStream have a buffer size that was being exceeded. This stopped the program from continuing. Input from and output to streams now takes place in a separate thread.
Done:
- Semi-transparent ground plane added with checkerboard-style coloring.
- Rotation bug fixed. Problem was that order of rotation matters. Thus rotate X 10 then rotate Y 10 has a different result than rotate Y 10 then rotate X 10. All highlighter objects assumed x,y,z rotations in that order regardless of order that original rotations occurred in. Highlighter objects now match rotation based directly on rotation matrix of object being highlighted.
Done:
- Position change arrows: algorithm to shorten some arrows catches all instances for when arrows should be shortened. Now shortens arrows when they are very close together since that inhibits the ability to click on all of them.
- Note added to webpage about long download times if using a dial-up modem and the JRE is not already installed. Also noted that Java Web Start on Macs does not know how to download the proper JRE so it must be downloaded manually.
Done:
- Stick figures fade in and out as appropriate if we use position or zoom to manipulate one camera into being at same position as another or away from the same position as another camera.
- Stick figure for current camera is now set invisible as long as it remains the current camera. This prevents any possibility of accidently seeing it.
- Fixed bug with Look At. Cameras can now look at things on the same Z plane as them.
- Turned off animation from current camera to newly made one. Wait to show new camera view is usually too long and often confusing.
Done:
- Fixed minor issues with objects. Pyramid has been corrected. Ring shape is now same size as other objects. All objects begin with a max dimension of 1 unit.
- What about Preferences and AboutBox? Preferences isn't really needed. About Box could be cross platform *if* I signed the jars so that they could ask for all permissions. If I do that then Viewpoints can access the com.apple.eawt.* libraries on Macs that have system-dependent about box capabilities. However, I'd like to avoid signing the jars if possible so that Viewpoints can run in a complete sandbox environment and users will feel more confident about running the software. Alternately, I could have a menu item that says "about" but there really isnt' a good menu to put that in. If I add a help menu later then I should put the about menu item here.
- X, Y, and Z values for position and rotation now match in color the value they show. In other words, positive numbers are seen in the cooresponding "positive" color for that axis while negative numbers are shown in the corresponding "negative" color for that axis.
Done:
- Currently selected object is now highlighted.
- File input/output now works, mostly. (See Known Bugs.)
Done:
- Decided not to add buttons in Current View and Current Object panels to easily add, copy, delete & rename views and objects. This is to avoid "clutter" in the gui and keep the gui easy to understand.
Done:
- Should there be the option to turn off certain types of animations? (Animations refers to the visual representations of the changes to objects and cameras.) - Answer: no. The point of the program is in part to show how various points of view (cameras) relate via moving between them.
- File input/output is partially complete: Methods for interacting with files are in place. Next step: the content from Viewpoints needs String or stream i/o methods.
Done:
- Stick figures fade in and out as appropriate when we move from one camera to another. Currently this only happens in "Go To" in View menu and when selecting from drop down menu of camera names in view panel.
Done:
- Bounding box for camera avatar made to fit image. Quad3d for avatar was modified to be same rectangular shape as stick figure. Then u & v for texture were modified so that only the necessary part of the stick figure image shows. Therefore clicking nearby the stick figure no longer improperly selects that camera because the camera's avatar is no longer too big.
Done:
- Clone functions added and fixed so that Copy works in both View menu and Object menu.
- Numbering scheme for objects and cameras fixed to be more logical and keep clone names from repeating.
Done:
- Look-at function for cameras added and is available in View menu.
- Arrow getHead and getTail functions work now. GUI arrows for changing position, etc line up with camera's axes.
- GUI arrows now shorten when appropriate so that they don't overlap if two different axes happen to be parallel.
Done:
- Object and View names are now in alphabetical order in drop-down menus and other lists. Related data structures have been cleaned up.
Done:
- Object selection in world view is fixed so that clicking on a stick figure will select the camera it represents.
- Camera near plane and stick figure position relative to camera adjusted so that if camera is rotated it cannot accidently see its own avatar.
- Camera avatars (stick figures) cannot be viewed as objects in Object Panel. And cannot be modified as if they were separate entities than the cameras they represent.
- When cameras and/or objects are renamed, the new name is compared to existing object and view names to make sure the name is not already in use.
- Viewpoints web page now tests to see if it's running on a Macintosh. Many browsers in OS X don't yet support the Java Plug-in 1.4 but do have Java Web Start. Therefore for Macs only, the Java Plug-in test has been removed and a description of how to look to see if you have Java Web Start is given. All other platforms remain as before with full tests for Java Plug-in 1.4.
Done:
- Camera locations are now shown in the world by stick figures. Each figure is the same color as the camera it represents. That means changing the color in the View Panel now changes the color of that camera.
To Do (new entries):
- Modify object selection (by clicking in the main window) so that when stick figure is selected the appropriate camera is selected.
- Make sure camera avatars (stick figures) cannot be viewed as objects in Object Panel. And generally cannot be modified as if they were separate entities than the cameras they represent.
- Adjust camera near plane so that if camera is rotated it cannot accidently see its own avatar.
- Decide if there should be a look-at function for cameras and if so how to implement it.
Done:
- Objects can now be selected in the camera view. (Many hearty thanks to Jazz3d support!!!)
- Much unnecessary code has been removed from Viewpoints meaning faster downloads and less lag in the program. (JAR size has dropped from 200 KB to 96 KB.)
Done:
- Fixed issue with main window and it's components being smaller than they should be.
- Problems with Zoom function in Current View panel fixed.
- Problems with Size function in Current Object panel fixed.
Done:
- Set up appropriate Jazz3d licenses.
- Make sure JNLP files are set up properly.
- Set up Viewpoints.html to correctly look for the Java Plug-in 1.4
What's new:
As I mentioned before I'm now using Jazz3d classes for 3d graphics in Viewpoints. I've hooked up most of the interface of my program to Jazz3d which means these functions work:
- View menu: Go To Camera, Rename, New, Copy, Delete
- Object menu: Select, Rename, New, Copy, Delete
- Current View panel: drop-down menu for selecting a view, location, spin, zoom
- Current Object panel: drop-down menu for selecting an object, locatin, spin, color
See Viewpoints 3.0 for yourself. Note, the webpage doesn't yet check to see if your browser has Java Plug-in 1.4. If it doesn't, Viewpoints 3.0 might not run.
What's still left to do:
- Fix Size function in Current Object panel.
- Develop method of showing where cameras are in space. Basic idea: place a stick figure where each camera in the world. When complete, create icon that matches and show it as part of Current View panel (like Cube in Current Object panel). Also make sure changing color in Current View panel changes stick figure's color.
- Allow cameras and objects to be selected in the camera view.
- Set up appropriate Jazz3d licenses.
- Make sure JNLP files are set up properly.
- Set up Viewpoints.html to correctly look for the Java Plug-in 1.4 and create a web page with hints for why Viewpoints may not be running.
- File input/output.
- Decide whether to add buttons in Current View and Current Object panels to easily add, copy, delete & rename views and objects.
- Is the Edit menu really needed? If so, add functionality.
- What about Preferences and AboutBox? Can those be modified to be cross-platform?
- Should there be the option to turn off certain types of animations? (Animations refers to the visual representations of the changes to objects and cameras.)
- Determine if collision detection on cameras is a good idea.
- More lights?
- Are "Location", "Spin", "Size", and "Zoom" the best terms for "Position", "Rotation", "Scale" and "Zoom"?
I've decided that the 3D image rendering part should be Jazz3D not Java3D. This is because Jazz3D is 100% pure java, no native code. That simplifies things quite a bit.
Also, big news: I've finally gotten the proof-of-concept program working. That is, I now have Java, Swing, Java Plug-in, Java WebStart and Jazz3D all working together nicely. That means I'm down to just switching the connections between my interface and image rendering to Jazz3D. As I mentioned before, one of my goals is to make this program as easy to download as possible. My proof-of-concept is here. Please note that you must have the latest Java Plug-in (1.4) for this to work properly. I will be adding a check onto this html page that will see if that's the version you have but it is not there yet.
Currently I'm in the process of transitioning to a slightly different set up. My plan is to switch the guts (image rendering, not interface) to Java3D. However, Java3D would require an additional download on the part of the user. Since I wish to keep this program as easy to access as possible I need to minimize the number of downloads the user will need to do.
The solution I have found is to use Java Web Start. In this set up the user will only have to download one thing: Java Web Start. Java Web Start will then determine, via the configuration files I give it, what else is required to run my program. It will download these files for the user. Java Web Start also has a couple other very convient features for the user. Unlike a regular applet, once Java Web Start has downloaded the files for my program, it can run Viewpoints anytime including while the computer is not connected to the internet. Additionally, it will automatically check for any updates I've made and download them.
As far as programming is concerned, combining Java Web Start and Java3D has been a challenge in part because Java3D has native classes that require special permissions to run. This means that I must sign each jar file needed for my program. At this point I just have a few little quirks I'm trying to solve to get Java Web Start and Java3D to behave well together. After that, Java3D should be relatively easy to connect up to my interface. Also, since I will be signing my files they will be given more flexibility on the user's computer. This includes the ability to save files to the user's computer. This is important because I want the kids to be able to save the landscapes and pictures they create. I think Java Web Start may even provide some functionality for loading and saving local files.
In any case, while I'm debugging the Java3D-Java Web Start combination and while I link up my interface to Java3D I probably won't be updating Viewpoints on this site. But, as soon as I've got something that works well enough to see I'll put it up.
Additions and fixes:
- Viewpoints has a new color scheme.
- You can now click on an object or camera in the view window to select it. If you clicked on a camera the view will change to that camera's view.
- The function for renaming objects and views has been fixed and user-friendly error/help messages have been added to it.
- Horizon has been added. (But, there is a problem with the paint routine.)
- "Bunching" of axes for Position and Rotation has been solved.
- Some major internal data structures have been overhauled for optimization and ease of use.
- The change from one camera view to another is now animated when "animate" has been turned on in Options menu. Camera changes are animated when triggered by picking a different Current View, by the menu item View->Go To and by clicking on a camera in the view window.
- The Duplicate menu option has been debugged. Also, the Duplicate menu option is now known as Copy.
- Menu item View->Select has been removed since it serves the same function as View->Go To.
- The image showing where a camera is in 3d space (it looks like a stick figure) now properly rotates and no longer loses it's head in the process.
What's still left to do:
- Fix the camera painting routine to catch when two objects overlap (this part is almost complete) and figure out a good way to draw this.
- Solve the painting problems associated with the horizon. The solution will include the addition of a clipping algorithm.
- Determine if there is any way to make the applet version run faster.
- Add other objects like spheres and pyramids/cones.
- Add file open and save.
- Make light change with camera.
- Perhaps add a visual connection between screen coordinates and values (like tic-marks)?
- Find a way to fix flashing in animation.
What's new:
- Selected Objects and Views are highlighted. Example: if the data for a green square is currently being shown on the right hand side of the window, the drawing of the green square will have a yellow outline around it. (Sorry about the yellow color. I will be changing it later.)
- The view (camera) can now be zoomed in and out. The image to control zoom is new also.
Update:
Viewpoints now runs as an applet. Please be patient since it can take a little while to load.
Note: Don't try to run Viewpoints as an applet right now. The program won't be launched properly.
Version information:
This is version 2.1 of Viewpoints. Version 2.1 has more intuitive controls and better graphics.What's new in Viewpoints 2.1?
Most of the changes that have occurred since version 2.0 are in the interface. I developed a way to draw 2D objects in the 3D space. Visual controls for manipulating Position, Rotation, Scale or Zoom have been added. The arrows for changing the increment values have been fixed. Also, I've connected the values and directions for each axis through color.
Note: Don't try to run Viewpoints as an applet right now. The program won't be launched properly.
Version information:
I'm on version 2.0 of Viewpoints. Version 2.0 has a new interface that is hopefully more intuitive than its predecessor.About the interface:
As of now, the functionality is there, but the pretty graphics and intuitive controls for value manipulation are not. I'm using some temporary images that will definitly go away soon to be replaced by significantly better ones.Summary of progress to date:
Much of the guts of the program are complete and bug free (so far as I know). The code keeps getting better the more I work with it and better I understand Java. There are still parts that are missing. Here is part of my list of things to do (in no particular order):- Figure out why Viewpoints runs fine as an application but doesn't run as an applet. Right now the applet is basically just a button that launches the application window when clicked on. The applet runs, but the button won't bring up the application window.
- Develop a way to put 2D images facing the camera into their proper place in 3D space. Use this information to determine a better way to draw the arrows for the coordinate axes. When this is done, add symbols for the cameras into the 3D space so that you can see where the cameras are in relation to the space. Then add a toggle to the options menu for whether or not to show the where the cameras are.
- Determine the best way to draw controls for manipulating the position, rotation and scale or zoom of the objects and views.
- Make up and down arrows for increment changes. The temporary ones I found are the wrong size and color.
- Fix the camera painting routine to catch when two objects overlap and figure out a good way to draw this.
- Change the applet to look better and be more explainatory.
- Add camera zoom ability.
- Add highlight and unhighlight ability to objects (and later cameras) so that it's easy to tell which one is currently selected.
- Determine if there is any way to make the applet version run faster.
- Add other objects like spheres and pyramids.
- Add file open and save.
- Debug "Duplicate" function in View and Object menus.




