home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / PCGLOVE / GLOVE / OBJGLV.ZIP / OOPGLOVE.DOC < prev    next >
Text File  |  1993-05-12  |  10KB  |  209 lines

  1. PLEASE NOTE:  This file is in chronological order, not REVERSE chrono
  2. order like most revision histories.  See the end of the file for the
  3. most recent additions.
  4.  
  5.  
  6. ============================================================================
  7.   Credits:
  8. ----------------------------------------------------------------------------
  9.   Originally "power.c" (c) manfredo 9/91
  10.   Address: manfredo@opal.cs.tu-berlin.de
  11. ----------------------------------------------------------------------------
  12.   Ported to PC compatibles by Greg Alt 10/91
  13.   Address: galt@peruvian.utah.edu or galt@es.dsd.com
  14. ----------------------------------------------------------------------------
  15.   Substantially rewritten by Dave Stampe (c) 1991: PWRFILT.C
  16.   No cash, no warranty, no flames.  This stuff works great, so gimme credit.
  17.   Address: dstamp@watserv1.uwaterloo.ca                   17/10/91
  18. ----------------------------------------------------------------------------
  19.   Converted to C++ by Mitch Allen 11/91
  20.   Address: 76040.2757@compuserve.com
  21.  
  22.   This source was adapted from theGlove.c contained in pglove.zip
  23.   It is suggested that you download that file for instructions on
  24.   how to build an interface for the Power Glove to your PC.
  25.  
  26. (TWOGLOVE.DOC contain all necessary information
  27.  on connecting the glove to a parallel port.  -MTP)
  28.  
  29.   Significant enhancements:
  30.  
  31.   - Glove code now contained in a class.
  32.  
  33.   - In theory multiple glove objects could be spawned easily.
  34.  
  35.     Helpful if someone ever invents one for we lefties.
  36.  
  37.   - Derived glove classes may be developed.
  38.  
  39. // Made more object-oriented by Mark Pflaging 5/29/92.
  40. //    Compuserve 72033, 1552
  41. //
  42. // ReDesigned for a 486/33.  I am trying to paramaterize the
  43. // timing constraints so that it will be easy for "someone"
  44. // or "something" to adjust them for the particular computer
  45. // it is running on.  These parameters appear in calls to 'Channel'
  46. // constructors, see "SMOOTH.HPP".
  47. //
  48. // I spent some time experimenting with the hardwired values in
  49. // the fdelay calls, and making calls to fdelay.
  50. //
  51. // The graphics are now autodeteced and autoscaled depending on your
  52. // hardware's highest res graphics!  I'm developing this on
  53. // a hercules graphics card while I await a 24-bit color card.
  54. // (boy that's an upgrade!)
  55. //
  56. // Somebody still needs to do autodetection
  57. // of the port that the glove is connected to.  Compuserve
  58. // files describe how to build the parallel port interface.
  59. // Another goal was to break Mitch's big objects into smaller
  60. // ones whose functions are more specific.  I am probably going
  61. // to move this thing to Windows, so the more object-oriented the
  62. // better.  But mostly, I'm gonna make these graphics a lot better.
  63. //
  64. //  Summary of improvements to graphics:
  65. //      Inside the former recatangle appears a representation of the
  66. //  glove, movable fingers included.  If you twist your wrist, the
  67. //  glove rotates too!  This is accomplished using a "metagraphics"
  68. //  approach, which essentially takes a set of points describing
  69. //  the still hand and applies a mathematical translation to
  70. //  the "deglitched" glove input.
  71. //
  72. //  I also made the buttons turn on and off certain features, these are
  73. //  documented in the on-line help.
  74. //
  75. //   There's a lot more that can be done with this code!
  76. //
  77. // RELEASE 2 9/28/92   Mark Pflaging
  78. //   Many, many nice improvements have been made!
  79. //
  80. //   Most importantly, the code is now machine independent!
  81. //   This was achieved by precisely computing delay constraints
  82. //   for the inner delay loops.  Code has been tested on a slow
  83. //   286 up to a 486/50 and should work for faster machines when
  84. //   they are available.  Thanks to Kendall Bennett for the
  85. //   indispensable timer classes.  Also thanks to D. P. Research
  86. //   Company for providing guidance and the basic strategy for
  87. //   computing the timing constraints.
  88. //
  89. //   Secondly, the glove sampling is now interrupt driven!
  90. //   I cannot give a full explanation of interrupts here for
  91. //   those not in the know.  To put it simply, there is a way
  92. //   to set a chip on motherboard to generate an "interrupt"
  93. //   at an extremely predictable rate.  Every time an interrupt
  94. //   occurs, a piece of code is called which samples the glove.
  95. //   The beauty of it is that the computer can be doing some-
  96. //   thing completely different between interrupts!  The rate
  97. //   of sampling can be precisely controlled, and appears to
  98. //   take place in the "background."  This code (ISR.CPP and
  99. //   ISR.HPP) is a C++ conversion of code in Dave Stampe's
  100. //   REND386 V3.  So thanks go to him for making his source
  101. //   available, and giving me a clue as to how interrupts work.
  102. //
  103. //   Thirdly, MANY parameters that control both the driver and
  104. //   the demo program are read from the GLOVE.INI file which
  105. //   has a format many will recognize from MS Windows.  The code
  106. //   for reading this file was written TOTALLY from scratch!
  107. //   It is a GENERAL PURPOSE set of classes that is, dare I
  108. //   say, an example of rather advanced Object Oriented Programming.
  109. //   You may find these classes (INI.HPP and INI.CPP) useful in
  110. //   many other applications!  It is a great way to allow users
  111. //   to change program parameters without recompiling or having
  112. //   to remember 16 billion command line switches.  Also, it is
  113. //   a somewhat standard format.  See GLOVE.INI for program
  114. //   specific parameter descriptions. TESTINI.CPP contains a
  115. //   sloppy test of the class.
  116. //
  117. //   Some improvements have been made to the class hierarchy
  118. //   of the driver. It should now be easier to understand.
  119. //   The problem with the buttons has been fixed.
  120. //
  121. //   In the intervening time between releases, I have learned a
  122. //   lot about how the glove behaves in different situations.
  123. //   If you are experiencing problems such as jumpiness or
  124. //   dimensions not responding, read HELPME!.DOC.  GLITCHY
  125. //   RESPONSE IS NOT THE FAULT OF THIS CODE!  There is VERY
  126. //   little I could do with software to eliminate the
  127. //   problems with shadowing.  But you need NOT get used to it!
  128. //   My glove is responding near the accuracy of a mouse!!
  129. //   Yours can too!  Read HELPME!.DOC!
  130. //
  131. //   Well, sorry it took so long, but I hope you like it and/or
  132. //   find it useful.  The next step is to add an event queue
  133. //   that holds glove, mouse, and keyboard events.  Then I will
  134. //   add a module to interpret glove gestures and put them
  135. //   back into the queue.
  136. //
  137. //   All code not otherwise indicated has been
  138. //   written independently by Mark Pflaging.  Credit has been
  139. //   given in those sections of the code which did not
  140. //   originate with me.  Since the original parts of the code
  141. //   are copyrighted, you must credit Mark Pflaging in order
  142. //   to legally use the original code for ANY purpose.
  143. //
  144. // RELEASE 2.1 11/20/92   Mark Pflaging
  145. //   This is basically a maintenance release, but the discerning
  146. //   lurker will notice a lot of nice touches.
  147. //   1) Erroneous PGPINS.GIF no longer here.
  148. //   2) Now compiles under Borland C++ 3.1.
  149. //   3) If there is no glove attached, any key will get you out.
  150. //   4) The last "piece" of the thumb is now present.
  151. //   5) Timings are printed even if glove is not found.
  152. //   6) Glove's arrow keys now change the color of the moving cursor.
  153. //   7) Smoothing functions can be turned off from glove.ini.
  154. //   8) 'makefiles' now work.
  155. //
  156. //   Most importantly, the driver compiles for Windows!!
  157. //   The full demo is not in place for Windows yet,
  158. //   but there is a simplified demo that works under Windows & DOS.
  159. //   See WINDOWS.DOC for more information.
  160. //
  161. //   More thanks:
  162. //    To Mike Ogrinz for "discovering" how to make the LEDs
  163. //    stay on instead of blink (sorry I forgot you last time, Mike.)
  164. //
  165. //    To PCVR, whom are publishing an article about this code.
  166. //
  167. //    To VRASP, for, well, being VRASP.
  168. //
  169. //   RELEASE 3.0  (5/12/93):
  170. //   New features:
  171. //   1) Support for two gloves simultaneously!  The code supports
  172. //    two right handed gloves or a right and a left handed glove
  173. //    (or two lefts) through a setting in GLOVE.INI.
  174. //   2) Gesture recognition completed!  See GESTURE.TXT for more
  175. //    info.  This is a very powerful feature that may take some
  176. //    time to fully appreciate.
  177. //   3) Full Windows "Demo" program completed!  A neat feature of
  178. //    the Windows demo is that it can send sounds to the Windows
  179. //    3.1 Multimedia interface upon reciept of gestures.  See
  180. //    GLOVE.INI.
  181. //   4) This code has been integrated with Rend386 (Version 4) which
  182. //    yields some neat benefits.  You can use gestures to fly
  183. //    around in the world.  And you can have two gloves visible
  184. //    at the same time, and use them simultaneously to either fly
  185. //    around or select and move objects.  See DEMO4B.DOC (if included).
  186. //   5) There is a rudimentary "glove-mouse" driver that works
  187. //    in Windows.  It lets you use the glove to control the mouse
  188. //    cursor.  There's a bunch of bugs, but you can use it to
  189. //    play solitaire or chess or whatever.  That is, until
  190. //    you start feeling that sharp pain in your arm!!!!!!!
  191. //
  192. //   I'm not sure if you'd consider this a feature or not, but
  193. //   full source code is no longer included in the freeware
  194. //   distribution.  You can purchase the compiled libraries
  195. //   and header files, or the full soruce code.  Most customers
  196. //   will only need the libraries.  I do not intend to change these
  197. //   libraries in any major way.  They should now be considered to
  198. //   be complete modules.  See PRODUCT.TXT for ordering info.
  199. //
  200. //      !~\         /~!
  201. //      |   \     /   |
  202. //      !     \ /     !    A"A  |~~~\ |  /
  203. //      |      V      |   A___A |___/ |K
  204. //      !             !   A   A | \   |  \
  205. //      |             |   _____/    \______
  206. //      V             V
  207. //     -^-           -^-
  208. //
  209.