Kurt Schwehr Copyright (C) 2003 kdschwehr _at_ ucsd dot edu DRAFT DRAFT DRAFT Viz Lecture Series Lecture 5 $Revision: 702 $
CONTENTS VRML/IV MODELS DxfToIv CORE RESISTIVITY MAKING A MOVIE MAKING WEB THUMBNAILS XDIALOG/XWIT MAGMAP (Cande) - not started MAGMAP (Parker) - not started SOUND - more links TERRAIN - ALPHA features ANIMATE
VRML/IV MODELS There are a number of ways to create VRML 1.0 or OpenInventor models that you can use in your visualizations. An easy way is to use the export functions of AutoCad / Mechanical Desktop to products. Since I don't know how to use either, I'll leave it up to you to figure out how to create a model in these CAD (Computer Aided Design) programs. In this lecture, I have included three models to illustrate some of the things that can be done. The first is a model of a dart that I found at the 3D Cafe's Models (http://www.3dcafe.com/avatar/dart.wrl). You can use this model to mark locations of interest in your 3D terrains. This was used for the Mars Pathfinder mission to plan out way points for the Sojourner rover to drive to. This model was apparently created on MS Windows using an old program called Pioneer. To see it: ivview dart.wrl The second model is of a ship. The original model was provided by Mike McCann at MBARI in VRML 2 format. Since standard SGI OpenInventor can not read VRML2, I converted the file to VRML 1.0 by hand using emacs and gview. The model is not as nice as the original VRML 2 file, but it can be used to represent a ship in the 3D world. ivview westernflyer.iv The last 3D model was made by Laurent Beguery using Mechanical Desktop 6. He took a few measurements and photos of the XStar EdgeTech chirp while it was on the deck of the R/V Sproul and from them created a CAD model of the fish. He then exported the file to VRML 1.0. To see the model: ivview edgetech-chirp4.wrl For more information: 3D Cafe Models Western Flyer EdgeTech Pioneer - old link
DxfToIv Often you will want to bring in a model of some object from a CAD program, but all you have is a dxf. Some versions of OpenInventor do know how to read dxf files, but not the standard SGI version. SGI's include a utility which can convert dxf to iv for you. It does not handle every type of dxf, but it often gets the job done. Here is an example of a marker created in FormZ by Peter Coppin which was then exported to dxf. /usr/sbin/DxfToIv flag5.dxf > flag5.iv ivview flag5.iv For more info: man DxfToIv man AliasToIv man ObjToIv man SlaToIv man SoftimageToIv http://www.bigsignal.net/ http://www.eventscope.org/ http://schwehr.org/yellowstone/ - Look at the 3D Models That are tons of 3D file formats out there and plenty of variations on each. If you have MS-Windows, there are a number of tools that you can use. One that has been tried (thanks to JCHill) is the Myriad converter. They have a free trial so you are able to see if it can handle the type of conversions that you would like to do. If you are running Mac OSX, you can use it within VirtualPC. For more info: http://www.myriadviewer.com/formats.htm http://www.microsoft.com/windowsxp/virtualpc/
Core Resistivity Recently, Jill Weinberger showed me an interesting image of a bore hole resistivity log. It was presented in just an xy gif image, so I put together a short demo that illustrates a couple ideas in OpenInventor. This first is just that the default texture coordinates for the basic geometric shapes are often exactly what you would like. Here we want to map a 360 image onto a cylinder which represents the walls of the bore hole. Here is a short bit of OpenInventor to just that: Texture2 { filename "resistcore.gif" model DECAL } Cylinder { parts SIDES radius 0.1 height 2 } This gives us a hollow cylinder with the texture on both the inside and outside. Then if we add a flat view along side the core, we can get two intuitive coordinate frames that compliment each other. The final product is: ivview resistcore.iv A simple cylinder gives us the opportunity to explore some topics that are much harder to understand on complext surfaces. There is a sample program in the XCore package called makeCylinder that creates pretty much what the above two lines in resistcore.iv do. Run it and take a look at the output. It takes the width, height, number of sides to the cylinder, the texture file and output file name. makeCylinder 0.1 2 5 resistcore.gif resist-cyl.iv This generates an Inventor file that uses PER_VERTEX_INDEXED material binding and shows how to do texture coordinates and surface normals. The output file is a good example that is not too complex. For more information: man SoBaseColor man SoMaterialBinding man SoTexture2 man SoTextureCoordinate2 man SoNormal
MAKING A MOVIE A common task is to make a quick movie of some visualization to give a sense of the model changing and/or the point of view moving around. In lecture 1, I introduced the snapshot command to grabbing images of parts of the screen. You can try xwd (X-Windows Dump) but that often is unable to grab the 3D graphics portion of the screen. First use this program to grab a sequence of images. Name them by number and make sure that you pad the file names with zeros so that all filenames are the same length. This will cause a listing of files to come in the order that we would like to have the images. For example, with less than a thousand images, I could safely use 001.rgb 002.rgb, 003.rgb, etc. For this I am making a movie of the Santa Barbara terrain for Lecture 4. Here are the images: ls -l ??.rgb | awk '{print $5,$9}' 318783 01.rgb 311174 02.rgb 306761 03.rgb 296799 04.rgb 278024 05.rgb 249777 06.rgb 294751 07.rgb 370806 08.rgb 528537 09.rgb 704481 10.rgb 795173 11.rgb 863885 12.rgb 764403 13.rgb 755223 14.rgb 846934 15.rgb 897092 16.rgb 815515 17.rgb 850898 18.rgb 819993 19.rgb 815437 20.rgb 747883 21.rgb First, we need to make the images smaller so that these sample movies do not end up being too large. #!/bin/bash for i in ??.rgb; do sgitopnm $i | pnmscale -xysize 200 200 | pnmtosgi > ${i%%.rgb}b.rgb done In Lecture 4, we used gifsicle to create an animated gif. This time we would like to make some real movies. On the SGI there is a handy command line movie tool that takes individual images and combined them to make movies: makemovie. Here we make a couple quicktime movies, each with slightly different parameters. makemovie -o santabarbara_qtv.mov -f qt -c qt_video -r 1 \ -s 100,100 ??.rgb makemovie -o santabarbara_qanim.mov -f qt -c qt_anim -r 1 ??b.rgb makemovie -o santabarbara_qjpg.mov -f qt -c jpeg -r 1 ??b.rgb You can edit your movie with SGI's moviemaker program. For more information: man makemovie man snapshot man moviemaker
MAKING WEB THUMBNAILS There are tons of different options to create thumbnails for web pages. You can use imagemagick, php, etc. But here is a little sample script of what I frequently use that relies on the netpbm tools. This script is setup for converting SGI rgb images (e.g. snap.rgb from snapshot) to jpg images. FIX: recode so that the url shows up right #!/bin/bash for image in [a-zA-Z0-9]*.rgb; do i=${image%%.rgb} sgitopnm $image | pnmscale -xysize 100 100 | pnmtojpeg > _thumb${i}.jpg sgitopnm $image | pnmtojpeg > ${i}.jpg echo ""\ >> HEADER.html done For more informatio: http://netpbm.sourceforge.net/ This package is available through fink on Mac OS X.
XDIALOG/XWIT Alex always get frustrated with me that I don't use perl or python for my scripts and that I always go back to bash. Well, sort Alex, but I'm doing it again here. But I promise that I'll keep trying to force myself back to real scripting languages. Hey, I did use perl in the last lecture and I've been calling python instead of awk to do simple math. xwit - http://www.slack.com/sw.html http://freshmeat.net/projects/xdialog http://xdialog.dyns.net/ man xmessage
MAGMAP (Cande) Steve Cande's magnetic lineations database.
MAGMAP (Parker) Bob Parker's magmap for plotting spherical harmonic models.
MORE LINKS TO SOUND PROGRAMS http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html http://fife.speech.cs.cmu.edu/flite/index.html
TERRAIN - ALPHA features There are a couple of features in the X-Core terrain program that are in early development stages. They work, but just barely. The first is reduction of mesh sizes. This feature just prevent the code from writing out the NaN nodes. For grids that have lots of holes, this is a huge memory and disk space saver. The second feature is a simple color palette support. The code currently can not read in cpt files from gmt, but it does have one default color table. To turn on these features, you need to set the XCORE_CPT environment variable. Like this for bash: export XCORE_CPT="yes" To turn off this hidden feature, do this: unset XCORE_CPT
ANIMATE Often you would like animate an object such as a ship, AUV, or ROV in your scene. I have implimented a cheap hack in xcore to allow you animate one object. Unfortunately, you can only animate one object, and once it starts, it will loop forever. Hopefully I will raplace this hack with a node-kit general implimentation, but for now here is how to use this feature. This hack is available in xcore-0.7 until ??? First you need to create an Inventor model that has a translation node that is tagged with a "DEF ANIMATE_TR" name. Is is a very basic example (animate.iv): #Inventor V2.1 ascii Sphere{} DEF ANIMATE_TR Translation {translation 1 1 1} Cube{} Then create an xyz ascii file of all the positions you would like to loop through (animate_pos.xyz): 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 5 1 0 5 2 0 5 3 0 5 4 0 5 5 0 4 4 0 3 3 0 2 2 1 1 1 1 0 0 0 Then you can optionally set two environment variables that change the default filename to use and the time between each position. Here is with bash: export XCORE_ANIMATE_FILE=mypositions.xyz export XCORE_ANIMATE_INTERVAL=0.1 or csh/tcsh: setenv XCORE_ANIMATE_FILE mypositions.xyz setenv XCORE_ANIMATE_INTERVAL 0.1 Now view the file in xcore-ivview: xcore-ivview animate.iv You will see your model, but it will not be moving. You need to start the animation. Press the ESC key to change the hand to a pointer. This will let you use the keyboard in the viewer. Then press 'a' to begin the animation. When you do this, it will try to load your xyz file and start moving the object.