#VRML V2.0 utf8 PROTO genericFishProto[ exposedField MFString skinTexture [ "" ] exposedField SFVec3f fishScale 1 1 1 exposedField SFColor fishDifColor 0.7 0.7 0.7 exposedField SFTime cycle 50 exposedField MFFloat rotationKeys [ 0 0.25 0.5 0.75 ] exposedField MFRotation rotationKeyValues [ 0 1 0 -0 0 1 0 -90 0 1 0 -180 0 1 0 -270 ] exposedField MFFloat translationKeys [ 0 1 ] exposedField MFVec3f translationKeyValues [ 4 0 0 4 0 0 ] ] { DEF WAY Transform{ children Transform{ rotation 1 0 0 90 children[ Transform{ scale IS fishScale #...........SCALE expo children [ #******************************************************* # FISH BODY ( include TAIL ) # #******************************************************* Shape { appearance Appearance { material Material { diffuseColor IS fishDifColor #...........DIFFUSE expo } texture ImageTexture{ url IS skinTexture #...........TEXTURE expo } } geometry DEF FISH_SHAPE Extrusion { creaseAngle 1.57 crossSection [ 1.00 0.00, 0.92 -0.38, 0.71 -0.71, 0.38 -0.92, 0.00 -1.00, -0.38 -0.92, -0.71 -0.71, -0.92 -0.38, -1.00 -0.00, -0.92 0.38, -0.71 0.71, -0.38 0.92, 0.00 1.00, 0.38 0.92, 0.71 0.71, 0.92 0.38, 1.00 0.00 ] spine [ 0 0.5 0, 0 0.476 0, 0 0.31 0, 0 0.19 0, 0 0 0, 0 -0.238 0, 0 -0.357 0, 0 -0.5 0 ] scale[ 0.03 0.03 0.1 0.15, 0.4 0.7, 0.5 0.75, 0.4 0.55, 0.2 0.3, 0.05 0.1, 0.03 0.6 ] } }#............end fish body................ #******************************************************* # FIN SHAPE # #******************************************************* Shape { appearance DEF FIN_SKIN Appearance { material Material { diffuseColor 0.7 0.7 0.7 transparency 0.3 } } geometry IndexedFaceSet { coord DEF PELVIC Coordinate{ point[ 0 0.166 0.6, 0 0.166 -0.7, 0 -0.285 -0.3, 0 -0.19 0.5, ] } coordIndex[ 0, 1, 2 , 3, -1 ] solid FALSE } }#.............end fin shape.................. #******************************************************* # EYES # #******************************************************* Transform{ translation 0.3 0.31 -0.4 children DEF EYE Shape{ appearance Appearance { material Material { shininess 1 diffuseColor 0.5 0.5 0.5 specularColor 0.3 0.3 0.3 } } geometry Sphere{ radius 0.03 } } } Transform{ translation -0.3 0.31 -0.4 children USE EYE } #............end eyes................ #******************************************************* # MOUTH # #******************************************************* Transform{ scale 2.6 1 0.7 translation 0 0.462 -0.1 children USE EYE } #............end mouth................ #******************************************************* # LEFT & RIGHT PECTORAL # #******************************************************* Transform{ translation -0.3 0.285 0.1 children DEF LEFT_PECTORAL Transform{ children Shape{ appearance USE FIN_SKIN geometry IndexedFaceSet { coord Coordinate{ point[ 0 0 0, -0.25 0 -0.2, -0.23 -0 0.3 ] } coordIndex[ 0, 1, 2, -1 ] solid FALSE } } } } Transform{ translation 0.3 0.285 0.1 children DEF RIGHT_PECTORAL Transform{ children Shape{ appearance USE FIN_SKIN geometry IndexedFaceSet { coord Coordinate{ point[ 0 0 0, 0.25 0 -0.2, 0.23 -0 0.3 ] } coordIndex[ 0, 1, 2, -1 ] solid FALSE } } } } #............end pectorals................ ] }#....................END SCALING..................... ] }#.................END WHOLE FISH BODY......... }#.................END ROUTE......... #******************************************************* # TIMER # #******************************************************* DEF ROUTE_TIMER TimeSensor { cycleInterval IS cycle #...........cycle expo loop TRUE } DEF LOCAL_TIMER TimeSensor { cycleInterval 1.5 loop TRUE } #******************************************************* # INTERPOLATORs # #******************************************************* DEF ROTATE_FISH OrientationInterpolator{ key IS rotationKeys #...........rot.key expo keyValue IS rotationKeyValues #...........rot.keyVals expo } DEF TRANSLATE_FISH PositionInterpolator{ key IS translationKeys #...........trans.key expo keyValue IS translationKeyValues #...........trnas.keyVals expo } DEF WAGGLER CoordinateInterpolator { key [ 0.0, 0.5, 1.0 ] keyValue [ # time 0.0 position 0 0.5 0, 0 0.476 0, 0 0.31 0, 0 0.19 0, -0.03 0 0, 0.1 -0.238 0, 0.2 -0.357 0, 0.3 -0.5 0 # time 0.5 position 0 0.5 0, 0 0.476 0, 0 0.31 0, 0 0.19 0, 0.03 0 0, -0.1 -0.238 0, -0.2 -0.357 0, -0.3 -0.5 0 # time 1.0 position 0 0.5 0, 0 0.476 0, 0 0.31 0, 0 0.19 0, -0.03 0 0, 0.1 -0.238 0, 0.2 -0.357 0, 0.3 -0.5 0 ] } DEF FIN_POINTS CoordinateInterpolator { key [ 0.0, 0.5, 1.0 ] keyValue [ # time 0.0 position 0 0.166 0.6, 0 0.166 -0.7, 0.2 -0.285 -0.3, 0.2 -0.19 0.5, # time 0.5 position 0 0.166 0.6, 0 0.166 -0.7, -0.2 -0.285 -0.3, -0.2 -0.19 0.5, # time 1.0 position 0 0.166 0.6, 0 0.166 -0.7, 0.2 -0.285 -0.3, 0.2 -0.19 0.5, ] } DEF LEFT_PECTORAL_ROT OrientationInterpolator{ key[ 0 0.3 0.7 1 ] keyValue[ 0 0 1 20 0 0 1 0 0 0 1 0 0 0 1 20 ] } DEF RIGHT_PECTORAL_ROT OrientationInterpolator{ key[ 0 0.3 0.7 1 ] keyValue[ 0 0 1 -20 0 0 1 0 0 0 1 0 0 0 1 -20 ] } #******************************************************* # ROUTEs # #******************************************************* ROUTE ROUTE_TIMER.fraction_changed TO TRANSLATE_FISH.set_fraction ROUTE TRANSLATE_FISH.value_changed TO WAY.set_translation ROUTE ROUTE_TIMER.fraction_changed TO ROTATE_FISH.set_fraction ROUTE ROTATE_FISH.value_changed TO WAY.set_rotation ROUTE LOCAL_TIMER.fraction_changed TO WAGGLER.set_fraction ROUTE WAGGLER.value_changed TO FISH_SHAPE.set_spine ROUTE LOCAL_TIMER.fraction_changed TO FIN_POINTS.set_fraction ROUTE FIN_POINTS.value_changed TO PELVIC.set_point ROUTE LOCAL_TIMER.fraction_changed TO LEFT_PECTORAL_ROT.set_fraction ROUTE LEFT_PECTORAL_ROT.value_changed TO LEFT_PECTORAL.set_rotation ROUTE LOCAL_TIMER.fraction_changed TO RIGHT_PECTORAL_ROT.set_fraction ROUTE RIGHT_PECTORAL_ROT.value_changed TO RIGHT_PECTORAL.set_rotation }