From 4f5f017bdf452419ad396346bacad623acb0f41c Mon Sep 17 00:00:00 2001 From: Travis CI Date: Thu, 9 May 2019 20:32:44 +0000 Subject: Gem 01b1861db023a225d01a4d5a519cf54f09f631f5 osx/i386 built 'master:01b1861db023a225d01a4d5a519cf54f09f631f5' for osx/i386 --- Gem/COPYING.txt | 96 +- Gem/Gem.pd_darwin | Bin 5075216 -> 5075216 bytes Gem/GnuGPL.LICENSE.txt | 580 +++--- Gem/LICENSE.txt | 54 +- Gem/cMatrix.html | 540 ++--- Gem/examples/data/Toon.frag | 122 +- Gem/examples/data/Toon.vert | 108 +- Gem/examples/data/valcolor.tab | 12 +- Gem/examples/data/valmotion.tab | 16 +- Gem/examples/data/venus.mtl | 18 +- Gem/examples/data/venus.obj | 4294 +++++++++++++++++++-------------------- Gem/gem_filmAVF.so | Bin 55996 -> 55996 bytes Gem/gem_imageIO.so | Bin 37584 -> 37584 bytes Gem/gem_imageJPEG.so | Bin 49088 -> 49088 bytes Gem/gem_imageSGI.so | Bin 56268 -> 56268 bytes Gem/gem_imageSTB.so | Bin 201256 -> 201256 bytes Gem/gem_imageTIFF.so | Bin 64236 -> 64236 bytes Gem/gem_modelOBJ.so | Bin 97560 -> 97560 bytes Gem/gem_videoAVF.so | Bin 61172 -> 61172 bytes Gem/gemcocoawindow.pd_darwin | Bin 39192 -> 39192 bytes Gem/gemglutwindow.pd_darwin | Bin 41924 -> 41924 bytes Gem/gemmacoswindow.pd_darwin | Bin 39044 -> 39044 bytes Gem/manual/Advanced.html | 54 +- Gem/manual/BasicObj.html | 230 +-- Gem/manual/GemFaq.html | 1334 ++++++------ Gem/manual/GemWPd.html | 280 +-- Gem/manual/Gloss.html | 82 +- Gem/manual/Images.html | 224 +- Gem/manual/Input.html | 38 +- Gem/manual/Intro.html | 124 +- Gem/manual/Lighting.html | 214 +- Gem/manual/ListObjects.html | 462 ++--- Gem/manual/Particles.html | 38 +- Gem/manual/Pixes.html | 210 +- Gem/manual/Texture.html | 252 +-- Gem/manual/Utility.html | 298 +-- Gem/manual/WriteCode.html | 82 +- Gem/manual/index.html | 134 +- Gem/pix_drum.pd_darwin | Bin 25416 -> 25416 bytes Gem/pix_fiducialtrack.pd_darwin | Bin 69120 -> 69120 bytes Gem/pix_hit.pd_darwin | Bin 23432 -> 23432 bytes Gem/pix_mano.pd_darwin | Bin 39660 -> 39660 bytes Gem/rgb2hsv-help.pd | 42 +- 43 files changed, 4969 insertions(+), 4969 deletions(-) diff --git a/Gem/COPYING.txt b/Gem/COPYING.txt index e54306d..07811fe 100644 --- a/Gem/COPYING.txt +++ b/Gem/COPYING.txt @@ -1,48 +1,48 @@ -GEM - Graphics Environment for Multimedia -Copyright © 1997-2000 Mark Danks -Copyright © Günter Geiger -Copyright © 2001-2011 IOhannes m zmölnig, -Copyright © 2003-2007 James Tittle II, -Copyright © 2003-2008 Chris Clepper - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . - -In the official GEM distribution, the GNU General Public License is -in the file GnuGPL.LICENSE - ---------------------------------------------------------- - - ACKNOWLEDGMENTS - ---------------------------------------------------------- -Not all of the source code provided here has entirely been written by me. -I would like to point at the great openGL-tutorials at http://nehe.gamedev.net -Since these are tutorials, there is no copyright notice here. -Some of the pix_fx code is borrowed from effecTV by Kentarou Fukuchi et al. -at http://effectv.sourceforge.net released under the Gnu GPL, some other pix_fx -code has been ported from Pete Warden's fine collection of FreeFrame plugins at -http://petewarden.com released under the Gnu GPL. - ---------------------------------------------------------- - - OTHER COPYRIGHT NOTICES - ---------------------------------------------------------- - -particle: - Author: David McAllister - davemc[AT]cs.unc.edu - http://www.cs.unc.edu/~davemc/Particle/ - Copyright (c) 1998 David K. McAllister - +GEM - Graphics Environment for Multimedia +Copyright © 1997-2000 Mark Danks +Copyright © Günter Geiger +Copyright © 2001-2019 IOhannes m zmölnig, +Copyright © 2003-2007 James Tittle II, +Copyright © 2003-2008 Chris Clepper + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . + +In the official GEM distribution, the GNU General Public License is +in the file GnuGPL.LICENSE + +--------------------------------------------------------- + + ACKNOWLEDGMENTS + +--------------------------------------------------------- +Not all of the source code provided here has entirely been written by me. +I would like to point at the great openGL-tutorials at http://nehe.gamedev.net +Since these are tutorials, there is no copyright notice here. +Some of the pix_fx code is borrowed from effecTV by Kentarou Fukuchi et al. +at http://effectv.sourceforge.net released under the Gnu GPL, some other pix_fx +code has been ported from Pete Warden's fine collection of FreeFrame plugins at +http://petewarden.com released under the Gnu GPL. + +--------------------------------------------------------- + + OTHER COPYRIGHT NOTICES + +--------------------------------------------------------- + +particle: + Author: David McAllister + davemc[AT]cs.unc.edu + http://www.cs.unc.edu/~davemc/Particle/ + Copyright (c) 1998 David K. McAllister + License: GNU Lesser General Public License, version 2.1 or later diff --git a/Gem/Gem.pd_darwin b/Gem/Gem.pd_darwin index 724aa11..b0ef485 100755 Binary files a/Gem/Gem.pd_darwin and b/Gem/Gem.pd_darwin differ diff --git a/Gem/GnuGPL.LICENSE.txt b/Gem/GnuGPL.LICENSE.txt index fa0bef4..838e31a 100644 --- a/Gem/GnuGPL.LICENSE.txt +++ b/Gem/GnuGPL.LICENSE.txt @@ -1,290 +1,290 @@ -GNU GENERAL PUBLIC LICENSE - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom -to share and change it. By contrast, the GNU General Public License is -intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This General -Public License applies to most of the Free Software Foundation's -software and to any other program whose authors commit to using it. -(Some other Free Software Foundation software is covered by the -GNU Library General Public License instead.) You can apply it to your -programs, too. - -When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone -to deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you distribute -copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis -or for a fee, you must give the recipients all the rights that you have. You -must make sure that they, too, receive or can get the source code. And -you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, -we want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - -Finally, any free program is threatened constantly by software patents. -We wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program -proprietary. To prevent this, we have made it clear that any patent must -be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and -modification follow. - -TERMS AND CONDITIONS FOR -COPYING, DISTRIBUTION AND -MODIFICATION - -0. This License applies to any program or other work which contains a -notice placed by the copyright holder saying it may be distributed under -the terms of this General Public License. The "Program", below, refers -to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, either -verbatim or with modifications and/or translated into another language. -(Hereinafter, translation is included without limitation in the term -"modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of running -the Program is not restricted, and the output from the Program is -covered only if its contents constitute a work based on the Program -(independent of having been made by running the Program). Whether -that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the notices -that refer to this License and to the absence of any warranty; and give -any other recipients of the Program a copy of this License along with the -Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide a - warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but does - not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, and -can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based on -the Program, the distribution of the whole must be on the terms of this -License, whose permissions for other licensees extend to the entire -whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based -on the Program. - -In addition, mere aggregation of another work not based on the -Program with the Program (or with a work based on the Program) on a -volume of a storage or distribution medium does not bring the other -work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding - machine-readable source code, which must be distributed under - the terms of Sections 1 and 2 above on a medium customarily - used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your cost - of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a - medium customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with - such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to control -compilation and installation of the executable. However, as a special -exception, the source code distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies the -executable. - -If distribution of executable or object code is made by offering access to -copy from a designated place, then offering equivalent access to copy -the source code from the same place counts as distribution of the source -code, even though third parties are not compelled to copy the source -along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt otherwise -to copy, modify, sublicense or distribute the Program is void, and will -automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not -have their licenses terminated so long as such parties remain in full -compliance. - -5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and all -its terms and conditions for copying, distributing or modifying the -Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these terms -and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. You are not responsible -for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot distribute -so as to satisfy simultaneously your obligations under this License and -any other pertinent obligations, then as a consequence you may not -distribute the Program at all. For example, if a patent license would not -permit royalty-free redistribution of the Program by all those who -receive copies directly or indirectly through you, then the only way you -could satisfy both it and this License would be to refrain entirely from -distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents -or other property right claims or to contest validity of any such claims; -this section has the sole purpose of protecting the integrity of the free -software distribution system, which is implemented by public license -practices. Many people have made generous contributions to the wide -range of software distributed through that system in reliance on -consistent application of that system; it is up to the author/donor to -decide if he or she is willing to distribute software through any other -system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be -a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Program under this License may add an -explicit geographical distribution limitation excluding those countries, so -that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new -versions of the General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may differ in -detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number -of this License, you may choose any version ever published by the Free -Software Foundation. - -10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we -sometimes make exceptions for this. Our decision will be guided by the -two goals of preserving the free status of all derivatives of our free -software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF -CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, -TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT -WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE -PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, -EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD -THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE -COST OF ALL NECESSARY SERVICING, REPAIR OR -CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW -OR AGREED TO IN WRITING WILL ANY COPYRIGHT -HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED -ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING -ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR -INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT -LIMITED TO LOSS OF DATA OR DATA BEING RENDERED -INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE -WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR -OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY -OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS +GNU GENERAL PUBLIC LICENSE + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom +to share and change it. By contrast, the GNU General Public License is +intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This General +Public License applies to most of the Free Software Foundation's +software and to any other program whose authors commit to using it. +(Some other Free Software Foundation software is covered by the +GNU Library General Public License instead.) You can apply it to your +programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone +to deny you these rights or to ask you to surrender the rights. These +restrictions translate to certain responsibilities for you if you distribute +copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis +or for a fee, you must give the recipients all the rights that you have. You +must make sure that they, too, receive or can get the source code. And +you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, +we want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + +Finally, any free program is threatened constantly by software patents. +We wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program +proprietary. To prevent this, we have made it clear that any patent must +be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and +modification follow. + +TERMS AND CONDITIONS FOR +COPYING, DISTRIBUTION AND +MODIFICATION + +0. This License applies to any program or other work which contains a +notice placed by the copyright holder saying it may be distributed under +the terms of this General Public License. The "Program", below, refers +to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, either +verbatim or with modifications and/or translated into another language. +(Hereinafter, translation is included without limitation in the term +"modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of running +the Program is not restricted, and the output from the Program is +covered only if its contents constitute a work based on the Program +(independent of having been made by running the Program). Whether +that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the notices +that refer to this License and to the absence of any warranty; and give +any other recipients of the Program a copy of this License along with the +Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but does + not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, and +can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based on +the Program, the distribution of the whole must be on the terms of this +License, whose permissions for other licensees extend to the entire +whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise the +right to control the distribution of derivative or collective works based +on the Program. + +In addition, mere aggregation of another work not based on the +Program with the Program (or with a work based on the Program) on a +volume of a storage or distribution medium does not bring the other +work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding + machine-readable source code, which must be distributed under + the terms of Sections 1 and 2 above on a medium customarily + used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your cost + of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a + medium customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with + such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to control +compilation and installation of the executable. However, as a special +exception, the source code distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies the +executable. + +If distribution of executable or object code is made by offering access to +copy from a designated place, then offering equivalent access to copy +the source code from the same place counts as distribution of the source +code, even though third parties are not compelled to copy the source +along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt otherwise +to copy, modify, sublicense or distribute the Program is void, and will +automatically terminate your rights under this License. However, parties +who have received copies, or rights, from you under this License will not +have their licenses terminated so long as such parties remain in full +compliance. + +5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and all +its terms and conditions for copying, distributing or modifying the +Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these terms +and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. You are not responsible +for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot distribute +so as to satisfy simultaneously your obligations under this License and +any other pertinent obligations, then as a consequence you may not +distribute the Program at all. For example, if a patent license would not +permit royalty-free redistribution of the Program by all those who +receive copies directly or indirectly through you, then the only way you +could satisfy both it and this License would be to refrain entirely from +distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents +or other property right claims or to contest validity of any such claims; +this section has the sole purpose of protecting the integrity of the free +software distribution system, which is implemented by public license +practices. Many people have made generous contributions to the wide +range of software distributed through that system in reliance on +consistent application of that system; it is up to the author/donor to +decide if he or she is willing to distribute software through any other +system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be +a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Program under this License may add an +explicit geographical distribution limitation excluding those countries, so +that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new +versions of the General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may differ in +detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number +of this License, you may choose any version ever published by the Free +Software Foundation. + +10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we +sometimes make exceptions for this. Our decision will be guided by the +two goals of preserving the free status of all derivatives of our free +software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF +CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, +TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT +WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE +PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, +EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD +THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE +COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW +OR AGREED TO IN WRITING WILL ANY COPYRIGHT +HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED +ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING +ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT +LIMITED TO LOSS OF DATA OR DATA BEING RENDERED +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE +WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR +OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY +OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS diff --git a/Gem/LICENSE.txt b/Gem/LICENSE.txt index ad1cd50..7a7225f 100644 --- a/Gem/LICENSE.txt +++ b/Gem/LICENSE.txt @@ -1,27 +1,27 @@ -pix_hit : hit-test over user defined hit_areads... -Copyright (c) 2005 Davide Morelli -Copyright (c) 2005-2012 IOhannes m zmölnig - -based on: - GEM - Graphics Environment for Multimedia - Copyright (C) 1997-2000 Mark Danks, Günter Geiger, - Copyright (c) 2001-2012 IOhannes m zmölnig - Copyright (c) 2003-2007 James Tittle II, - Copyright (c) 2003-2008 Chris Clepper et al. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -In the official GEM distribution, the GNU General Public License is -in the file GnuGPL.LICENSE - +pix_hit : hit-test over user defined hit_areads... +Copyright (c) 2005 Davide Morelli +Copyright (c) 2005-2012 IOhannes m zmölnig + +based on: + GEM - Graphics Environment for Multimedia + Copyright (C) 1997-2000 Mark Danks, Günter Geiger, + Copyright (c) 2001-2012 IOhannes m zmölnig + Copyright (c) 2003-2007 James Tittle II, + Copyright (c) 2003-2008 Chris Clepper et al. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +In the official GEM distribution, the GNU General Public License is +in the file GnuGPL.LICENSE + diff --git a/Gem/cMatrix.html b/Gem/cMatrix.html index fe4cd04..0181fc1 100644 --- a/Gem/cMatrix.html +++ b/Gem/cMatrix.html @@ -1,270 +1,270 @@ - - -Matrix Operations for Image Processing - - -
-

Matrix Operations for Image Processing

-

Paul Haeberli

-

Nov 1993

-Horiz Bar -

Introduction

-

-Four by four matrices are commonly used to transform geometry for 3D -rendering. These matrices may also be used to transform RGB colors, to scale -RGB colors, and to control hue, saturation and contrast. The most important -advantage of using matrices is that any number of color transformations -can be composed using standard matrix multiplication. -

-Please note that for these operations to be correct, we really must operate -on linear brightness values. If the input image is in a non-linear brightness -space RGB colors must be transformed into a linear space before these -matrix operations are used. - -

Color Transformation

-RGB colors are transformed by a four by four matrix as shown here: - -
-    xformrgb(mat,r,g,b,tr,tg,tb)
-    float mat[4][4];
-    float r,g,b;
-    float *tr,*tg,*tb;
-    {
-        *tr = r*mat[0][0] + g*mat[1][0] +
-		    b*mat[2][0] + mat[3][0];
-        *tg = r*mat[0][1] + g*mat[1][1] +
-		    b*mat[2][1] + mat[3][1];
-        *tb = r*mat[0][2] + g*mat[1][2] +
-		    b*mat[2][2] + mat[3][2];
-    }
-
- -

The Identity

-This is the identity matrix: -
-    float mat[4][4] = {
-        1.0,    0.0,    0.0,    0.0,
-        0.0,    1.0,    0.0,    0.0,
-        0.0,    0.0,    1.0,    0.0,
-        0.0,    0.0,    0.0,    1.0,
-    };
-
-Transforming colors by the identity matrix will leave them unchanged. - -

Changing Brightness

-To scale RGB colors a matrix like this is used: -
-    float mat[4][4] = {
-        rscale, 0.0,    0.0,    0.0,
-        0.0,    gscale, 0.0,    0.0,
-        0.0,    0.0,    bscale, 0.0,
-        0.0,    0.0,    0.0,    1.0,
-    };
-
-Where rscale, gscale, and bscale specify how much to scale the r, g, and b -components of colors. This can be used to alter the color balance of an image. -

-In effect, this calculates: -

-	tr = r*rscale;
-	tg = g*gscale;
-	tb = b*bscale;
-
- -

Modifying Saturation

- - -

Converting to Luminance

-To convert a color image into a black and white image, this matrix is used: -
-    float mat[4][4] = {
-        rwgt,   rwgt,   rwgt,   0.0,
-        gwgt,   gwgt,   gwgt,   0.0,
-        bwgt,   bwgt,   bwgt,   0.0,
-        0.0,    0.0,    0.0,    1.0,
-    };
-
-Where rwgt is 0.3086, gwgt is 0.6094, and bwgt is 0.0820. This is the -luminance vector. Notice here that we do not use the standard NTSC weights -of 0.299, 0.587, and 0.114. The NTSC weights are only applicable to RGB -colors in a gamma 2.2 color space. For linear RGB colors the values above -are better. -

-In effect, this calculates: -

-	tr = r*rwgt + g*gwgt + b*bwgt;
-	tg = r*rwgt + g*gwgt + b*bwgt;
-	tb = r*rwgt + g*gwgt + b*bwgt;
-
- -

Modifying Saturation

- -To saturate RGB colors, this matrix is used: - -
-     float mat[4][4] = {
-        a,      b,      c,      0.0,
-        d,      e,      f,      0.0,
-        g,      h,      i,      0.0,
-        0.0,    0.0,    0.0,    1.0,
-    };
-
-Where the constants are derived from the saturation value s -as shown below: - -
-    a = (1.0-s)*rwgt + s;
-    b = (1.0-s)*rwgt;
-    c = (1.0-s)*rwgt;
-    d = (1.0-s)*gwgt;
-    e = (1.0-s)*gwgt + s;
-    f = (1.0-s)*gwgt;
-    g = (1.0-s)*bwgt;
-    h = (1.0-s)*bwgt;
-    i = (1.0-s)*bwgt + s;
-
-One nice property of this saturation matrix is that the luminance -of input RGB colors is maintained. This matrix can also be used -to complement the colors in an image by specifying a saturation -value of -1.0. -

-Notice that when s is set to 0.0, the matrix is exactly -the "convert to luminance" matrix described above. When s -is set to 1.0 the matrix becomes the identity. All saturation matrices -can be derived by interpolating between or extrapolating beyond these -two matrices. -

-This is discussed in more detail in the note on -Image Processing By Interpolation and Extrapolation. -

Applying Offsets to Color Components

-To offset the r, g, and b components of colors in an image this matrix is used: -
-    float mat[4][4] = {
-        1.0,    0.0,    0.0,    0.0,
-        0.0,    1.0,    0.0,    0.0,
-        0.0,    0.0,    1.0,    0.0,
-        roffset,goffset,boffset,1.0,
-    };
-
-This can be used along with color scaling to alter the contrast of RGB -images. - -

Simple Hue Rotation

-To rotate the hue, we perform a 3D rotation of RGB colors about the diagonal -vector [1.0 1.0 1.0]. The transformation matrix is derived as shown here: -

- If we have functions:

-

-
identmat(mat) -
that creates an identity matrix. -
-
-
xrotatemat(mat,rsin,rcos) -
that multiplies a matrix that rotates about the x (red) axis. -
-
-
yrotatemat(mat,rsin,rcos) -
that multiplies a matrix that rotates about the y (green) axis. -
-
-
zrotatemat(mat,rsin,rcos) -
that multiplies a matrix that rotates about the z (blue) axis. -
-Then a matrix that rotates about the 1.0,1.0,1.0 diagonal can be -constructed like this: -
-First we make an identity matrix -
-    identmat(mat);
-
-Rotate the grey vector into positive Z -
-    mag = sqrt(2.0);
-    xrs = 1.0/mag;
-    xrc = 1.0/mag;
-    xrotatemat(mat,xrs,xrc);
-
-    mag = sqrt(3.0);
-    yrs = -1.0/mag;
-    yrc = sqrt(2.0)/mag;
-    yrotatemat(mat,yrs,yrc);
-
-Rotate the hue -
-    zrs = sin(rot*PI/180.0);
-    zrc = cos(rot*PI/180.0);
-    zrotatemat(mat,zrs,zrc);
-
-Rotate the grey vector back into place -
-    yrotatemat(mat,-yrs,yrc);
-    xrotatemat(mat,-xrs,xrc);
-
-The resulting matrix will rotate the hue of the input RGB colors. A rotation -of 120.0 degrees will exactly map Red into Green, Green into Blue and -Blue into Red. This transformation has one problem, however, the luminance -of the input colors is not preserved. This can be fixed with the following -refinement: - -

Hue Rotation While Preserving Luminance

- -We make an identity matrix -
-   identmat(mmat);
-
-Rotate the grey vector into positive Z -
-    mag = sqrt(2.0);
-    xrs = 1.0/mag;
-    xrc = 1.0/mag;
-    xrotatemat(mmat,xrs,xrc);
-    mag = sqrt(3.0);
-    yrs = -1.0/mag;
-    yrc = sqrt(2.0)/mag;
-    yrotatemat(mmat,yrs,yrc);
-    matrixmult(mmat,mat,mat);
-
-Shear the space to make the luminance plane horizontal -
-    xformrgb(mmat,rwgt,gwgt,bwgt,&lx,&ly,&lz);
-    zsx = lx/lz;
-    zsy = ly/lz;
-    zshearmat(mat,zsx,zsy);
-
-Rotate the hue -
-    zrs = sin(rot*PI/180.0);
-    zrc = cos(rot*PI/180.0);
-    zrotatemat(mat,zrs,zrc);
-
-Unshear the space to put the luminance plane back -
-    zshearmat(mat,-zsx,-zsy);
-
-Rotate the grey vector back into place -
-    yrotatemat(mat,-yrs,yrc);
-    xrotatemat(mat,-xrs,xrc);
-
-

Conclusion

-I've presented several matrix transformations that may be applied -to RGB colors. Each color transformation is represented by -a 4 by 4 matrix, similar to matrices commonly used to transform 3D geometry. -

-Example C code -that demonstrates these concepts is provided for your enjoyment. -

-These transformations allow us to adjust image contrast, brightness, hue and -saturation individually. In addition, color matrix transformations concatenate -in a way similar to geometric transformations. Any sequence of -operations can be combined into a single matrix using -matrix multiplication. -

-

- -
-
-
- - - + + +Matrix Operations for Image Processing + + +
+

Matrix Operations for Image Processing

+

Paul Haeberli

+

Nov 1993

+Horiz Bar +

Introduction

+

+Four by four matrices are commonly used to transform geometry for 3D +rendering. These matrices may also be used to transform RGB colors, to scale +RGB colors, and to control hue, saturation and contrast. The most important +advantage of using matrices is that any number of color transformations +can be composed using standard matrix multiplication. +

+Please note that for these operations to be correct, we really must operate +on linear brightness values. If the input image is in a non-linear brightness +space RGB colors must be transformed into a linear space before these +matrix operations are used. + +

Color Transformation

+RGB colors are transformed by a four by four matrix as shown here: + +
+    xformrgb(mat,r,g,b,tr,tg,tb)
+    float mat[4][4];
+    float r,g,b;
+    float *tr,*tg,*tb;
+    {
+        *tr = r*mat[0][0] + g*mat[1][0] +
+		    b*mat[2][0] + mat[3][0];
+        *tg = r*mat[0][1] + g*mat[1][1] +
+		    b*mat[2][1] + mat[3][1];
+        *tb = r*mat[0][2] + g*mat[1][2] +
+		    b*mat[2][2] + mat[3][2];
+    }
+
+ +

The Identity

+This is the identity matrix: +
+    float mat[4][4] = {
+        1.0,    0.0,    0.0,    0.0,
+        0.0,    1.0,    0.0,    0.0,
+        0.0,    0.0,    1.0,    0.0,
+        0.0,    0.0,    0.0,    1.0,
+    };
+
+Transforming colors by the identity matrix will leave them unchanged. + +

Changing Brightness

+To scale RGB colors a matrix like this is used: +
+    float mat[4][4] = {
+        rscale, 0.0,    0.0,    0.0,
+        0.0,    gscale, 0.0,    0.0,
+        0.0,    0.0,    bscale, 0.0,
+        0.0,    0.0,    0.0,    1.0,
+    };
+
+Where rscale, gscale, and bscale specify how much to scale the r, g, and b +components of colors. This can be used to alter the color balance of an image. +

+In effect, this calculates: +

+	tr = r*rscale;
+	tg = g*gscale;
+	tb = b*bscale;
+
+ +

Modifying Saturation

+ + +

Converting to Luminance

+To convert a color image into a black and white image, this matrix is used: +
+    float mat[4][4] = {
+        rwgt,   rwgt,   rwgt,   0.0,
+        gwgt,   gwgt,   gwgt,   0.0,
+        bwgt,   bwgt,   bwgt,   0.0,
+        0.0,    0.0,    0.0,    1.0,
+    };
+
+Where rwgt is 0.3086, gwgt is 0.6094, and bwgt is 0.0820. This is the +luminance vector. Notice here that we do not use the standard NTSC weights +of 0.299, 0.587, and 0.114. The NTSC weights are only applicable to RGB +colors in a gamma 2.2 color space. For linear RGB colors the values above +are better. +

+In effect, this calculates: +

+	tr = r*rwgt + g*gwgt + b*bwgt;
+	tg = r*rwgt + g*gwgt + b*bwgt;
+	tb = r*rwgt + g*gwgt + b*bwgt;
+
+ +

Modifying Saturation

+ +To saturate RGB colors, this matrix is used: + +
+     float mat[4][4] = {
+        a,      b,      c,      0.0,
+        d,      e,      f,      0.0,
+        g,      h,      i,      0.0,
+        0.0,    0.0,    0.0,    1.0,
+    };
+
+Where the constants are derived from the saturation value s +as shown below: + +
+    a = (1.0-s)*rwgt + s;
+    b = (1.0-s)*rwgt;
+    c = (1.0-s)*rwgt;
+    d = (1.0-s)*gwgt;
+    e = (1.0-s)*gwgt + s;
+    f = (1.0-s)*gwgt;
+    g = (1.0-s)*bwgt;
+    h = (1.0-s)*bwgt;
+    i = (1.0-s)*bwgt + s;
+
+One nice property of this saturation matrix is that the luminance +of input RGB colors is maintained. This matrix can also be used +to complement the colors in an image by specifying a saturation +value of -1.0. +

+Notice that when s is set to 0.0, the matrix is exactly +the "convert to luminance" matrix described above. When s +is set to 1.0 the matrix becomes the identity. All saturation matrices +can be derived by interpolating between or extrapolating beyond these +two matrices. +

+This is discussed in more detail in the note on +Image Processing By Interpolation and Extrapolation. +

Applying Offsets to Color Components

+To offset the r, g, and b components of colors in an image this matrix is used: +
+    float mat[4][4] = {
+        1.0,    0.0,    0.0,    0.0,
+        0.0,    1.0,    0.0,    0.0,
+        0.0,    0.0,    1.0,    0.0,
+        roffset,goffset,boffset,1.0,
+    };
+
+This can be used along with color scaling to alter the contrast of RGB +images. + +

Simple Hue Rotation

+To rotate the hue, we perform a 3D rotation of RGB colors about the diagonal +vector [1.0 1.0 1.0]. The transformation matrix is derived as shown here: +

+ If we have functions:

+

+
identmat(mat) +
that creates an identity matrix. +
+
+
xrotatemat(mat,rsin,rcos) +
that multiplies a matrix that rotates about the x (red) axis. +
+
+
yrotatemat(mat,rsin,rcos) +
that multiplies a matrix that rotates about the y (green) axis. +
+
+
zrotatemat(mat,rsin,rcos) +
that multiplies a matrix that rotates about the z (blue) axis. +
+Then a matrix that rotates about the 1.0,1.0,1.0 diagonal can be +constructed like this: +
+First we make an identity matrix +
+    identmat(mat);
+
+Rotate the grey vector into positive Z +
+    mag = sqrt(2.0);
+    xrs = 1.0/mag;
+    xrc = 1.0/mag;
+    xrotatemat(mat,xrs,xrc);
+
+    mag = sqrt(3.0);
+    yrs = -1.0/mag;
+    yrc = sqrt(2.0)/mag;
+    yrotatemat(mat,yrs,yrc);
+
+Rotate the hue +
+    zrs = sin(rot*PI/180.0);
+    zrc = cos(rot*PI/180.0);
+    zrotatemat(mat,zrs,zrc);
+
+Rotate the grey vector back into place +
+    yrotatemat(mat,-yrs,yrc);
+    xrotatemat(mat,-xrs,xrc);
+
+The resulting matrix will rotate the hue of the input RGB colors. A rotation +of 120.0 degrees will exactly map Red into Green, Green into Blue and +Blue into Red. This transformation has one problem, however, the luminance +of the input colors is not preserved. This can be fixed with the following +refinement: + +

Hue Rotation While Preserving Luminance

+ +We make an identity matrix +
+   identmat(mmat);
+
+Rotate the grey vector into positive Z +
+    mag = sqrt(2.0);
+    xrs = 1.0/mag;
+    xrc = 1.0/mag;
+    xrotatemat(mmat,xrs,xrc);
+    mag = sqrt(3.0);
+    yrs = -1.0/mag;
+    yrc = sqrt(2.0)/mag;
+    yrotatemat(mmat,yrs,yrc);
+    matrixmult(mmat,mat,mat);
+
+Shear the space to make the luminance plane horizontal +
+    xformrgb(mmat,rwgt,gwgt,bwgt,&lx,&ly,&lz);
+    zsx = lx/lz;
+    zsy = ly/lz;
+    zshearmat(mat,zsx,zsy);
+
+Rotate the hue +
+    zrs = sin(rot*PI/180.0);
+    zrc = cos(rot*PI/180.0);
+    zrotatemat(mat,zrs,zrc);
+
+Unshear the space to put the luminance plane back +
+    zshearmat(mat,-zsx,-zsy);
+
+Rotate the grey vector back into place +
+    yrotatemat(mat,-yrs,yrc);
+    xrotatemat(mat,-xrs,xrc);
+
+

Conclusion

+I've presented several matrix transformations that may be applied +to RGB colors. Each color transformation is represented by +a 4 by 4 matrix, similar to matrices commonly used to transform 3D geometry. +

+Example C code +that demonstrates these concepts is provided for your enjoyment. +

+These transformations allow us to adjust image contrast, brightness, hue and +saturation individually. In addition, color matrix transformations concatenate +in a way similar to geometric transformations. Any sequence of +operations can be combined into a single matrix using +matrix multiplication. +

+

+ +
+
+
+ + + diff --git a/Gem/examples/data/Toon.frag b/Gem/examples/data/Toon.frag index 268bdab..d806cbe 100644 --- a/Gem/examples/data/Toon.frag +++ b/Gem/examples/data/Toon.frag @@ -1,61 +1,61 @@ -// -// Fragment shader for cartoon-style shading -// -// Author: Philip Rideout -// -// Copyright (c) 2005 3Dlabs Inc. Ltd. -// -/************************************************************************ -* * -* Copyright (C) 2002-2006 3Dlabs Inc. Ltd. * -* * -* All rights reserved. * -* * -* Redistribution and use in source and binary forms, with or without * -* modification, are permitted provided that the following conditions * -* are met: * -* * -* Redistributions of source code must retain the above copyright * -* notice, this list of conditions and the following disclaimer. * -* * -* Redistributions in binary form must reproduce the above * -* copyright notice, this list of conditions and the following * -* disclaimer in the documentation and/or other materials provided * -* with the distribution. * -* * -* Neither the name of 3Dlabs Inc. Ltd. nor the names of its * -* contributors may be used to endorse or promote products derived * -* from this software without specific prior written permission. * -* * -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * -* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -* POSSIBILITY OF SUCH DAMAGE. * -* * -************************************************************************/ - -const vec3 DiffuseColor= vec3( 0.1,0.1,0.1); -const vec3 PhongColor = vec3( 0.5,0.5,0.5); -const float Edge= 0.2; -uniform float Phong; -varying vec3 Normal; - -void main (void) -{ - vec3 color = DiffuseColor; - float f = dot(vec3(0,0,1),Normal); - if (abs(f) < Edge) - color = vec3(0); - if (f > Phong) - color = PhongColor; - - gl_FragColor = vec4(color, 1); -} +// +// Fragment shader for cartoon-style shading +// +// Author: Philip Rideout +// +// Copyright (c) 2005 3Dlabs Inc. Ltd. +// +/************************************************************************ +* * +* Copyright (C) 2002-2006 3Dlabs Inc. Ltd. * +* * +* All rights reserved. * +* * +* Redistribution and use in source and binary forms, with or without * +* modification, are permitted provided that the following conditions * +* are met: * +* * +* Redistributions of source code must retain the above copyright * +* notice, this list of conditions and the following disclaimer. * +* * +* Redistributions in binary form must reproduce the above * +* copyright notice, this list of conditions and the following * +* disclaimer in the documentation and/or other materials provided * +* with the distribution. * +* * +* Neither the name of 3Dlabs Inc. Ltd. nor the names of its * +* contributors may be used to endorse or promote products derived * +* from this software without specific prior written permission. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * +* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * +* POSSIBILITY OF SUCH DAMAGE. * +* * +************************************************************************/ + +const vec3 DiffuseColor= vec3( 0.1,0.1,0.1); +const vec3 PhongColor = vec3( 0.5,0.5,0.5); +const float Edge= 0.2; +uniform float Phong; +varying vec3 Normal; + +void main (void) +{ + vec3 color = DiffuseColor; + float f = dot(vec3(0,0,1),Normal); + if (abs(f) < Edge) + color = vec3(0); + if (f > Phong) + color = PhongColor; + + gl_FragColor = vec4(color, 1); +} diff --git a/Gem/examples/data/Toon.vert b/Gem/examples/data/Toon.vert index 2f7d51c..d2f6dbe 100644 --- a/Gem/examples/data/Toon.vert +++ b/Gem/examples/data/Toon.vert @@ -1,54 +1,54 @@ -// -// Vertex shader for cartoon-style shading -// -// Author: Philip Rideout -// -// Copyright (c) 2005 3Dlabs Inc. Ltd. -// -// -// -/************************************************************************ -* * -* Copyright (C) 2002-2006 3Dlabs Inc. Ltd. * -* * -* All rights reserved. * -* * -* Redistribution and use in source and binary forms, with or without * -* modification, are permitted provided that the following conditions * -* are met: * -* * -* Redistributions of source code must retain the above copyright * -* notice, this list of conditions and the following disclaimer. * -* * -* Redistributions in binary form must reproduce the above * -* copyright notice, this list of conditions and the following * -* disclaimer in the documentation and/or other materials provided * -* with the distribution. * -* * -* Neither the name of 3Dlabs Inc. Ltd. nor the names of its * -* contributors may be used to endorse or promote products derived * -* from this software without specific prior written permission. * -* * -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * -* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * -* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * -* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * -* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * -* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * -* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * -* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * -* POSSIBILITY OF SUCH DAMAGE. * -* * -************************************************************************/ - - -varying vec3 Normal; - -void main(void) -{ - Normal = normalize(gl_NormalMatrix * gl_Normal); - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; -} +// +// Vertex shader for cartoon-style shading +// +// Author: Philip Rideout +// +// Copyright (c) 2005 3Dlabs Inc. Ltd. +// +// +// +/************************************************************************ +* * +* Copyright (C) 2002-2006 3Dlabs Inc. Ltd. * +* * +* All rights reserved. * +* * +* Redistribution and use in source and binary forms, with or without * +* modification, are permitted provided that the following conditions * +* are met: * +* * +* Redistributions of source code must retain the above copyright * +* notice, this list of conditions and the following disclaimer. * +* * +* Redistributions in binary form must reproduce the above * +* copyright notice, this list of conditions and the following * +* disclaimer in the documentation and/or other materials provided * +* with the distribution. * +* * +* Neither the name of 3Dlabs Inc. Ltd. nor the names of its * +* contributors may be used to endorse or promote products derived * +* from this software without specific prior written permission. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * +* COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * +* POSSIBILITY OF SUCH DAMAGE. * +* * +************************************************************************/ + + +varying vec3 Normal; + +void main(void) +{ + Normal = normalize(gl_NormalMatrix * gl_Normal); + gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; +} diff --git a/Gem/examples/data/valcolor.tab b/Gem/examples/data/valcolor.tab index 43a8523..1f26455 100644 --- a/Gem/examples/data/valcolor.tab +++ b/Gem/examples/data/valcolor.tab @@ -1,6 +1,6 @@ -0. 0. 0. -1. 1. 1. -.5 .0 1. -0. 1. 0. -1. 1. 1. -0. 0. 0. +0. 0. 0. +1. 1. 1. +.5 .0 1. +0. 1. 0. +1. 1. 1. +0. 0. 0. diff --git a/Gem/examples/data/valmotion.tab b/Gem/examples/data/valmotion.tab index 1a3f2ac..be2eebe 100644 --- a/Gem/examples/data/valmotion.tab +++ b/Gem/examples/data/valmotion.tab @@ -1,8 +1,8 @@ -0. 0. 0. -0. 0. 0. -2. 2. -2. --3. -1. .5 --2. 4. -1. -.5 -.5 0. -0. 0. 0. -0. 0. 0. +0. 0. 0. +0. 0. 0. +2. 2. -2. +-3. -1. .5 +-2. 4. -1. +.5 -.5 0. +0. 0. 0. +0. 0. 0. diff --git a/Gem/examples/data/venus.mtl b/Gem/examples/data/venus.mtl index dc43199..cee90ff 100644 --- a/Gem/examples/data/venus.mtl +++ b/Gem/examples/data/venus.mtl @@ -1,9 +1,9 @@ -# -# venus.mtl -# - -newmtl vskin -Ka 0.6 0.6 0.45 -Kd 0.6 0.6 0.45 -Ks 0.2 0.1 0.1 -Ns 5.0 +# +# venus.mtl +# + +newmtl vskin +Ka 0.6 0.6 0.45 +Kd 0.6 0.6 0.45 +Ks 0.2 0.1 0.1 +Ns 5.0 diff --git a/Gem/examples/data/venus.obj b/Gem/examples/data/venus.obj index 1dc1749..1ac1ab0 100644 --- a/Gem/examples/data/venus.obj +++ b/Gem/examples/data/venus.obj @@ -1,2147 +1,2147 @@ -# Tue Oct 22 14:45:37 1991 -# -# - -mtllib venus.mtl - -g default -v -27.430000 147.320007 -3.300000 -v -30.480000 135.380005 -9.400000 -v -21.590000 150.619995 -15.490000 -v -26.670000 129.789993 3.300000 -v -24.129999 142.490005 13.460000 -v -15.240000 124.459999 12.450000 -v -13.970000 135.889999 19.049999 -v -18.799999 114.050003 6.350000 -v -31.500000 120.400002 -1.520000 -v -35.810001 128.020004 -13.720000 -v -27.180000 138.429993 -22.610001 -v -35.310001 130.809998 -28.959999 -v -23.879999 140.460007 -27.690001 -v -16.510000 142.240005 -28.450001 -v -13.720000 151.380005 -18.030001 -v -19.049999 134.869995 -38.860001 -v -30.990000 132.330002 -36.830002 -v -8.130000 143.000000 -26.670000 -v -4.320000 138.940002 -31.750000 -v -9.650000 150.110001 -18.799999 -v -40.889999 126.489998 -32.509998 -v -5.840000 149.610001 -15.490000 -v -0.760000 140.210007 -18.799999 -v 0.760000 138.429993 -5.590000 -v 0.250000 145.289993 -3.810000 -v 4.570000 130.050003 -7.870000 -v 0.000000 132.080002 4.830000 -v -0.510000 139.190002 8.890000 -v 2.030000 137.919998 -24.129999 -v 2.790000 135.639999 -34.040001 -v 8.640000 133.600006 -21.080000 -v 0.250000 134.369995 -39.119999 -v -6.100000 142.750000 2.540000 -v -12.190000 145.800003 -7.370000 -v -6.100000 138.940002 11.680000 -v -14.990000 143.759995 4.060000 -v -12.950000 138.679993 16.260000 -v -25.910000 147.830002 -1.020000 -v -21.590000 148.839996 -5.840000 -v -41.150002 125.980003 -25.150000 -v 9.910000 131.830002 -39.619999 -v -20.570000 129.289993 -45.209999 -v -9.910000 124.709999 -48.509998 -v 3.050000 129.289993 -45.209999 -v 18.030001 127.250000 -43.430000 -v 31.500000 124.970001 -35.560001 -v 29.209999 127.000000 -26.420000 -v 10.670000 133.860001 -30.230000 -v 41.660000 121.669998 -27.690001 -v 38.610001 123.699997 -20.070000 -v 26.420000 125.480003 -17.020000 -v 24.889999 120.139999 -9.140000 -v 35.810001 121.160004 -10.920000 -v 0.760000 121.410004 1.270000 -v -6.350000 116.330002 5.080000 -v -6.350000 126.489998 10.410000 -v -7.370000 135.380005 15.490000 -v 38.099998 114.809998 -4.830000 -v 24.889999 110.489998 -1.780000 -v 10.670000 109.220001 4.830000 -v 8.890000 100.330002 9.400000 -v -5.840000 99.059998 11.680000 -v -13.720000 105.160004 9.650000 -v -32.770000 107.190002 5.590000 -v -24.639999 103.629997 9.400000 -v -22.350000 93.980003 13.460000 -v -34.290001 98.040001 9.650000 -v -44.959999 105.160004 1.020000 -v -51.820000 111.760002 -9.140000 -v -52.070000 114.550003 -17.270000 -v -60.709999 108.709999 -16.000000 -v -51.560001 116.589996 -26.160000 -v -58.419998 111.250000 -27.180000 -v -50.040001 118.110001 -34.290001 -v -46.480000 118.110001 -43.689999 -v -55.880001 112.519997 -36.070000 -v -34.799999 117.860001 -52.320000 -v -59.180000 98.550003 0.510000 -v -63.750000 103.120003 -5.840000 -v -53.340000 91.190002 5.840000 -v -47.240002 92.459999 7.620000 -v -41.400002 92.959999 9.910000 -v -36.580002 88.650002 12.950000 -v -46.740002 87.629997 9.140000 -v -30.990000 81.029999 16.000000 -v -19.559999 80.769997 17.530001 -v -4.830000 85.849998 16.000000 -v 6.860000 90.169998 13.970000 -v 18.290001 88.900002 12.190000 -v 19.559999 100.839996 6.350000 -v 28.190001 96.010002 5.840000 -v 33.020000 103.889999 0.760000 -v 44.700001 106.169998 -4.570000 -v 37.080002 98.040001 0.510000 -v 49.279999 97.790001 -6.100000 -v 51.820000 106.930000 -14.730000 -v 46.230000 116.589996 -13.460000 -v 41.150002 120.400002 -12.700000 -v 46.480000 118.360001 -18.799999 -v 51.049999 110.739998 -21.590000 -v 43.939999 116.330002 -34.290001 -v 34.799999 118.870003 -42.419998 -v 26.670000 118.620003 -48.259998 -v 9.140000 116.839996 -55.880001 -v 1.270000 117.599998 -55.119999 -v -4.320000 118.620003 -52.830002 -v -24.379999 119.889999 -51.560001 -v -9.650000 109.980003 -54.860001 -v -7.110000 109.220001 -55.880001 -v -12.950000 109.220001 -55.119999 -v -29.209999 106.169998 -58.930000 -v -24.639999 106.930000 -58.169998 -v -38.349998 104.389999 -56.389999 -v -48.259998 99.820000 -51.049999 -v -56.389999 101.089996 -44.200001 -v -60.450001 106.680000 -36.580002 -v -63.500000 99.059998 -36.070000 -v -64.769997 103.889999 -26.670000 -v -67.559998 101.089996 -14.730000 -v -68.830002 92.459999 -23.370001 -v -72.139999 88.139999 -10.160000 -v 1.780000 109.730003 -59.180000 -v 7.110000 109.220001 -59.939999 -v 18.290001 106.430000 -57.400002 -v 30.230000 104.900002 -52.070000 -v 37.590000 103.120003 -46.230000 -v 44.959999 102.110001 -42.419998 -v 51.049999 93.470001 -38.860001 -v 55.880001 98.040001 -24.889999 -v 56.639999 96.519997 -18.799999 -v 56.130001 94.739998 -14.730000 -v 53.340000 91.949997 -10.160000 -v -66.550003 93.980003 -0.760000 -v -59.180000 86.610001 5.330000 -v -54.099998 79.760002 4.830000 -v -49.529999 80.260002 4.570000 -v -45.470001 79.760002 9.140000 -v -41.910000 84.839996 11.940000 -v 5.080000 80.260002 16.000000 -v 29.209999 88.650002 7.620000 -v 44.200001 92.959999 -4.060000 -v 36.580002 92.459999 -0.510000 -v -61.470001 80.260002 4.830000 -v -67.559998 76.449997 1.780000 -v -71.370003 77.220001 -2.030000 -v -71.879997 72.900002 -14.480000 -v -71.120003 82.040001 -19.299999 -v -66.800003 83.309998 -30.730000 -v -61.470001 92.459999 -39.619999 -v -59.689999 87.879997 -39.880001 -v -53.849998 87.879997 -45.470001 -v -47.500000 86.610001 -52.070000 -v -63.500000 79.500000 -33.529999 -v -63.250000 69.089996 -2.030000 -v -63.250000 74.419998 4.320000 -v -57.660000 70.870003 5.590000 -v -58.930000 67.059998 1.780000 -v -55.880001 75.440002 5.590000 -v -45.209999 70.099998 4.060000 -v -51.049999 68.070000 4.830000 -v -52.320000 66.800003 5.080000 -v -54.860001 61.720001 -1.520000 -v -56.130001 60.709999 -12.950000 -v -49.779999 60.450001 0.510000 -v -53.849998 57.150002 -7.870000 -v -49.020000 54.360001 -6.100000 -v -42.669998 54.099998 -4.570000 -v -45.209999 62.990002 2.540000 -v -39.619999 76.709999 12.700000 -v -32.000000 72.900002 20.320000 -v -38.099998 69.849998 17.270000 -v -40.889999 65.790001 13.970000 -v -41.400002 61.980000 12.700000 -v -41.400002 54.860001 3.810000 -v -24.129999 73.150002 21.340000 -v -18.799999 73.150002 20.830000 -v -10.410000 75.949997 18.030001 -v -3.300000 77.980003 16.260000 -v 11.430000 77.470001 17.780001 -v 17.530001 77.720001 18.799999 -v 22.860001 83.059998 15.750000 -v 28.959999 84.839996 11.180000 -v 34.040001 85.339996 2.540000 -v 34.799999 85.849998 -4.830000 -v 44.700001 84.330002 -7.110000 -v 50.549999 76.199997 -10.920000 -v 56.900002 81.279999 -15.750000 -v 58.669998 85.599998 -22.860001 -v 35.810001 75.180000 -8.890000 -v 32.770000 82.040001 8.130000 -v 32.259998 79.500000 12.700000 -v 29.459999 80.010002 15.240000 -v 24.889999 76.449997 19.049999 -v 16.000000 72.900002 19.299999 -v 8.130000 72.139999 17.530001 -v 1.270000 67.309998 15.750000 -v -4.060000 66.550003 15.750000 -v -14.480000 63.750000 22.100000 -v -17.020000 68.580002 22.860001 -v -21.840000 66.550003 24.129999 -v -21.080000 57.910000 23.879999 -v -29.209999 59.689999 24.639999 -v -29.459999 65.790001 24.379999 -v -34.040001 67.059998 22.860001 -v -36.320000 65.790001 21.340000 -v -37.590000 64.010002 20.570000 -v -37.590000 61.720001 20.320000 -v -39.880001 56.639999 12.950000 -v -37.080002 59.439999 20.070000 -v -32.000000 53.849998 19.809999 -v -33.270000 57.910000 22.610001 -v -27.180000 55.119999 22.610001 -v -35.310001 49.529999 10.410000 -v -35.810001 46.480000 1.780000 -v -42.930000 51.560001 -16.260000 -v -29.459999 48.770000 16.000000 -v -17.270000 52.320000 19.049999 -v -12.450000 58.169998 19.299999 -v -4.830000 57.150002 13.210000 -v -0.250000 53.849998 11.430000 -v -34.540001 61.980000 23.879999 -v 2.790000 58.419998 12.950000 -v 9.910000 64.519997 16.510000 -v 17.270000 68.580002 19.049999 -v 24.129999 73.910004 20.070000 -v 29.719999 76.449997 17.780001 -v 32.770000 73.910004 13.970000 -v 30.230000 71.879997 16.260000 -v 26.160000 72.389999 19.049999 -v 34.799999 78.230003 6.600000 -v 34.540001 71.879997 8.380000 -v 36.070000 73.410004 1.020000 -v 35.049999 74.169998 -4.570000 -v 57.400002 89.150002 -28.450001 -v 57.150002 85.599998 -28.959999 -v 49.020000 74.169998 -23.620001 -v 43.180000 74.169998 -33.529999 -v 52.320000 86.360001 -37.590000 -v 44.450001 84.839996 -42.930000 -v 43.430000 94.739998 -43.430000 -v -8.130000 52.070000 12.700000 -v -48.509998 53.849998 -14.730000 -v -48.770000 58.419998 -21.590000 -v -56.389999 64.769997 -28.190001 -v -47.750000 67.559998 -43.939999 -v -54.099998 79.760002 -37.080002 -v -45.470001 60.959999 -25.400000 -v -60.709999 67.820000 -28.959999 -v -64.769997 69.339996 -26.670000 -v -67.820000 74.169998 -26.920000 -v -59.939999 78.989998 -35.049999 -v -56.130001 72.900002 -32.509998 -v -49.779999 79.250000 -47.240002 -v -37.340000 95.000000 -58.930000 -v -41.150002 79.500000 -56.389999 -v -32.259998 92.199997 -60.959999 -v -24.379999 92.459999 -60.959999 -v -11.430000 94.489998 -58.930000 -v -6.600000 96.010002 -59.180000 -v 2.540000 100.080002 -61.720001 -v 5.590000 100.580002 -61.720001 -v 15.750000 99.059998 -59.939999 -v -36.830002 68.070000 -57.150002 -v -28.190001 72.900002 -61.720001 -v -19.299999 81.529999 -61.720001 -v -9.910000 84.330002 -60.709999 -v -4.570000 84.580002 -61.470001 -v 5.590000 87.379997 -63.250000 -v 13.970000 85.089996 -62.740002 -v 11.430000 69.339996 -62.740002 -v 3.300000 71.629997 -64.010002 -v -3.300000 70.870003 -62.740002 -v -7.370000 70.099998 -62.230000 -v -16.000000 64.769997 -63.750000 -v -25.150000 60.959999 -63.250000 -v -33.529999 57.660000 -59.439999 -v -42.930000 62.230000 -44.450001 -v -38.610001 41.910000 -5.840000 -v -36.070000 34.040001 -7.870000 -v -40.389999 49.020000 -23.110001 -v -34.290001 25.400000 -11.430000 -v -37.340000 31.240000 -28.190001 -v -35.560001 40.130001 -43.180000 -v -34.799999 52.320000 -53.590000 -v -29.209999 43.939999 -57.660000 -v -22.100000 46.990002 -63.250000 -v -15.490000 49.279999 -62.990002 -v -6.600000 52.580002 -63.500000 -v -2.790000 51.820000 -64.260002 -v 4.060000 51.820000 -65.279999 -v 10.160000 48.509998 -64.010002 -v 3.050000 30.730000 -61.209999 -v 8.640000 26.420000 -60.200001 -v -0.760000 31.500000 -59.439999 -v -6.100000 31.240000 -60.200001 -v -13.720000 28.700001 -59.180000 -v -19.299999 27.180000 -60.959999 -v -28.190001 22.860001 -53.340000 -v -33.270000 21.590000 -44.450001 -v 2.290000 6.860000 -53.849998 -v -2.290000 12.950000 -53.090000 -v -11.940000 12.950000 -55.880001 -v -22.350000 14.220000 -57.150002 -v 37.340000 96.519997 -43.939999 -v 36.070000 90.419998 -42.160000 -v 35.810001 80.769997 -40.130001 -v 40.130001 80.010002 -41.660000 -v 34.290001 73.150002 -37.849998 -v 35.810001 64.519997 -27.940001 -v 31.240000 82.300003 -51.310001 -v 29.209999 64.519997 -50.799999 -v 33.270000 92.709999 -48.770000 -v 27.430000 96.010002 -55.369999 -v 24.379999 82.550003 -59.689999 -v 20.830000 66.800003 -58.930000 -v 19.299999 52.830002 -60.959999 -v 28.959999 52.580002 -51.049999 -v 28.959999 46.230000 -49.779999 -v 18.290001 44.450001 -60.200001 -v 36.830002 53.849998 -29.719999 -v 37.849998 53.340000 -23.620001 -v 36.830002 65.279999 -13.720000 -v 38.099998 52.830002 -16.260000 -v 36.830002 41.400002 -30.230000 -v 37.849998 39.369999 -20.570000 -v 47.500000 72.139999 -16.510000 -v 36.070000 69.339996 -10.410000 -v 35.310001 67.309998 -4.570000 -v 32.770000 63.500000 5.590000 -v 29.719999 67.059998 13.460000 -v 21.340000 65.019997 17.530001 -v 17.780001 57.910000 13.210000 -v 6.860000 54.610001 11.430000 -v 28.190001 59.939999 8.130000 -v 33.020000 58.930000 -1.780000 -v 29.719999 55.880001 1.270000 -v 23.620001 53.340000 6.350000 -v 16.510000 52.320000 9.140000 -v -11.940000 48.009998 12.700000 -v -18.799999 44.200001 11.430000 -v 36.580002 51.560001 -10.160000 -v 31.240000 48.259998 -2.290000 -v 24.379999 42.669998 3.560000 -v 19.049999 34.290001 6.350000 -v 14.220000 33.020000 8.890000 -v 2.030000 40.389999 10.920000 -v -10.160000 34.540001 11.430000 -v 3.300000 29.719999 8.380000 -v -10.920000 25.650000 9.140000 -v -2.290000 20.570000 5.330000 -v 11.180000 20.570000 5.330000 -v -9.650000 18.799999 5.080000 -v 18.030001 21.080000 2.030000 -v 25.400000 27.430000 -1.520000 -v 26.920000 35.310001 0.000000 -v 31.750000 36.070000 -4.830000 -v 36.580002 38.349998 -13.460000 -v -25.400000 43.430000 9.400000 -v -17.530001 30.230000 8.640000 -v -23.110001 35.810001 7.110000 -v -18.799999 17.270000 1.520000 -v -24.639999 28.959999 3.810000 -v -29.459999 21.080000 -4.570000 -v -31.750000 29.969999 -2.030000 -v -31.500000 37.849998 1.270000 -v 18.540001 15.490000 1.020000 -v 24.889999 17.270000 -5.080000 -v 33.020000 23.370001 -13.210000 -v 36.070000 27.940001 -18.540001 -v -2.790000 14.220000 5.080000 -v 11.430000 11.180000 3.560000 -v 6.100000 12.450000 4.320000 -v 34.540001 17.270000 -20.070000 -v 34.540001 22.100000 -30.990000 -v 36.070000 32.770000 -30.990000 -v 28.450001 33.020000 -47.750000 -v -9.400000 13.970000 5.080000 -v 33.529999 1.270000 -11.680000 -v 39.369999 -1.520000 -19.049999 -v 24.379999 8.890000 -6.350000 -v 19.049999 6.860000 -1.020000 -v 13.210000 5.840000 2.790000 -v 7.620000 4.320000 3.560000 -v 4.060000 7.110000 3.560000 -v -1.270000 5.080000 3.050000 -v -9.140000 3.300000 5.330000 -v -14.480000 5.590000 4.060000 -v -22.350000 11.430000 -1.020000 -v -28.700001 16.000000 -5.080000 -v -36.070000 13.720000 -13.460000 -v -27.430000 7.870000 -4.830000 -v -39.119999 -2.540000 -4.570000 -v -47.500000 -6.600000 -12.190000 -v -22.100000 5.590000 -0.760000 -v -26.420000 -2.030000 0.000000 -v -42.930000 -10.920000 -3.560000 -v -37.340000 -13.970000 1.020000 -v -23.879999 -19.049999 7.870000 -v -18.030001 -10.410000 8.380000 -v -15.490000 -0.510000 5.840000 -v -9.400000 -1.780000 7.110000 -v -9.400000 -11.680000 10.410000 -v -10.160000 -22.350000 11.180000 -v 1.270000 -11.940000 9.400000 -v -5.080000 -5.840000 8.130000 -v -4.570000 -1.270000 5.840000 -v -3.810000 1.270000 3.810000 -v 2.290000 4.060000 1.520000 -v 4.060000 3.050000 2.030000 -v 4.320000 -1.020000 3.560000 -v 6.600000 -2.540000 5.840000 -v -0.250000 -3.810000 5.080000 -v 0.250000 0.760000 0.000000 -v 14.730000 0.760000 4.060000 -v 19.809999 -2.030000 1.780000 -v 27.690001 -6.600000 -3.560000 -v 36.320000 -10.410000 -9.400000 -v 41.660000 -13.460000 -16.260000 -v 32.259998 -16.000000 -3.560000 -v 26.160000 -19.809999 0.760000 -v 20.570000 -14.730000 4.830000 -v 17.530001 -9.650000 5.840000 -v 14.220000 -6.350000 6.860000 -v 8.890000 -9.140000 8.640000 -v 11.940000 -15.750000 9.140000 -v 2.790000 -22.860001 10.670000 -v 12.190000 -29.969999 8.380000 -v 21.080000 -27.690001 4.060000 -v 38.610001 4.320000 -31.500000 -v 42.419998 -12.190000 -29.719999 -v 43.430000 -23.879999 -14.730000 -v 44.959999 -25.650000 -26.670000 -v 47.240002 -39.369999 -23.620001 -v 46.480000 -40.389999 -10.920000 -v 46.990002 -56.389999 -6.350000 -v 48.770000 -62.230000 -17.780001 -v 43.689999 -44.700001 -4.060000 -v 39.880001 -35.560001 -3.560000 -v 37.340000 -24.129999 -5.840000 -v 28.450001 -25.910000 0.000000 -v 32.509998 -36.320000 1.020000 -v 34.799999 -42.930000 1.520000 -v 25.400000 -41.400002 4.320000 -v 23.370001 -32.770000 3.560000 -v 14.220000 -38.349998 7.370000 -v 16.760000 -42.669998 6.600000 -v 4.830000 -31.500000 10.410000 -v 7.620000 -43.689999 9.650000 -v -1.020000 -45.470001 10.920000 -v -10.670000 -32.259998 10.670000 -v -9.650000 -45.720001 10.920000 -v -22.100000 -41.910000 9.140000 -v -15.750000 -49.279999 10.410000 -v -28.190001 -46.990002 8.890000 -v -29.459999 -30.990000 6.600000 -v -33.529999 -25.650000 4.830000 -v -36.580002 -29.969999 4.830000 -v -45.970001 -21.840000 -2.540000 -v -51.560001 -21.590000 -8.640000 -v -50.799999 -9.910000 -18.799999 -v -46.230000 1.520000 -31.500000 -v -42.419998 7.870000 -23.879999 -v -38.099998 18.030001 -32.259998 -v -55.369999 -40.639999 -5.840000 -v -56.389999 -37.080002 -12.190000 -v -49.020000 -39.369999 1.020000 -v -49.529999 -48.770000 3.300000 -v -57.400002 -57.660000 -3.560000 -v -37.590000 -43.939999 8.130000 -v -35.810001 -57.400002 14.220000 -v -41.150002 10.410000 -41.660000 -v -52.320000 -19.049999 -29.459999 -v -53.849998 -22.100000 -14.990000 -v -54.360001 -31.240000 -26.920000 -v -49.279999 -25.650000 -44.959999 -v -54.360001 -45.209999 -36.320000 -v -46.740002 -12.450000 -45.209999 -v -41.150002 3.560000 -44.700001 -v -29.969999 13.460000 -51.049999 -v -35.310001 4.570000 -50.040001 -v -25.910000 5.590000 -53.849998 -v -30.480000 -4.570000 -55.630001 -v -40.889999 -8.380000 -51.310001 -v -45.470001 -24.379999 -50.799999 -v -45.970001 -34.799999 -51.310001 -v -41.150002 -24.639999 -54.860001 -v -39.880001 -38.610001 -58.669998 -v -29.969999 -28.190001 -60.450001 -v -30.230000 -16.000000 -57.660000 -v 15.240000 18.030001 -56.389999 -v 28.190001 18.540001 -45.970001 -v 21.590000 12.700000 -52.580002 -v 26.670000 2.540000 -51.049999 -v 8.380000 7.110000 -55.880001 -v -4.570000 6.860000 -53.340000 -v -13.970000 5.840000 -54.860001 -v -18.799999 7.110000 -55.369999 -v -25.150000 -1.520000 -54.610001 -v -18.799999 -25.150000 -60.709999 -v -21.840000 -34.040001 -61.720001 -v -19.299999 -18.030001 -59.939999 -v -24.639999 -12.450000 -57.400002 -v -20.320000 -2.540000 -55.369999 -v -14.730000 -3.810000 -55.630001 -v -8.890000 -4.830000 -55.369999 -v -1.270000 -5.330000 -54.610001 -v 8.380000 0.000000 -55.369999 -v 12.950000 3.810000 -55.369999 -v 20.070000 -4.060000 -53.590000 -v 27.940001 -8.640000 -52.070000 -v 19.809999 -17.020000 -58.169998 -v 26.920000 -20.570000 -56.130001 -v 33.529999 -22.350000 -50.799999 -v 33.020000 -13.210000 -48.009998 -v 10.160000 -21.590000 -58.669998 -v 2.540000 -16.760000 -57.660000 -v -4.570000 -13.210000 -56.900002 -v -13.460000 -16.760000 -58.669998 -v -17.780001 -11.430000 -57.400002 -v -8.890000 -27.430000 -59.439999 -v 2.790000 -30.480000 -59.939999 -v 17.530001 -26.420000 -60.709999 -v 24.129999 -35.560001 -59.689999 -v 32.259998 -30.480000 -52.830002 -v 12.450000 -41.910000 -65.019997 -v 20.320000 -50.290001 -62.990002 -v 0.510000 -47.750000 -64.519997 -v -4.060000 -38.099998 -58.669998 -v -9.650000 -34.040001 -58.169998 -v -14.480000 -31.750000 -59.689999 -v -16.760000 -38.349998 -61.209999 -v 35.310001 -1.020000 -41.910000 -v 32.509998 -4.060000 -47.240002 -v 36.580002 -15.750000 -44.200001 -v 40.639999 -20.320000 -38.610001 -v 37.849998 -24.889999 -44.450001 -v 40.889999 -41.400002 -39.619999 -v -9.650000 -44.200001 -56.389999 -v -21.840000 -38.349998 -62.740002 -v -29.719999 -39.119999 -62.740002 -v 28.450001 -41.400002 -55.880001 -v 25.910000 -53.590000 -58.419998 -v 16.000000 -62.480000 -65.019997 -v 4.830000 -57.910000 -67.059998 -v 13.460000 -54.610001 -66.550003 -v 6.600000 -65.019997 -66.290001 -v 9.400000 -69.599998 -65.019997 -v 11.430000 -74.169998 -62.480000 -v 23.370001 -73.150002 -57.660000 -v 13.970000 -80.260002 -57.910000 -v 19.299999 -82.300003 -53.590000 -v 24.889999 -83.570000 -48.009998 -v 30.480000 -74.419998 -48.770000 -v 41.400002 -60.959999 -36.320000 -v 48.770000 -73.150002 -15.240000 -v 41.150002 -75.690002 -33.020000 -v 37.080002 -75.440002 -39.119999 -v 26.670000 -86.360001 -44.700001 -v 32.259998 -90.419998 -38.349998 -v 41.660000 -84.580002 -30.480000 -v 43.180000 -92.459999 -27.430000 -v 50.040001 -82.800003 -11.180000 -v 35.810001 -48.509998 2.540000 -v 43.939999 -68.580002 7.370000 -v 48.009998 -73.660004 1.520000 -v 50.040001 -94.489998 12.950000 -v -14.480000 -52.320000 -61.720001 -v -8.890000 -53.849998 -56.639999 -v -9.400000 -63.500000 -56.389999 -v -14.480000 -65.279999 -60.959999 -v -14.220000 -72.389999 -56.900002 -v -9.400000 -70.870003 -53.090000 -v -0.250000 -73.660004 -60.709999 -v -14.480000 -75.180000 -54.360001 -v -8.890000 -76.199997 -45.970001 -v 2.030000 -82.040001 -54.610001 -v -0.760000 -65.790001 -63.750000 -v -21.590000 -77.980003 -55.880001 -v -18.290001 -65.019997 -62.480000 -v -23.879999 -73.910004 -59.939999 -v -24.889999 -57.660000 -65.019997 -v -22.860001 -51.820000 -65.790001 -v -29.459999 -52.070000 -65.279999 -v -39.619999 -43.430000 -59.689999 -v -4.570000 -51.310001 -61.470001 -v -5.330000 -62.230000 -61.470001 -v -4.830000 -73.150002 -57.660000 -v -2.540000 -82.040001 -51.049999 -v -4.830000 -80.260002 -49.020000 -v -0.250000 -60.200001 -65.019997 -v -39.119999 -53.590000 -60.959999 -v -29.459999 -61.720001 -64.010002 -v -39.880001 -60.200001 -60.200001 -v -38.349998 -68.830002 -58.669998 -v -32.770000 -74.169998 -57.660000 -v -42.930000 -73.150002 -50.290001 -v -39.880001 -80.519997 -46.480000 -v -35.560001 -81.029999 -48.770000 -v -32.000000 -80.519997 -51.560001 -v -19.049999 -80.010002 -52.580002 -v -15.240000 -78.739998 -49.529999 -v -26.670000 -68.330002 -62.480000 -v 52.830002 -103.889999 -2.030000 -v 44.450001 -112.519997 -21.590000 -v 38.099998 -115.059998 -26.920000 -v 36.580002 -96.269997 -33.529999 -v 26.670000 -91.690002 -40.639999 -v 20.570000 -99.309998 -37.080002 -v 22.610001 -115.059998 -31.240000 -v 10.410000 -112.269997 -29.209999 -v 9.140000 -99.309998 -34.040001 -v 8.640000 -91.440002 -38.349998 -v 17.530001 -92.459999 -41.660000 -v 20.070000 -86.870003 -47.750000 -v 15.490000 -86.110001 -50.799999 -v 3.050000 -84.580002 -51.310001 -v 6.100000 -87.379997 -46.230000 -v 17.020000 -89.919998 -44.700001 -v 0.250000 -86.110001 -42.930000 -v 3.810000 -89.150002 -35.310001 -v 0.000000 -86.110001 -31.500000 -v 2.790000 -98.040001 -28.700001 -v -3.300000 -83.059998 -41.400002 -v -5.080000 -83.570000 -27.430000 -v -2.290000 -96.519997 -22.350000 -v 3.810000 -102.110001 -27.430000 -v 0.250000 -103.889999 -20.830000 -v -1.780000 -106.169998 -22.860001 -v -8.380000 -78.739998 -37.590000 -v -12.950000 -83.059998 -35.810001 -v -7.620000 -97.790001 -29.209999 -v -9.140000 -113.790001 -30.990000 -v -16.000000 -98.550003 -35.810001 -v -19.809999 -85.089996 -40.389999 -v -28.190001 -84.070000 -46.230000 -v -37.080002 -86.110001 -40.889999 -v -27.430000 -85.849998 -41.400002 -v -27.690001 -91.440002 -40.889999 -v -24.639999 -98.040001 -38.610001 -v -18.290001 -115.320000 -34.799999 -v -26.160000 -114.550003 -35.049999 -v -34.290001 -96.519997 -37.849998 -v -37.849998 -113.540001 -30.990000 -v -41.660000 -94.739998 -34.540001 -v -49.779999 -92.709999 -26.670000 -v -46.740002 -112.010002 -22.860001 -v -49.279999 -81.029999 -34.290001 -v -43.430000 -84.070000 -38.349998 -v -50.799999 -69.849998 -39.119999 -v -47.500000 -68.070000 -47.500000 -v -41.150002 -65.790001 -57.400002 -v -44.450001 -60.959999 -54.860001 -v -48.009998 -55.119999 -48.259998 -v -53.590000 -57.660000 -38.610001 -v -54.860001 -68.830002 -30.730000 -v -53.090000 -78.989998 -28.959999 -v -54.360001 -89.919998 -13.970000 -v -56.639999 -76.709999 -15.490000 -v -50.799999 -111.000000 -10.670000 -v -42.669998 -46.480000 -56.389999 -v -42.930000 -54.610001 -57.150002 -v -48.509998 -42.930000 -46.740002 -v -51.560001 -48.770000 -41.910000 -v -55.880001 -57.660000 -33.020000 -v -58.669998 -57.660000 -19.809999 -v -56.639999 -42.419998 -24.639999 -v -55.880001 -74.680000 -1.020000 -v -54.099998 -86.870003 0.510000 -v -50.549999 -107.440002 5.590000 -v -46.990002 -83.059998 11.940000 -v -34.540001 -70.360001 18.799999 -v -48.770000 -64.519997 8.130000 -v -33.270000 -79.760002 21.340000 -v -30.990000 -101.599998 25.650000 -v -43.180000 -104.650002 17.270000 -v -57.150002 -41.910000 -11.180000 -v -58.419998 -57.660000 -6.350000 -v -58.930000 -65.019997 -10.920000 -v -25.400000 -56.389999 14.220000 -v -18.540001 -78.739998 21.590000 -v -14.480000 -98.809998 25.650000 -v -18.540001 -53.090000 9.400000 -v -4.570000 -55.369999 11.180000 -v -6.860000 -58.669998 10.410000 -v -7.870000 -61.470001 7.370000 -v -8.640000 -70.870003 13.720000 -v -6.100000 -86.110001 17.270000 -v -4.060000 -96.769997 19.559999 -v -0.760000 -95.250000 14.730000 -v -0.250000 -82.800003 8.130000 -v -0.510000 -68.070000 1.020000 -v -1.780000 -60.959999 9.400000 -v 2.540000 -56.389999 10.670000 -v 5.080000 -59.689999 8.890000 -v 7.370000 -62.990002 6.600000 -v 6.860000 -72.389999 13.210000 -v 6.600000 -85.339996 18.799999 -v 6.860000 -97.279999 22.610001 -v 13.720000 -88.389999 24.129999 -v 14.220000 -98.300003 27.690001 -v 13.720000 -79.760002 20.830000 -v 12.950000 -67.559998 14.220000 -v 12.700000 -58.169998 6.600000 -v 9.910000 -54.860001 9.140000 -v 23.879999 -49.279999 5.080000 -v 34.799999 -80.519997 21.840000 -v 36.070000 -64.010002 11.680000 -v 34.799999 -89.410004 26.160000 -v 24.639999 -58.169998 10.670000 -v 23.370001 -73.410004 19.809999 -v 24.379999 -91.440002 27.940001 -# 711 vertices - -# 0 texture vertices - -# 0 normals - -g d -usemtl vskin -s 1 -f 3 2 1 -f 2 4 1 -f 5 1 4 -f 6 5 4 -f 7 5 6 -f 6 4 8 -f 9 8 4 -f 2 9 4 -f 10 9 2 -f 2 11 10 -f 3 11 2 -f 12 10 11 -f 12 11 13 -f 3 13 11 -f 3 15 14 -f 14 13 3 -f 14 16 13 -f 13 16 17 -f 19 16 18 -f 18 16 14 -f 20 18 14 -f 15 20 14 -f 12 17 21 -f 17 12 13 -f 23 18 22 -f 22 18 20 -f 22 25 24 -f 23 24 26 -f 24 23 22 -f 28 27 25 -f 25 27 24 -f 24 27 26 -f 29 18 23 -f 18 29 19 -f 30 19 29 -f 30 29 31 -f 31 29 23 -f 23 26 31 -f 19 30 32 -f 32 16 19 -f 28 25 33 -f 33 25 34 -f 33 35 28 -f 33 36 35 -f 35 36 37 -f 37 36 5 -f 5 36 38 -f 38 36 39 -f 38 39 3 -f 1 38 3 -f 1 5 38 -f 3 39 34 -f 15 3 34 -f 20 15 34 -f 22 20 34 -f 25 22 34 -f 36 33 34 -f 39 36 34 -f 40 10 12 -f 12 21 40 -f 30 41 32 -f 42 16 32 -f 32 43 42 -f 44 43 32 -f 32 41 44 -f 45 44 41 -f 41 46 45 -f 41 47 46 -f 47 41 48 -f 30 48 41 -f 31 48 30 -f 47 48 31 -f 47 50 49 -f 49 46 47 -f 50 47 51 -f 51 47 31 -f 51 31 52 -f 53 51 52 -f 51 53 50 -f 31 26 52 -f 26 54 52 -f 26 27 54 -f 54 27 55 -f 55 27 56 -f 56 27 57 -f 57 27 28 -f 57 28 35 -f 37 57 35 -f 7 57 37 -f 58 53 52 -f 59 58 52 -f 60 59 52 -f 54 60 52 -f 55 60 54 -f 61 60 55 -f 61 55 62 -f 62 55 63 -f 63 55 8 -f 55 6 8 -f 56 6 55 -f 57 7 56 -f 6 56 7 -f 8 9 64 -f 64 65 8 -f 63 8 65 -f 63 65 66 -f 66 62 63 -f 66 65 67 -f 65 64 67 -f 64 68 67 -f 68 64 9 -f 69 68 9 -f 9 10 69 -f 71 69 70 -f 70 69 10 -f 70 72 71 -f 71 72 73 -f 5 7 37 -f 10 40 70 -f 70 40 72 -f 72 40 74 -f 40 21 74 -f 74 21 75 -f 21 17 75 -f 73 72 74 -f 74 76 73 -f 74 75 76 -f 17 77 75 -f 42 77 17 -f 17 16 42 -f 79 78 69 -f 78 68 69 -f 68 78 80 -f 81 68 80 -f 81 82 68 -f 68 82 67 -f 82 83 67 -f 84 83 82 -f 82 81 84 -f 84 81 80 -f 83 66 67 -f 66 83 85 -f 86 66 85 -f 66 86 87 -f 62 66 87 -f 88 62 87 -f 62 88 61 -f 89 61 88 -f 61 89 90 -f 59 60 90 -f 60 61 90 -f 89 91 90 -f 91 59 90 -f 59 91 92 -f 58 59 92 -f 93 58 92 -f 94 93 92 -f 91 94 92 -f 94 95 93 -f 96 93 95 -f 97 93 96 -f 58 93 97 -f 97 98 58 -f 53 58 98 -f 53 98 50 -f 99 50 98 -f 100 99 97 -f 98 97 99 -f 97 96 100 -f 99 49 50 -f 101 49 99 -f 99 100 101 -f 46 49 101 -f 101 102 46 -f 102 103 46 -f 45 46 103 -f 104 45 103 -f 44 45 104 -f 104 105 44 -f 106 44 105 -f 44 106 43 -f 42 43 107 -f 43 106 108 -f 108 106 109 -f 43 108 110 -f 107 43 110 -f 107 77 42 -f 77 107 111 -f 107 112 111 -f 112 107 110 -f 113 77 111 -f 113 114 77 -f 75 77 114 -f 75 114 115 -f 115 116 75 -f 76 75 116 -f 116 115 117 -f 117 118 116 -f 116 73 76 -f 73 116 118 -f 73 118 71 -f 71 118 119 -f 118 117 120 -f 119 118 120 -f 121 119 120 -f 109 106 122 -f 122 106 105 -f 105 104 122 -f 104 123 122 -f 124 123 104 -f 103 124 104 -f 124 103 125 -f 103 102 125 -f 125 102 126 -f 126 102 101 -f 101 127 126 -f 128 127 101 -f 128 101 100 -f 100 129 128 -f 129 100 130 -f 130 100 96 -f 95 131 96 -f 96 131 130 -f 132 131 95 -f 79 69 71 -f 71 119 79 -f 133 119 121 -f 119 133 79 -f 78 79 133 -f 133 134 78 -f 78 134 80 -f 134 135 80 -f 136 84 80 -f 135 136 80 -f 136 137 84 -f 138 84 137 -f 84 138 83 -f 83 138 85 -f 139 88 87 -f 88 139 89 -f 140 91 89 -f 91 140 94 -f 94 142 141 -f 94 140 142 -f 95 94 141 -f 132 95 141 -f 135 134 143 -f 143 134 133 -f 133 144 143 -f 133 145 144 -f 121 145 133 -f 146 145 121 -f 121 120 147 -f 121 147 146 -f 147 120 148 -f 120 117 148 -f 148 117 149 -f 117 115 149 -f 115 151 150 -f 115 114 151 -f 151 114 152 -f 153 148 149 -f 150 153 149 -f 145 146 154 -f 144 145 154 -f 155 144 154 -f 144 155 143 -f 156 143 155 -f 157 155 154 -f 155 157 156 -f 158 143 156 -f 143 158 135 -f 135 158 159 -f 158 160 159 -f 158 156 160 -f 156 161 160 -f 156 157 161 -f 161 157 162 -f 163 162 157 -f 161 162 164 -f 163 165 162 -f 166 162 165 -f 162 166 164 -f 166 167 164 -f 167 168 164 -f 168 161 164 -f 168 160 161 -f 160 168 159 -f 136 135 159 -f 137 136 159 -f 169 138 137 -f 138 169 85 -f 169 170 85 -f 170 169 171 -f 171 169 159 -f 169 137 159 -f 172 171 159 -f 173 172 159 -f 168 173 159 -f 173 168 174 -f 168 167 174 -f 170 175 85 -f 175 86 85 -f 86 175 176 -f 177 86 176 -f 163 157 154 -f 146 163 154 -f 86 177 87 -f 177 178 87 -f 178 139 87 -f 89 139 179 -f 180 89 179 -f 180 181 89 -f 89 181 182 -f 140 89 182 -f 142 140 183 -f 183 140 182 -f 142 184 141 -f 184 185 141 -f 185 132 141 -f 132 185 186 -f 186 187 132 -f 187 131 132 -f 188 131 187 -f 186 185 189 -f 189 185 184 -f 190 183 182 -f 191 190 182 -f 181 192 182 -f 193 192 181 -f 181 180 193 -f 180 194 193 -f 194 180 179 -f 195 194 179 -f 139 195 179 -f 196 195 139 -f 139 178 196 -f 196 178 197 -f 197 178 177 -f 198 197 177 -f 199 198 177 -f 199 177 176 -f 200 199 176 -f 199 200 198 -f 198 200 201 -f 202 201 200 -f 202 200 203 -f 200 175 203 -f 175 170 203 -f 175 200 176 -f 170 204 203 -f 171 204 170 -f 205 204 171 -f 206 205 171 -f 171 172 206 -f 207 206 172 -f 172 173 207 -f 208 207 173 -f 208 173 174 -f 209 207 208 -f 208 210 209 -f 211 209 210 -f 210 202 211 -f 202 210 212 -f 201 202 212 -f 213 208 174 -f 167 214 174 -f 214 213 174 -f 215 167 166 -f 213 210 208 -f 213 216 210 -f 210 216 212 -f 216 217 212 -f 217 201 212 -f 201 217 218 -f 198 201 218 -f 197 198 218 -f 219 197 218 -f 197 219 220 -f 221 204 205 -f 205 206 221 -f 207 221 206 -f 209 221 207 -f 209 211 221 -f 221 211 202 -f 221 202 203 -f 204 221 203 -f 220 222 197 -f 196 197 222 -f 196 222 223 -f 195 196 223 -f 194 195 223 -f 224 194 223 -f 224 225 194 -f 193 194 225 -f 193 225 226 -f 192 193 226 -f 191 192 226 -f 227 191 226 -f 228 227 226 -f 229 228 226 -f 225 229 226 -f 192 191 182 -f 183 184 142 -f 183 190 230 -f 190 191 230 -f 191 227 230 -f 227 231 230 -f 231 232 230 -f 232 183 230 -f 183 232 233 -f 233 184 183 -f 189 184 233 -f 130 131 188 -f 188 234 130 -f 129 130 234 -f 234 128 129 -f 235 234 188 -f 236 235 188 -f 235 236 237 -f 237 238 235 -f 238 128 234 -f 235 238 234 -f 237 239 238 -f 128 238 239 -f 239 240 128 -f 240 127 128 -f 126 127 240 -f 241 220 219 -f 242 165 163 -f 166 242 215 -f 165 242 166 -f 163 243 242 -f 244 243 163 -f 247 246 245 -f 242 243 215 -f 163 248 244 -f 249 248 163 -f 163 146 249 -f 249 146 250 -f 147 250 146 -f 250 147 148 -f 148 153 250 -f 250 153 249 -f 251 249 153 -f 248 249 251 -f 251 252 248 -f 248 252 244 -f 244 252 247 -f 243 244 247 -f 247 215 243 -f 252 246 247 -f 251 246 252 -f 153 150 251 -f 251 150 246 -f 150 149 115 -f 150 151 246 -f 253 246 151 -f 245 246 253 -f 253 151 152 -f 114 113 152 -f 254 152 113 -f 254 113 111 -f 253 255 245 -f 152 255 253 -f 255 152 254 -f 255 254 256 -f 256 254 111 -f 257 256 111 -f 112 257 111 -f 257 112 110 -f 258 257 110 -f 108 258 110 -f 108 259 258 -f 259 108 109 -f 122 259 109 -f 259 122 260 -f 260 122 123 -f 123 261 260 -f 123 262 261 -f 262 123 124 -f 263 245 255 -f 264 263 255 -f 264 255 256 -f 256 265 264 -f 265 256 257 -f 257 258 265 -f 258 266 265 -f 267 258 259 -f 266 258 267 -f 268 267 259 -f 268 260 261 -f 259 260 268 -f 261 262 268 -f 262 269 268 -f 268 269 270 -f 270 271 268 -f 268 271 267 -f 271 272 267 -f 267 272 273 -f 273 266 267 -f 273 265 266 -f 265 273 274 -f 274 264 265 -f 275 264 274 -f 263 264 275 -f 275 276 263 -f 276 277 263 -f 245 263 277 -f 247 245 277 -f 167 215 278 -f 215 279 278 -f 215 280 279 -f 279 280 281 -f 280 282 281 -f 282 280 283 -f 280 277 283 -f 280 247 277 -f 247 280 215 -f 277 284 283 -f 284 285 283 -f 284 277 276 -f 276 285 284 -f 286 285 276 -f 275 286 276 -f 274 286 275 -f 274 287 286 -f 288 287 274 -f 273 288 274 -f 289 288 273 -f 273 272 289 -f 272 271 289 -f 271 290 289 -f 270 290 271 -f 291 290 270 -f 292 290 291 -f 291 293 292 -f 290 292 289 -f 294 289 292 -f 295 289 294 -f 288 289 295 -f 295 287 288 -f 296 287 295 -f 297 287 296 -f 286 287 297 -f 297 285 286 -f 285 297 298 -f 285 298 283 -f 298 299 283 -f 299 282 283 -f 292 293 300 -f 300 294 292 -f 301 294 300 -f 295 294 301 -f 302 295 301 -f 302 296 295 -f 296 302 297 -f 297 302 303 -f 298 297 303 -f 126 240 304 -f 240 305 304 -f 240 239 305 -f 305 239 306 -f 237 307 239 -f 308 307 237 -f 237 236 309 -f 309 308 237 -f 306 307 308 -f 307 306 239 -f 306 308 310 -f 305 306 310 -f 311 308 309 -f 310 308 311 -f 312 305 310 -f 305 312 304 -f 312 125 304 -f 125 126 304 -f 125 262 124 -f 313 262 125 -f 312 313 125 -f 313 312 314 -f 312 310 314 -f 310 311 314 -f 311 315 314 -f 315 270 314 -f 270 269 314 -f 269 262 314 -f 262 313 314 -f 291 270 316 -f 270 315 316 -f 315 311 316 -f 311 317 316 -f 317 318 316 -f 318 319 316 -f 319 291 316 -f 320 318 317 -f 317 311 320 -f 320 311 309 -f 309 321 320 -f 309 322 321 -f 321 322 323 -f 321 324 320 -f 324 318 320 -f 325 324 321 -f 321 323 325 -f 188 187 236 -f 236 187 326 -f 309 236 326 -f 187 186 326 -f 322 309 326 -f 186 322 326 -f 186 327 322 -f 189 327 186 -f 327 189 328 -f 233 328 189 -f 232 328 233 -f 328 232 329 -f 232 231 329 -f 330 231 227 -f 227 228 330 -f 330 228 229 -f 229 331 330 -f 229 225 331 -f 331 225 224 -f 333 332 223 -f 332 331 223 -f 331 224 223 -f 331 332 334 -f 334 330 331 -f 330 334 329 -f 231 330 329 -f 335 328 329 -f 336 335 329 -f 334 336 329 -f 336 334 337 -f 334 332 337 -f 332 338 337 -f 333 338 332 -f 333 222 220 -f 241 219 218 -f 217 241 218 -f 241 217 339 -f 339 217 340 -f 340 217 216 -f 328 322 327 -f 323 322 341 -f 341 322 328 -f 328 335 341 -f 341 335 342 -f 335 336 342 -f 336 343 342 -f 343 336 337 -f 338 343 337 -f 343 338 344 -f 338 345 344 -f 346 345 338 -f 338 333 346 -f 346 333 220 -f 220 241 346 -f 346 241 339 -f 347 346 339 -f 346 347 348 -f 347 349 348 -f 349 350 348 -f 345 346 348 -f 351 345 348 -f 350 351 348 -f 352 350 349 -f 351 353 345 -f 345 353 344 -f 353 354 344 -f 354 355 344 -f 355 343 344 -f 343 355 342 -f 355 356 342 -f 354 356 355 -f 356 341 342 -f 341 356 357 -f 341 357 323 -f 357 325 323 -f 222 333 223 -f 339 340 347 -f 216 358 340 -f 340 360 359 -f 340 358 360 -f 347 340 359 -f 349 347 359 -f 361 349 359 -f 361 352 349 -f 362 361 359 -f 363 361 362 -f 362 364 363 -f 279 363 364 -f 363 279 281 -f 279 364 365 -f 279 365 278 -f 365 214 278 -f 214 167 278 -f 358 216 213 -f 213 214 358 -f 214 365 358 -f 365 360 358 -f 360 362 359 -f 362 360 365 -f 365 364 362 -f 354 353 366 -f 367 354 366 -f 354 367 368 -f 368 356 354 -f 357 356 368 -f 368 369 357 -f 353 351 366 -f 351 350 370 -f 351 372 371 -f 351 371 366 -f 368 367 373 -f 369 368 373 -f 373 374 369 -f 375 369 374 -f 325 369 375 -f 357 369 325 -f 375 324 325 -f 375 318 324 -f 376 318 375 -f 374 376 375 -f 352 361 377 -f 350 352 370 -f 352 377 370 -f 372 351 370 -f 379 373 378 -f 373 380 378 -f 373 367 380 -f 380 367 366 -f 381 380 366 -f 382 381 366 -f 371 382 366 -f 382 371 383 -f 371 384 383 -f 384 371 372 -f 384 372 370 -f 385 384 370 -f 386 385 370 -f 377 386 370 -f 387 386 377 -f 377 361 387 -f 387 361 388 -f 361 363 388 -f 363 389 388 -f 389 363 281 -f 390 389 281 -f 390 391 389 -f 392 391 390 -f 390 393 392 -f 389 391 388 -f 391 394 388 -f 394 391 395 -f 395 391 392 -f 392 393 396 -f 392 396 397 -f 395 392 397 -f 398 395 397 -f 398 399 395 -f 395 399 400 -f 394 395 400 -f 387 394 400 -f 394 387 388 -f 386 387 400 -f 401 386 400 -f 402 401 400 -f 399 402 400 -f 399 398 402 -f 403 402 398 -f 402 403 404 -f 405 402 404 -f 405 401 402 -f 401 405 406 -f 386 401 406 -f 407 386 406 -f 385 386 407 -f 384 385 408 -f 408 409 384 -f 384 409 383 -f 409 410 383 -f 410 411 383 -f 410 412 411 -f 411 412 404 -f 412 405 404 -f 405 412 406 -f 412 407 406 -f 385 407 413 -f 408 385 413 -f 409 408 413 -f 410 409 413 -f 412 410 413 -f 407 412 413 -f 411 414 383 -f 414 381 382 -f 414 382 383 -f 415 381 414 -f 416 381 415 -f 380 381 416 -f 380 416 378 -f 416 417 378 -f 417 379 378 -f 418 379 417 -f 417 416 419 -f 416 420 419 -f 420 416 421 -f 416 422 421 -f 415 422 416 -f 415 414 423 -f 414 411 423 -f 411 424 423 -f 424 411 404 -f 425 424 404 -f 426 425 404 -f 403 426 404 -f 425 426 427 -f 428 425 427 -f 425 428 421 -f 428 420 421 -f 422 425 421 -f 425 422 423 -f 424 425 423 -f 422 415 423 -f 429 374 373 -f 373 379 429 -f 430 429 379 -f 379 418 430 -f 430 418 431 -f 431 432 430 -f 433 432 431 -f 431 434 433 -f 433 434 435 -f 433 435 436 -f 435 434 437 -f 437 434 438 -f 434 431 438 -f 431 439 438 -f 431 418 439 -f 439 418 417 -f 439 417 419 -f 440 439 419 -f 439 440 438 -f 440 441 438 -f 441 442 438 -f 442 437 438 -f 442 441 443 -f 441 444 443 -f 441 440 444 -f 420 440 419 -f 420 428 440 -f 444 440 428 -f 428 445 444 -f 446 444 445 -f 444 446 443 -f 445 428 427 -f 447 445 427 -f 445 447 448 -f 446 445 448 -f 447 449 448 -f 449 447 450 -f 447 426 450 -f 426 447 427 -f 426 403 450 -f 451 449 450 -f 452 451 450 -f 452 454 453 -f 454 452 455 -f 455 452 450 -f 398 455 450 -f 403 398 450 -f 456 398 397 -f 398 456 455 -f 457 455 456 -f 456 458 457 -f 458 456 397 -f 396 458 397 -f 458 396 393 -f 393 459 458 -f 459 393 460 -f 460 393 461 -f 393 390 462 -f 390 463 462 -f 459 464 458 -f 464 459 465 -f 458 464 466 -f 466 464 467 -f 468 467 464 -f 466 467 469 -f 467 470 469 -f 454 455 469 -f 455 457 469 -f 457 458 469 -f 458 466 469 -f 282 463 281 -f 463 390 281 -f 282 299 463 -f 463 299 471 -f 461 463 471 -f 463 461 462 -f 461 393 462 -f 461 472 460 -f 460 472 473 -f 473 459 460 -f 465 459 473 -f 473 474 465 -f 474 473 472 -f 476 474 475 -f 474 472 475 -f 472 477 475 -f 461 477 472 -f 477 461 478 -f 471 478 461 -f 478 471 299 -f 299 298 479 -f 478 299 479 -f 480 478 479 -f 481 480 479 -f 479 303 481 -f 298 303 479 -f 481 482 480 -f 480 482 483 -f 478 480 483 -f 483 477 478 -f 484 477 483 -f 477 484 475 -f 484 485 475 -f 484 486 485 -f 485 486 487 -f 486 488 487 -f 489 488 486 -f 486 483 489 -f 483 482 489 -f 483 486 484 -f 319 293 291 -f 319 490 293 -f 493 492 491 -f 490 491 492 -f 293 490 494 -f 293 494 300 -f 300 495 301 -f 301 495 302 -f 302 495 496 -f 496 497 302 -f 303 302 497 -f 497 481 303 -f 498 482 481 -f 489 482 498 -f 499 488 489 -f 500 488 499 -f 499 489 501 -f 501 489 502 -f 489 498 502 -f 498 503 502 -f 481 497 498 -f 498 497 503 -f 503 497 496 -f 496 504 503 -f 496 505 504 -f 495 505 496 -f 506 505 495 -f 506 495 300 -f 300 507 506 -f 300 494 507 -f 494 508 507 -f 490 508 494 -f 492 508 490 -f 508 492 509 -f 509 492 493 -f 493 510 509 -f 508 509 507 -f 510 512 511 -f 510 514 513 -f 513 512 510 -f 511 509 510 -f 515 509 511 -f 507 509 515 -f 515 516 507 -f 517 507 516 -f 506 507 517 -f 517 505 506 -f 518 505 517 -f 504 505 518 -f 518 519 504 -f 503 504 519 -f 503 519 502 -f 519 501 502 -f 501 519 518 -f 501 518 499 -f 518 520 499 -f 520 518 517 -f 520 516 515 -f 517 516 520 -f 515 521 520 -f 522 521 515 -f 511 522 515 -f 511 512 522 -f 523 522 512 -f 512 524 523 -f 513 524 512 -f 523 525 522 -f 523 526 525 -f 525 521 522 -f 527 521 525 -f 521 527 528 -f 520 521 528 -f 528 529 520 -f 530 520 529 -f 530 499 520 -f 499 530 531 -f 500 499 531 -f 376 319 318 -f 319 376 490 -f 491 490 376 -f 491 376 374 -f 374 429 491 -f 491 429 532 -f 532 533 491 -f 491 533 493 -f 510 493 533 -f 533 514 510 -f 534 514 533 -f 533 532 534 -f 532 430 534 -f 429 430 532 -f 535 534 430 -f 430 432 535 -f 432 536 535 -f 537 536 432 -f 432 433 537 -f 536 534 535 -f 514 534 513 -f 513 534 536 -f 524 513 536 -f 524 536 537 -f 529 538 530 -f 530 538 531 -f 539 500 531 -f 539 540 500 -f 500 540 488 -f 488 540 487 -f 524 541 523 -f 526 523 541 -f 526 541 542 -f 542 543 526 -f 525 544 527 -f 525 545 544 -f 526 545 525 -f 543 545 526 -f 545 543 546 -f 546 544 545 -f 546 543 547 -f 548 547 543 -f 543 549 548 -f 548 549 550 -f 550 549 551 -f 552 551 549 -f 552 549 553 -f 553 549 542 -f 542 549 543 -f 553 542 554 -f 554 542 541 -f 541 537 554 -f 537 541 524 -f 436 537 433 -f 554 537 436 -f 436 555 554 -f 555 556 554 -f 556 557 554 -f 554 557 553 -f 553 557 558 -f 559 558 557 -f 559 557 560 -f 560 557 556 -f 556 555 560 -f 561 560 555 -f 555 562 561 -f 555 435 562 -f 436 435 555 -f 564 435 563 -f 435 564 565 -f 565 562 435 -f 566 562 565 -f 565 564 566 -f 528 538 529 -f 538 567 531 -f 538 568 567 -f 567 568 569 -f 569 570 567 -f 571 570 569 -f 569 572 571 -f 546 547 573 -f 547 548 573 -f 575 574 572 -f 573 548 576 -f 576 548 550 -f 574 571 572 -f 544 546 577 -f 558 552 553 -f 574 578 571 -f 580 579 571 -f 571 578 580 -f 579 570 571 -f 567 570 579 -f 581 567 579 -f 582 567 581 -f 567 582 531 -f 582 539 531 -f 539 582 540 -f 582 583 540 -f 540 583 584 -f 584 487 540 -f 528 585 538 -f 538 585 568 -f 585 586 568 -f 568 586 569 -f 587 569 586 -f 572 569 587 -f 588 572 587 -f 575 572 589 -f 588 589 572 -f 587 576 588 -f 573 576 587 -f 587 577 573 -f 573 577 546 -f 586 577 587 -f 577 586 590 -f 590 544 577 -f 590 586 585 -f 590 585 527 -f 585 528 527 -f 527 544 590 -f 591 584 583 -f 583 592 591 -f 593 591 592 -f 592 594 593 -f 592 595 594 -f 596 594 595 -f 596 595 597 -f 597 595 598 -f 598 595 599 -f 595 580 599 -f 580 578 599 -f 600 578 574 -f 574 601 600 -f 575 601 574 -f 580 595 602 -f 579 580 602 -f 592 579 602 -f 579 592 581 -f 583 581 592 -f 581 583 582 -f 595 592 602 -f 603 561 562 -f 604 561 603 -f 605 561 604 -f 606 561 605 -f 560 561 606 -f 606 559 560 -f 606 607 559 -f 608 606 605 -f 605 609 608 -f 608 609 610 -f 610 611 608 -f 611 612 608 -f 608 612 613 -f 608 613 607 -f 607 606 608 -f 607 558 559 -f 558 607 613 -f 613 614 558 -f 558 614 552 -f 552 614 551 -f 615 551 614 -f 551 615 550 -f 550 615 576 -f 576 615 616 -f 617 616 615 -f 617 615 612 -f 612 615 618 -f 618 613 612 -f 618 614 613 -f 614 618 615 -f 616 588 576 -f 588 616 617 -f 617 619 588 -f 612 619 617 -f 622 621 620 -f 612 620 619 -f 619 623 588 -f 621 625 624 -f 621 624 623 -f 622 625 621 -f 620 611 622 -f 620 612 611 -f 626 611 610 -f 626 622 611 -f 626 627 622 -f 610 627 626 -f 622 627 625 -f 627 628 625 -f 624 629 623 -f 629 575 623 -f 588 623 589 -f 630 575 629 -f 629 624 630 -f 625 630 624 -f 631 630 625 -f 631 625 628 -f 628 632 631 -f 631 632 633 -f 633 630 631 -f 634 630 633 -f 630 634 601 -f 630 601 575 -f 634 600 601 -f 578 600 599 -f 600 635 599 -f 635 636 599 -f 636 598 599 -f 636 597 598 -f 635 600 634 -f 634 637 635 -f 636 635 637 -f 636 637 638 -f 637 634 638 -f 633 638 634 -f 639 638 633 -f 640 639 633 -f 632 640 633 -f 639 640 641 -f 641 642 639 -f 642 641 643 -f 643 644 642 -f 644 643 645 -f 645 643 646 -f 645 647 644 -f 644 648 636 -f 636 642 644 -f 638 642 636 -f 639 642 638 -f 648 597 636 -f 647 648 644 -f 596 648 647 -f 648 596 597 -f 647 649 596 -f 596 649 650 -f 651 596 650 -f 651 594 596 -f 593 594 651 -f 651 652 593 -f 650 652 651 -f 652 650 653 -f 650 649 653 -f 649 654 653 -f 649 655 654 -f 655 649 647 -f 655 647 656 -f 656 647 645 -f 658 645 657 -f 645 646 657 -f 646 659 657 -f 620 621 623 -f 620 623 619 -f 660 487 584 -f 660 584 591 -f 661 660 591 -f 591 593 661 -f 661 593 652 -f 661 652 653 -f 662 660 653 -f 660 661 653 -f 662 485 660 -f 485 487 660 -f 662 663 476 -f 664 476 663 -f 654 664 663 -f 654 663 653 -f 663 662 653 -f 476 664 665 -f 666 476 665 -f 476 666 474 -f 485 662 475 -f 662 476 475 -f 655 664 654 -f 664 655 665 -f 655 658 665 -f 656 658 655 -f 647 656 655 -f 645 658 656 -f 623 575 589 -f 667 658 657 -f 668 667 657 -f 669 668 657 -f 659 669 657 -f 668 669 670 -f 670 667 668 -f 672 670 671 -f 670 673 671 -f 670 674 673 -f 675 674 670 -f 670 669 675 -f 676 666 665 -f 677 676 665 -f 676 677 468 -f 468 464 676 -f 667 468 677 -f 677 678 667 -f 678 677 665 -f 658 678 665 -f 658 667 678 -f 670 672 667 -f 468 667 672 -f 468 672 467 -f 672 470 467 -f 470 672 671 -f 470 679 469 -f 679 470 671 -f 680 679 671 -f 673 680 671 -f 680 673 674 -f 674 681 680 -f 474 666 465 -f 465 666 676 -f 464 465 676 -f 679 454 469 -f 679 682 454 -f 454 682 453 -f 451 452 453 -f 683 451 453 -f 684 683 453 -f 685 684 453 -f 453 682 685 -f 685 682 686 -f 682 679 686 -f 679 680 686 -f 680 687 686 -f 680 681 687 -f 687 681 688 -f 688 689 687 -f 690 687 689 -f 687 690 686 -f 690 691 686 -f 691 685 686 -f 685 691 692 -f 684 685 692 -f 683 684 692 -f 449 451 683 -f 683 693 449 -f 693 683 692 -f 694 693 692 -f 691 694 692 -f 691 695 694 -f 695 691 696 -f 691 690 696 -f 690 697 696 -f 697 690 689 -f 689 698 697 -f 698 700 699 -f 697 698 699 -f 701 697 699 -f 697 701 696 -f 701 702 696 -f 702 695 696 -f 702 703 695 -f 703 694 695 -f 704 694 703 -f 693 694 704 -f 693 704 448 -f 449 693 448 -f 704 446 448 -f 446 704 705 -f 446 705 443 -f 705 442 443 -f 563 442 705 -f 437 442 563 -f 563 435 437 -f 564 707 706 -f 566 564 706 -f 708 566 706 -f 563 707 564 -f 707 563 709 -f 563 705 709 -f 705 703 709 -f 703 705 704 -f 703 702 709 -f 702 710 709 -f 701 710 702 -f 701 711 710 -f 711 701 699 -f 700 711 699 -f 711 708 706 -f 710 711 706 -f 707 710 706 -f 710 707 709 -f 603 562 566 -f 610 689 627 -f 698 689 610 -f 698 610 609 -f 609 700 698 -f 711 700 609 -f 711 609 605 -f 605 708 711 -f 708 605 604 -f 604 566 708 -f 566 604 603 -f 627 689 688 -f 688 628 627 -f 628 688 681 -f 681 632 628 -f 632 681 674 -f 674 640 632 -f 641 640 674 -f 674 643 641 -f 643 674 675 -f 675 646 643 -f 669 646 675 -f 659 646 669 -# 1419 elements +# Tue Oct 22 14:45:37 1991 +# +# + +mtllib venus.mtl + +g default +v -27.430000 147.320007 -3.300000 +v -30.480000 135.380005 -9.400000 +v -21.590000 150.619995 -15.490000 +v -26.670000 129.789993 3.300000 +v -24.129999 142.490005 13.460000 +v -15.240000 124.459999 12.450000 +v -13.970000 135.889999 19.049999 +v -18.799999 114.050003 6.350000 +v -31.500000 120.400002 -1.520000 +v -35.810001 128.020004 -13.720000 +v -27.180000 138.429993 -22.610001 +v -35.310001 130.809998 -28.959999 +v -23.879999 140.460007 -27.690001 +v -16.510000 142.240005 -28.450001 +v -13.720000 151.380005 -18.030001 +v -19.049999 134.869995 -38.860001 +v -30.990000 132.330002 -36.830002 +v -8.130000 143.000000 -26.670000 +v -4.320000 138.940002 -31.750000 +v -9.650000 150.110001 -18.799999 +v -40.889999 126.489998 -32.509998 +v -5.840000 149.610001 -15.490000 +v -0.760000 140.210007 -18.799999 +v 0.760000 138.429993 -5.590000 +v 0.250000 145.289993 -3.810000 +v 4.570000 130.050003 -7.870000 +v 0.000000 132.080002 4.830000 +v -0.510000 139.190002 8.890000 +v 2.030000 137.919998 -24.129999 +v 2.790000 135.639999 -34.040001 +v 8.640000 133.600006 -21.080000 +v 0.250000 134.369995 -39.119999 +v -6.100000 142.750000 2.540000 +v -12.190000 145.800003 -7.370000 +v -6.100000 138.940002 11.680000 +v -14.990000 143.759995 4.060000 +v -12.950000 138.679993 16.260000 +v -25.910000 147.830002 -1.020000 +v -21.590000 148.839996 -5.840000 +v -41.150002 125.980003 -25.150000 +v 9.910000 131.830002 -39.619999 +v -20.570000 129.289993 -45.209999 +v -9.910000 124.709999 -48.509998 +v 3.050000 129.289993 -45.209999 +v 18.030001 127.250000 -43.430000 +v 31.500000 124.970001 -35.560001 +v 29.209999 127.000000 -26.420000 +v 10.670000 133.860001 -30.230000 +v 41.660000 121.669998 -27.690001 +v 38.610001 123.699997 -20.070000 +v 26.420000 125.480003 -17.020000 +v 24.889999 120.139999 -9.140000 +v 35.810001 121.160004 -10.920000 +v 0.760000 121.410004 1.270000 +v -6.350000 116.330002 5.080000 +v -6.350000 126.489998 10.410000 +v -7.370000 135.380005 15.490000 +v 38.099998 114.809998 -4.830000 +v 24.889999 110.489998 -1.780000 +v 10.670000 109.220001 4.830000 +v 8.890000 100.330002 9.400000 +v -5.840000 99.059998 11.680000 +v -13.720000 105.160004 9.650000 +v -32.770000 107.190002 5.590000 +v -24.639999 103.629997 9.400000 +v -22.350000 93.980003 13.460000 +v -34.290001 98.040001 9.650000 +v -44.959999 105.160004 1.020000 +v -51.820000 111.760002 -9.140000 +v -52.070000 114.550003 -17.270000 +v -60.709999 108.709999 -16.000000 +v -51.560001 116.589996 -26.160000 +v -58.419998 111.250000 -27.180000 +v -50.040001 118.110001 -34.290001 +v -46.480000 118.110001 -43.689999 +v -55.880001 112.519997 -36.070000 +v -34.799999 117.860001 -52.320000 +v -59.180000 98.550003 0.510000 +v -63.750000 103.120003 -5.840000 +v -53.340000 91.190002 5.840000 +v -47.240002 92.459999 7.620000 +v -41.400002 92.959999 9.910000 +v -36.580002 88.650002 12.950000 +v -46.740002 87.629997 9.140000 +v -30.990000 81.029999 16.000000 +v -19.559999 80.769997 17.530001 +v -4.830000 85.849998 16.000000 +v 6.860000 90.169998 13.970000 +v 18.290001 88.900002 12.190000 +v 19.559999 100.839996 6.350000 +v 28.190001 96.010002 5.840000 +v 33.020000 103.889999 0.760000 +v 44.700001 106.169998 -4.570000 +v 37.080002 98.040001 0.510000 +v 49.279999 97.790001 -6.100000 +v 51.820000 106.930000 -14.730000 +v 46.230000 116.589996 -13.460000 +v 41.150002 120.400002 -12.700000 +v 46.480000 118.360001 -18.799999 +v 51.049999 110.739998 -21.590000 +v 43.939999 116.330002 -34.290001 +v 34.799999 118.870003 -42.419998 +v 26.670000 118.620003 -48.259998 +v 9.140000 116.839996 -55.880001 +v 1.270000 117.599998 -55.119999 +v -4.320000 118.620003 -52.830002 +v -24.379999 119.889999 -51.560001 +v -9.650000 109.980003 -54.860001 +v -7.110000 109.220001 -55.880001 +v -12.950000 109.220001 -55.119999 +v -29.209999 106.169998 -58.930000 +v -24.639999 106.930000 -58.169998 +v -38.349998 104.389999 -56.389999 +v -48.259998 99.820000 -51.049999 +v -56.389999 101.089996 -44.200001 +v -60.450001 106.680000 -36.580002 +v -63.500000 99.059998 -36.070000 +v -64.769997 103.889999 -26.670000 +v -67.559998 101.089996 -14.730000 +v -68.830002 92.459999 -23.370001 +v -72.139999 88.139999 -10.160000 +v 1.780000 109.730003 -59.180000 +v 7.110000 109.220001 -59.939999 +v 18.290001 106.430000 -57.400002 +v 30.230000 104.900002 -52.070000 +v 37.590000 103.120003 -46.230000 +v 44.959999 102.110001 -42.419998 +v 51.049999 93.470001 -38.860001 +v 55.880001 98.040001 -24.889999 +v 56.639999 96.519997 -18.799999 +v 56.130001 94.739998 -14.730000 +v 53.340000 91.949997 -10.160000 +v -66.550003 93.980003 -0.760000 +v -59.180000 86.610001 5.330000 +v -54.099998 79.760002 4.830000 +v -49.529999 80.260002 4.570000 +v -45.470001 79.760002 9.140000 +v -41.910000 84.839996 11.940000 +v 5.080000 80.260002 16.000000 +v 29.209999 88.650002 7.620000 +v 44.200001 92.959999 -4.060000 +v 36.580002 92.459999 -0.510000 +v -61.470001 80.260002 4.830000 +v -67.559998 76.449997 1.780000 +v -71.370003 77.220001 -2.030000 +v -71.879997 72.900002 -14.480000 +v -71.120003 82.040001 -19.299999 +v -66.800003 83.309998 -30.730000 +v -61.470001 92.459999 -39.619999 +v -59.689999 87.879997 -39.880001 +v -53.849998 87.879997 -45.470001 +v -47.500000 86.610001 -52.070000 +v -63.500000 79.500000 -33.529999 +v -63.250000 69.089996 -2.030000 +v -63.250000 74.419998 4.320000 +v -57.660000 70.870003 5.590000 +v -58.930000 67.059998 1.780000 +v -55.880001 75.440002 5.590000 +v -45.209999 70.099998 4.060000 +v -51.049999 68.070000 4.830000 +v -52.320000 66.800003 5.080000 +v -54.860001 61.720001 -1.520000 +v -56.130001 60.709999 -12.950000 +v -49.779999 60.450001 0.510000 +v -53.849998 57.150002 -7.870000 +v -49.020000 54.360001 -6.100000 +v -42.669998 54.099998 -4.570000 +v -45.209999 62.990002 2.540000 +v -39.619999 76.709999 12.700000 +v -32.000000 72.900002 20.320000 +v -38.099998 69.849998 17.270000 +v -40.889999 65.790001 13.970000 +v -41.400002 61.980000 12.700000 +v -41.400002 54.860001 3.810000 +v -24.129999 73.150002 21.340000 +v -18.799999 73.150002 20.830000 +v -10.410000 75.949997 18.030001 +v -3.300000 77.980003 16.260000 +v 11.430000 77.470001 17.780001 +v 17.530001 77.720001 18.799999 +v 22.860001 83.059998 15.750000 +v 28.959999 84.839996 11.180000 +v 34.040001 85.339996 2.540000 +v 34.799999 85.849998 -4.830000 +v 44.700001 84.330002 -7.110000 +v 50.549999 76.199997 -10.920000 +v 56.900002 81.279999 -15.750000 +v 58.669998 85.599998 -22.860001 +v 35.810001 75.180000 -8.890000 +v 32.770000 82.040001 8.130000 +v 32.259998 79.500000 12.700000 +v 29.459999 80.010002 15.240000 +v 24.889999 76.449997 19.049999 +v 16.000000 72.900002 19.299999 +v 8.130000 72.139999 17.530001 +v 1.270000 67.309998 15.750000 +v -4.060000 66.550003 15.750000 +v -14.480000 63.750000 22.100000 +v -17.020000 68.580002 22.860001 +v -21.840000 66.550003 24.129999 +v -21.080000 57.910000 23.879999 +v -29.209999 59.689999 24.639999 +v -29.459999 65.790001 24.379999 +v -34.040001 67.059998 22.860001 +v -36.320000 65.790001 21.340000 +v -37.590000 64.010002 20.570000 +v -37.590000 61.720001 20.320000 +v -39.880001 56.639999 12.950000 +v -37.080002 59.439999 20.070000 +v -32.000000 53.849998 19.809999 +v -33.270000 57.910000 22.610001 +v -27.180000 55.119999 22.610001 +v -35.310001 49.529999 10.410000 +v -35.810001 46.480000 1.780000 +v -42.930000 51.560001 -16.260000 +v -29.459999 48.770000 16.000000 +v -17.270000 52.320000 19.049999 +v -12.450000 58.169998 19.299999 +v -4.830000 57.150002 13.210000 +v -0.250000 53.849998 11.430000 +v -34.540001 61.980000 23.879999 +v 2.790000 58.419998 12.950000 +v 9.910000 64.519997 16.510000 +v 17.270000 68.580002 19.049999 +v 24.129999 73.910004 20.070000 +v 29.719999 76.449997 17.780001 +v 32.770000 73.910004 13.970000 +v 30.230000 71.879997 16.260000 +v 26.160000 72.389999 19.049999 +v 34.799999 78.230003 6.600000 +v 34.540001 71.879997 8.380000 +v 36.070000 73.410004 1.020000 +v 35.049999 74.169998 -4.570000 +v 57.400002 89.150002 -28.450001 +v 57.150002 85.599998 -28.959999 +v 49.020000 74.169998 -23.620001 +v 43.180000 74.169998 -33.529999 +v 52.320000 86.360001 -37.590000 +v 44.450001 84.839996 -42.930000 +v 43.430000 94.739998 -43.430000 +v -8.130000 52.070000 12.700000 +v -48.509998 53.849998 -14.730000 +v -48.770000 58.419998 -21.590000 +v -56.389999 64.769997 -28.190001 +v -47.750000 67.559998 -43.939999 +v -54.099998 79.760002 -37.080002 +v -45.470001 60.959999 -25.400000 +v -60.709999 67.820000 -28.959999 +v -64.769997 69.339996 -26.670000 +v -67.820000 74.169998 -26.920000 +v -59.939999 78.989998 -35.049999 +v -56.130001 72.900002 -32.509998 +v -49.779999 79.250000 -47.240002 +v -37.340000 95.000000 -58.930000 +v -41.150002 79.500000 -56.389999 +v -32.259998 92.199997 -60.959999 +v -24.379999 92.459999 -60.959999 +v -11.430000 94.489998 -58.930000 +v -6.600000 96.010002 -59.180000 +v 2.540000 100.080002 -61.720001 +v 5.590000 100.580002 -61.720001 +v 15.750000 99.059998 -59.939999 +v -36.830002 68.070000 -57.150002 +v -28.190001 72.900002 -61.720001 +v -19.299999 81.529999 -61.720001 +v -9.910000 84.330002 -60.709999 +v -4.570000 84.580002 -61.470001 +v 5.590000 87.379997 -63.250000 +v 13.970000 85.089996 -62.740002 +v 11.430000 69.339996 -62.740002 +v 3.300000 71.629997 -64.010002 +v -3.300000 70.870003 -62.740002 +v -7.370000 70.099998 -62.230000 +v -16.000000 64.769997 -63.750000 +v -25.150000 60.959999 -63.250000 +v -33.529999 57.660000 -59.439999 +v -42.930000 62.230000 -44.450001 +v -38.610001 41.910000 -5.840000 +v -36.070000 34.040001 -7.870000 +v -40.389999 49.020000 -23.110001 +v -34.290001 25.400000 -11.430000 +v -37.340000 31.240000 -28.190001 +v -35.560001 40.130001 -43.180000 +v -34.799999 52.320000 -53.590000 +v -29.209999 43.939999 -57.660000 +v -22.100000 46.990002 -63.250000 +v -15.490000 49.279999 -62.990002 +v -6.600000 52.580002 -63.500000 +v -2.790000 51.820000 -64.260002 +v 4.060000 51.820000 -65.279999 +v 10.160000 48.509998 -64.010002 +v 3.050000 30.730000 -61.209999 +v 8.640000 26.420000 -60.200001 +v -0.760000 31.500000 -59.439999 +v -6.100000 31.240000 -60.200001 +v -13.720000 28.700001 -59.180000 +v -19.299999 27.180000 -60.959999 +v -28.190001 22.860001 -53.340000 +v -33.270000 21.590000 -44.450001 +v 2.290000 6.860000 -53.849998 +v -2.290000 12.950000 -53.090000 +v -11.940000 12.950000 -55.880001 +v -22.350000 14.220000 -57.150002 +v 37.340000 96.519997 -43.939999 +v 36.070000 90.419998 -42.160000 +v 35.810001 80.769997 -40.130001 +v 40.130001 80.010002 -41.660000 +v 34.290001 73.150002 -37.849998 +v 35.810001 64.519997 -27.940001 +v 31.240000 82.300003 -51.310001 +v 29.209999 64.519997 -50.799999 +v 33.270000 92.709999 -48.770000 +v 27.430000 96.010002 -55.369999 +v 24.379999 82.550003 -59.689999 +v 20.830000 66.800003 -58.930000 +v 19.299999 52.830002 -60.959999 +v 28.959999 52.580002 -51.049999 +v 28.959999 46.230000 -49.779999 +v 18.290001 44.450001 -60.200001 +v 36.830002 53.849998 -29.719999 +v 37.849998 53.340000 -23.620001 +v 36.830002 65.279999 -13.720000 +v 38.099998 52.830002 -16.260000 +v 36.830002 41.400002 -30.230000 +v 37.849998 39.369999 -20.570000 +v 47.500000 72.139999 -16.510000 +v 36.070000 69.339996 -10.410000 +v 35.310001 67.309998 -4.570000 +v 32.770000 63.500000 5.590000 +v 29.719999 67.059998 13.460000 +v 21.340000 65.019997 17.530001 +v 17.780001 57.910000 13.210000 +v 6.860000 54.610001 11.430000 +v 28.190001 59.939999 8.130000 +v 33.020000 58.930000 -1.780000 +v 29.719999 55.880001 1.270000 +v 23.620001 53.340000 6.350000 +v 16.510000 52.320000 9.140000 +v -11.940000 48.009998 12.700000 +v -18.799999 44.200001 11.430000 +v 36.580002 51.560001 -10.160000 +v 31.240000 48.259998 -2.290000 +v 24.379999 42.669998 3.560000 +v 19.049999 34.290001 6.350000 +v 14.220000 33.020000 8.890000 +v 2.030000 40.389999 10.920000 +v -10.160000 34.540001 11.430000 +v 3.300000 29.719999 8.380000 +v -10.920000 25.650000 9.140000 +v -2.290000 20.570000 5.330000 +v 11.180000 20.570000 5.330000 +v -9.650000 18.799999 5.080000 +v 18.030001 21.080000 2.030000 +v 25.400000 27.430000 -1.520000 +v 26.920000 35.310001 0.000000 +v 31.750000 36.070000 -4.830000 +v 36.580002 38.349998 -13.460000 +v -25.400000 43.430000 9.400000 +v -17.530001 30.230000 8.640000 +v -23.110001 35.810001 7.110000 +v -18.799999 17.270000 1.520000 +v -24.639999 28.959999 3.810000 +v -29.459999 21.080000 -4.570000 +v -31.750000 29.969999 -2.030000 +v -31.500000 37.849998 1.270000 +v 18.540001 15.490000 1.020000 +v 24.889999 17.270000 -5.080000 +v 33.020000 23.370001 -13.210000 +v 36.070000 27.940001 -18.540001 +v -2.790000 14.220000 5.080000 +v 11.430000 11.180000 3.560000 +v 6.100000 12.450000 4.320000 +v 34.540001 17.270000 -20.070000 +v 34.540001 22.100000 -30.990000 +v 36.070000 32.770000 -30.990000 +v 28.450001 33.020000 -47.750000 +v -9.400000 13.970000 5.080000 +v 33.529999 1.270000 -11.680000 +v 39.369999 -1.520000 -19.049999 +v 24.379999 8.890000 -6.350000 +v 19.049999 6.860000 -1.020000 +v 13.210000 5.840000 2.790000 +v 7.620000 4.320000 3.560000 +v 4.060000 7.110000 3.560000 +v -1.270000 5.080000 3.050000 +v -9.140000 3.300000 5.330000 +v -14.480000 5.590000 4.060000 +v -22.350000 11.430000 -1.020000 +v -28.700001 16.000000 -5.080000 +v -36.070000 13.720000 -13.460000 +v -27.430000 7.870000 -4.830000 +v -39.119999 -2.540000 -4.570000 +v -47.500000 -6.600000 -12.190000 +v -22.100000 5.590000 -0.760000 +v -26.420000 -2.030000 0.000000 +v -42.930000 -10.920000 -3.560000 +v -37.340000 -13.970000 1.020000 +v -23.879999 -19.049999 7.870000 +v -18.030001 -10.410000 8.380000 +v -15.490000 -0.510000 5.840000 +v -9.400000 -1.780000 7.110000 +v -9.400000 -11.680000 10.410000 +v -10.160000 -22.350000 11.180000 +v 1.270000 -11.940000 9.400000 +v -5.080000 -5.840000 8.130000 +v -4.570000 -1.270000 5.840000 +v -3.810000 1.270000 3.810000 +v 2.290000 4.060000 1.520000 +v 4.060000 3.050000 2.030000 +v 4.320000 -1.020000 3.560000 +v 6.600000 -2.540000 5.840000 +v -0.250000 -3.810000 5.080000 +v 0.250000 0.760000 0.000000 +v 14.730000 0.760000 4.060000 +v 19.809999 -2.030000 1.780000 +v 27.690001 -6.600000 -3.560000 +v 36.320000 -10.410000 -9.400000 +v 41.660000 -13.460000 -16.260000 +v 32.259998 -16.000000 -3.560000 +v 26.160000 -19.809999 0.760000 +v 20.570000 -14.730000 4.830000 +v 17.530001 -9.650000 5.840000 +v 14.220000 -6.350000 6.860000 +v 8.890000 -9.140000 8.640000 +v 11.940000 -15.750000 9.140000 +v 2.790000 -22.860001 10.670000 +v 12.190000 -29.969999 8.380000 +v 21.080000 -27.690001 4.060000 +v 38.610001 4.320000 -31.500000 +v 42.419998 -12.190000 -29.719999 +v 43.430000 -23.879999 -14.730000 +v 44.959999 -25.650000 -26.670000 +v 47.240002 -39.369999 -23.620001 +v 46.480000 -40.389999 -10.920000 +v 46.990002 -56.389999 -6.350000 +v 48.770000 -62.230000 -17.780001 +v 43.689999 -44.700001 -4.060000 +v 39.880001 -35.560001 -3.560000 +v 37.340000 -24.129999 -5.840000 +v 28.450001 -25.910000 0.000000 +v 32.509998 -36.320000 1.020000 +v 34.799999 -42.930000 1.520000 +v 25.400000 -41.400002 4.320000 +v 23.370001 -32.770000 3.560000 +v 14.220000 -38.349998 7.370000 +v 16.760000 -42.669998 6.600000 +v 4.830000 -31.500000 10.410000 +v 7.620000 -43.689999 9.650000 +v -1.020000 -45.470001 10.920000 +v -10.670000 -32.259998 10.670000 +v -9.650000 -45.720001 10.920000 +v -22.100000 -41.910000 9.140000 +v -15.750000 -49.279999 10.410000 +v -28.190001 -46.990002 8.890000 +v -29.459999 -30.990000 6.600000 +v -33.529999 -25.650000 4.830000 +v -36.580002 -29.969999 4.830000 +v -45.970001 -21.840000 -2.540000 +v -51.560001 -21.590000 -8.640000 +v -50.799999 -9.910000 -18.799999 +v -46.230000 1.520000 -31.500000 +v -42.419998 7.870000 -23.879999 +v -38.099998 18.030001 -32.259998 +v -55.369999 -40.639999 -5.840000 +v -56.389999 -37.080002 -12.190000 +v -49.020000 -39.369999 1.020000 +v -49.529999 -48.770000 3.300000 +v -57.400002 -57.660000 -3.560000 +v -37.590000 -43.939999 8.130000 +v -35.810001 -57.400002 14.220000 +v -41.150002 10.410000 -41.660000 +v -52.320000 -19.049999 -29.459999 +v -53.849998 -22.100000 -14.990000 +v -54.360001 -31.240000 -26.920000 +v -49.279999 -25.650000 -44.959999 +v -54.360001 -45.209999 -36.320000 +v -46.740002 -12.450000 -45.209999 +v -41.150002 3.560000 -44.700001 +v -29.969999 13.460000 -51.049999 +v -35.310001 4.570000 -50.040001 +v -25.910000 5.590000 -53.849998 +v -30.480000 -4.570000 -55.630001 +v -40.889999 -8.380000 -51.310001 +v -45.470001 -24.379999 -50.799999 +v -45.970001 -34.799999 -51.310001 +v -41.150002 -24.639999 -54.860001 +v -39.880001 -38.610001 -58.669998 +v -29.969999 -28.190001 -60.450001 +v -30.230000 -16.000000 -57.660000 +v 15.240000 18.030001 -56.389999 +v 28.190001 18.540001 -45.970001 +v 21.590000 12.700000 -52.580002 +v 26.670000 2.540000 -51.049999 +v 8.380000 7.110000 -55.880001 +v -4.570000 6.860000 -53.340000 +v -13.970000 5.840000 -54.860001 +v -18.799999 7.110000 -55.369999 +v -25.150000 -1.520000 -54.610001 +v -18.799999 -25.150000 -60.709999 +v -21.840000 -34.040001 -61.720001 +v -19.299999 -18.030001 -59.939999 +v -24.639999 -12.450000 -57.400002 +v -20.320000 -2.540000 -55.369999 +v -14.730000 -3.810000 -55.630001 +v -8.890000 -4.830000 -55.369999 +v -1.270000 -5.330000 -54.610001 +v 8.380000 0.000000 -55.369999 +v 12.950000 3.810000 -55.369999 +v 20.070000 -4.060000 -53.590000 +v 27.940001 -8.640000 -52.070000 +v 19.809999 -17.020000 -58.169998 +v 26.920000 -20.570000 -56.130001 +v 33.529999 -22.350000 -50.799999 +v 33.020000 -13.210000 -48.009998 +v 10.160000 -21.590000 -58.669998 +v 2.540000 -16.760000 -57.660000 +v -4.570000 -13.210000 -56.900002 +v -13.460000 -16.760000 -58.669998 +v -17.780001 -11.430000 -57.400002 +v -8.890000 -27.430000 -59.439999 +v 2.790000 -30.480000 -59.939999 +v 17.530001 -26.420000 -60.709999 +v 24.129999 -35.560001 -59.689999 +v 32.259998 -30.480000 -52.830002 +v 12.450000 -41.910000 -65.019997 +v 20.320000 -50.290001 -62.990002 +v 0.510000 -47.750000 -64.519997 +v -4.060000 -38.099998 -58.669998 +v -9.650000 -34.040001 -58.169998 +v -14.480000 -31.750000 -59.689999 +v -16.760000 -38.349998 -61.209999 +v 35.310001 -1.020000 -41.910000 +v 32.509998 -4.060000 -47.240002 +v 36.580002 -15.750000 -44.200001 +v 40.639999 -20.320000 -38.610001 +v 37.849998 -24.889999 -44.450001 +v 40.889999 -41.400002 -39.619999 +v -9.650000 -44.200001 -56.389999 +v -21.840000 -38.349998 -62.740002 +v -29.719999 -39.119999 -62.740002 +v 28.450001 -41.400002 -55.880001 +v 25.910000 -53.590000 -58.419998 +v 16.000000 -62.480000 -65.019997 +v 4.830000 -57.910000 -67.059998 +v 13.460000 -54.610001 -66.550003 +v 6.600000 -65.019997 -66.290001 +v 9.400000 -69.599998 -65.019997 +v 11.430000 -74.169998 -62.480000 +v 23.370001 -73.150002 -57.660000 +v 13.970000 -80.260002 -57.910000 +v 19.299999 -82.300003 -53.590000 +v 24.889999 -83.570000 -48.009998 +v 30.480000 -74.419998 -48.770000 +v 41.400002 -60.959999 -36.320000 +v 48.770000 -73.150002 -15.240000 +v 41.150002 -75.690002 -33.020000 +v 37.080002 -75.440002 -39.119999 +v 26.670000 -86.360001 -44.700001 +v 32.259998 -90.419998 -38.349998 +v 41.660000 -84.580002 -30.480000 +v 43.180000 -92.459999 -27.430000 +v 50.040001 -82.800003 -11.180000 +v 35.810001 -48.509998 2.540000 +v 43.939999 -68.580002 7.370000 +v 48.009998 -73.660004 1.520000 +v 50.040001 -94.489998 12.950000 +v -14.480000 -52.320000 -61.720001 +v -8.890000 -53.849998 -56.639999 +v -9.400000 -63.500000 -56.389999 +v -14.480000 -65.279999 -60.959999 +v -14.220000 -72.389999 -56.900002 +v -9.400000 -70.870003 -53.090000 +v -0.250000 -73.660004 -60.709999 +v -14.480000 -75.180000 -54.360001 +v -8.890000 -76.199997 -45.970001 +v 2.030000 -82.040001 -54.610001 +v -0.760000 -65.790001 -63.750000 +v -21.590000 -77.980003 -55.880001 +v -18.290001 -65.019997 -62.480000 +v -23.879999 -73.910004 -59.939999 +v -24.889999 -57.660000 -65.019997 +v -22.860001 -51.820000 -65.790001 +v -29.459999 -52.070000 -65.279999 +v -39.619999 -43.430000 -59.689999 +v -4.570000 -51.310001 -61.470001 +v -5.330000 -62.230000 -61.470001 +v -4.830000 -73.150002 -57.660000 +v -2.540000 -82.040001 -51.049999 +v -4.830000 -80.260002 -49.020000 +v -0.250000 -60.200001 -65.019997 +v -39.119999 -53.590000 -60.959999 +v -29.459999 -61.720001 -64.010002 +v -39.880001 -60.200001 -60.200001 +v -38.349998 -68.830002 -58.669998 +v -32.770000 -74.169998 -57.660000 +v -42.930000 -73.150002 -50.290001 +v -39.880001 -80.519997 -46.480000 +v -35.560001 -81.029999 -48.770000 +v -32.000000 -80.519997 -51.560001 +v -19.049999 -80.010002 -52.580002 +v -15.240000 -78.739998 -49.529999 +v -26.670000 -68.330002 -62.480000 +v 52.830002 -103.889999 -2.030000 +v 44.450001 -112.519997 -21.590000 +v 38.099998 -115.059998 -26.920000 +v 36.580002 -96.269997 -33.529999 +v 26.670000 -91.690002 -40.639999 +v 20.570000 -99.309998 -37.080002 +v 22.610001 -115.059998 -31.240000 +v 10.410000 -112.269997 -29.209999 +v 9.140000 -99.309998 -34.040001 +v 8.640000 -91.440002 -38.349998 +v 17.530001 -92.459999 -41.660000 +v 20.070000 -86.870003 -47.750000 +v 15.490000 -86.110001 -50.799999 +v 3.050000 -84.580002 -51.310001 +v 6.100000 -87.379997 -46.230000 +v 17.020000 -89.919998 -44.700001 +v 0.250000 -86.110001 -42.930000 +v 3.810000 -89.150002 -35.310001 +v 0.000000 -86.110001 -31.500000 +v 2.790000 -98.040001 -28.700001 +v -3.300000 -83.059998 -41.400002 +v -5.080000 -83.570000 -27.430000 +v -2.290000 -96.519997 -22.350000 +v 3.810000 -102.110001 -27.430000 +v 0.250000 -103.889999 -20.830000 +v -1.780000 -106.169998 -22.860001 +v -8.380000 -78.739998 -37.590000 +v -12.950000 -83.059998 -35.810001 +v -7.620000 -97.790001 -29.209999 +v -9.140000 -113.790001 -30.990000 +v -16.000000 -98.550003 -35.810001 +v -19.809999 -85.089996 -40.389999 +v -28.190001 -84.070000 -46.230000 +v -37.080002 -86.110001 -40.889999 +v -27.430000 -85.849998 -41.400002 +v -27.690001 -91.440002 -40.889999 +v -24.639999 -98.040001 -38.610001 +v -18.290001 -115.320000 -34.799999 +v -26.160000 -114.550003 -35.049999 +v -34.290001 -96.519997 -37.849998 +v -37.849998 -113.540001 -30.990000 +v -41.660000 -94.739998 -34.540001 +v -49.779999 -92.709999 -26.670000 +v -46.740002 -112.010002 -22.860001 +v -49.279999 -81.029999 -34.290001 +v -43.430000 -84.070000 -38.349998 +v -50.799999 -69.849998 -39.119999 +v -47.500000 -68.070000 -47.500000 +v -41.150002 -65.790001 -57.400002 +v -44.450001 -60.959999 -54.860001 +v -48.009998 -55.119999 -48.259998 +v -53.590000 -57.660000 -38.610001 +v -54.860001 -68.830002 -30.730000 +v -53.090000 -78.989998 -28.959999 +v -54.360001 -89.919998 -13.970000 +v -56.639999 -76.709999 -15.490000 +v -50.799999 -111.000000 -10.670000 +v -42.669998 -46.480000 -56.389999 +v -42.930000 -54.610001 -57.150002 +v -48.509998 -42.930000 -46.740002 +v -51.560001 -48.770000 -41.910000 +v -55.880001 -57.660000 -33.020000 +v -58.669998 -57.660000 -19.809999 +v -56.639999 -42.419998 -24.639999 +v -55.880001 -74.680000 -1.020000 +v -54.099998 -86.870003 0.510000 +v -50.549999 -107.440002 5.590000 +v -46.990002 -83.059998 11.940000 +v -34.540001 -70.360001 18.799999 +v -48.770000 -64.519997 8.130000 +v -33.270000 -79.760002 21.340000 +v -30.990000 -101.599998 25.650000 +v -43.180000 -104.650002 17.270000 +v -57.150002 -41.910000 -11.180000 +v -58.419998 -57.660000 -6.350000 +v -58.930000 -65.019997 -10.920000 +v -25.400000 -56.389999 14.220000 +v -18.540001 -78.739998 21.590000 +v -14.480000 -98.809998 25.650000 +v -18.540001 -53.090000 9.400000 +v -4.570000 -55.369999 11.180000 +v -6.860000 -58.669998 10.410000 +v -7.870000 -61.470001 7.370000 +v -8.640000 -70.870003 13.720000 +v -6.100000 -86.110001 17.270000 +v -4.060000 -96.769997 19.559999 +v -0.760000 -95.250000 14.730000 +v -0.250000 -82.800003 8.130000 +v -0.510000 -68.070000 1.020000 +v -1.780000 -60.959999 9.400000 +v 2.540000 -56.389999 10.670000 +v 5.080000 -59.689999 8.890000 +v 7.370000 -62.990002 6.600000 +v 6.860000 -72.389999 13.210000 +v 6.600000 -85.339996 18.799999 +v 6.860000 -97.279999 22.610001 +v 13.720000 -88.389999 24.129999 +v 14.220000 -98.300003 27.690001 +v 13.720000 -79.760002 20.830000 +v 12.950000 -67.559998 14.220000 +v 12.700000 -58.169998 6.600000 +v 9.910000 -54.860001 9.140000 +v 23.879999 -49.279999 5.080000 +v 34.799999 -80.519997 21.840000 +v 36.070000 -64.010002 11.680000 +v 34.799999 -89.410004 26.160000 +v 24.639999 -58.169998 10.670000 +v 23.370001 -73.410004 19.809999 +v 24.379999 -91.440002 27.940001 +# 711 vertices + +# 0 texture vertices + +# 0 normals + +g d +usemtl vskin +s 1 +f 3 2 1 +f 2 4 1 +f 5 1 4 +f 6 5 4 +f 7 5 6 +f 6 4 8 +f 9 8 4 +f 2 9 4 +f 10 9 2 +f 2 11 10 +f 3 11 2 +f 12 10 11 +f 12 11 13 +f 3 13 11 +f 3 15 14 +f 14 13 3 +f 14 16 13 +f 13 16 17 +f 19 16 18 +f 18 16 14 +f 20 18 14 +f 15 20 14 +f 12 17 21 +f 17 12 13 +f 23 18 22 +f 22 18 20 +f 22 25 24 +f 23 24 26 +f 24 23 22 +f 28 27 25 +f 25 27 24 +f 24 27 26 +f 29 18 23 +f 18 29 19 +f 30 19 29 +f 30 29 31 +f 31 29 23 +f 23 26 31 +f 19 30 32 +f 32 16 19 +f 28 25 33 +f 33 25 34 +f 33 35 28 +f 33 36 35 +f 35 36 37 +f 37 36 5 +f 5 36 38 +f 38 36 39 +f 38 39 3 +f 1 38 3 +f 1 5 38 +f 3 39 34 +f 15 3 34 +f 20 15 34 +f 22 20 34 +f 25 22 34 +f 36 33 34 +f 39 36 34 +f 40 10 12 +f 12 21 40 +f 30 41 32 +f 42 16 32 +f 32 43 42 +f 44 43 32 +f 32 41 44 +f 45 44 41 +f 41 46 45 +f 41 47 46 +f 47 41 48 +f 30 48 41 +f 31 48 30 +f 47 48 31 +f 47 50 49 +f 49 46 47 +f 50 47 51 +f 51 47 31 +f 51 31 52 +f 53 51 52 +f 51 53 50 +f 31 26 52 +f 26 54 52 +f 26 27 54 +f 54 27 55 +f 55 27 56 +f 56 27 57 +f 57 27 28 +f 57 28 35 +f 37 57 35 +f 7 57 37 +f 58 53 52 +f 59 58 52 +f 60 59 52 +f 54 60 52 +f 55 60 54 +f 61 60 55 +f 61 55 62 +f 62 55 63 +f 63 55 8 +f 55 6 8 +f 56 6 55 +f 57 7 56 +f 6 56 7 +f 8 9 64 +f 64 65 8 +f 63 8 65 +f 63 65 66 +f 66 62 63 +f 66 65 67 +f 65 64 67 +f 64 68 67 +f 68 64 9 +f 69 68 9 +f 9 10 69 +f 71 69 70 +f 70 69 10 +f 70 72 71 +f 71 72 73 +f 5 7 37 +f 10 40 70 +f 70 40 72 +f 72 40 74 +f 40 21 74 +f 74 21 75 +f 21 17 75 +f 73 72 74 +f 74 76 73 +f 74 75 76 +f 17 77 75 +f 42 77 17 +f 17 16 42 +f 79 78 69 +f 78 68 69 +f 68 78 80 +f 81 68 80 +f 81 82 68 +f 68 82 67 +f 82 83 67 +f 84 83 82 +f 82 81 84 +f 84 81 80 +f 83 66 67 +f 66 83 85 +f 86 66 85 +f 66 86 87 +f 62 66 87 +f 88 62 87 +f 62 88 61 +f 89 61 88 +f 61 89 90 +f 59 60 90 +f 60 61 90 +f 89 91 90 +f 91 59 90 +f 59 91 92 +f 58 59 92 +f 93 58 92 +f 94 93 92 +f 91 94 92 +f 94 95 93 +f 96 93 95 +f 97 93 96 +f 58 93 97 +f 97 98 58 +f 53 58 98 +f 53 98 50 +f 99 50 98 +f 100 99 97 +f 98 97 99 +f 97 96 100 +f 99 49 50 +f 101 49 99 +f 99 100 101 +f 46 49 101 +f 101 102 46 +f 102 103 46 +f 45 46 103 +f 104 45 103 +f 44 45 104 +f 104 105 44 +f 106 44 105 +f 44 106 43 +f 42 43 107 +f 43 106 108 +f 108 106 109 +f 43 108 110 +f 107 43 110 +f 107 77 42 +f 77 107 111 +f 107 112 111 +f 112 107 110 +f 113 77 111 +f 113 114 77 +f 75 77 114 +f 75 114 115 +f 115 116 75 +f 76 75 116 +f 116 115 117 +f 117 118 116 +f 116 73 76 +f 73 116 118 +f 73 118 71 +f 71 118 119 +f 118 117 120 +f 119 118 120 +f 121 119 120 +f 109 106 122 +f 122 106 105 +f 105 104 122 +f 104 123 122 +f 124 123 104 +f 103 124 104 +f 124 103 125 +f 103 102 125 +f 125 102 126 +f 126 102 101 +f 101 127 126 +f 128 127 101 +f 128 101 100 +f 100 129 128 +f 129 100 130 +f 130 100 96 +f 95 131 96 +f 96 131 130 +f 132 131 95 +f 79 69 71 +f 71 119 79 +f 133 119 121 +f 119 133 79 +f 78 79 133 +f 133 134 78 +f 78 134 80 +f 134 135 80 +f 136 84 80 +f 135 136 80 +f 136 137 84 +f 138 84 137 +f 84 138 83 +f 83 138 85 +f 139 88 87 +f 88 139 89 +f 140 91 89 +f 91 140 94 +f 94 142 141 +f 94 140 142 +f 95 94 141 +f 132 95 141 +f 135 134 143 +f 143 134 133 +f 133 144 143 +f 133 145 144 +f 121 145 133 +f 146 145 121 +f 121 120 147 +f 121 147 146 +f 147 120 148 +f 120 117 148 +f 148 117 149 +f 117 115 149 +f 115 151 150 +f 115 114 151 +f 151 114 152 +f 153 148 149 +f 150 153 149 +f 145 146 154 +f 144 145 154 +f 155 144 154 +f 144 155 143 +f 156 143 155 +f 157 155 154 +f 155 157 156 +f 158 143 156 +f 143 158 135 +f 135 158 159 +f 158 160 159 +f 158 156 160 +f 156 161 160 +f 156 157 161 +f 161 157 162 +f 163 162 157 +f 161 162 164 +f 163 165 162 +f 166 162 165 +f 162 166 164 +f 166 167 164 +f 167 168 164 +f 168 161 164 +f 168 160 161 +f 160 168 159 +f 136 135 159 +f 137 136 159 +f 169 138 137 +f 138 169 85 +f 169 170 85 +f 170 169 171 +f 171 169 159 +f 169 137 159 +f 172 171 159 +f 173 172 159 +f 168 173 159 +f 173 168 174 +f 168 167 174 +f 170 175 85 +f 175 86 85 +f 86 175 176 +f 177 86 176 +f 163 157 154 +f 146 163 154 +f 86 177 87 +f 177 178 87 +f 178 139 87 +f 89 139 179 +f 180 89 179 +f 180 181 89 +f 89 181 182 +f 140 89 182 +f 142 140 183 +f 183 140 182 +f 142 184 141 +f 184 185 141 +f 185 132 141 +f 132 185 186 +f 186 187 132 +f 187 131 132 +f 188 131 187 +f 186 185 189 +f 189 185 184 +f 190 183 182 +f 191 190 182 +f 181 192 182 +f 193 192 181 +f 181 180 193 +f 180 194 193 +f 194 180 179 +f 195 194 179 +f 139 195 179 +f 196 195 139 +f 139 178 196 +f 196 178 197 +f 197 178 177 +f 198 197 177 +f 199 198 177 +f 199 177 176 +f 200 199 176 +f 199 200 198 +f 198 200 201 +f 202 201 200 +f 202 200 203 +f 200 175 203 +f 175 170 203 +f 175 200 176 +f 170 204 203 +f 171 204 170 +f 205 204 171 +f 206 205 171 +f 171 172 206 +f 207 206 172 +f 172 173 207 +f 208 207 173 +f 208 173 174 +f 209 207 208 +f 208 210 209 +f 211 209 210 +f 210 202 211 +f 202 210 212 +f 201 202 212 +f 213 208 174 +f 167 214 174 +f 214 213 174 +f 215 167 166 +f 213 210 208 +f 213 216 210 +f 210 216 212 +f 216 217 212 +f 217 201 212 +f 201 217 218 +f 198 201 218 +f 197 198 218 +f 219 197 218 +f 197 219 220 +f 221 204 205 +f 205 206 221 +f 207 221 206 +f 209 221 207 +f 209 211 221 +f 221 211 202 +f 221 202 203 +f 204 221 203 +f 220 222 197 +f 196 197 222 +f 196 222 223 +f 195 196 223 +f 194 195 223 +f 224 194 223 +f 224 225 194 +f 193 194 225 +f 193 225 226 +f 192 193 226 +f 191 192 226 +f 227 191 226 +f 228 227 226 +f 229 228 226 +f 225 229 226 +f 192 191 182 +f 183 184 142 +f 183 190 230 +f 190 191 230 +f 191 227 230 +f 227 231 230 +f 231 232 230 +f 232 183 230 +f 183 232 233 +f 233 184 183 +f 189 184 233 +f 130 131 188 +f 188 234 130 +f 129 130 234 +f 234 128 129 +f 235 234 188 +f 236 235 188 +f 235 236 237 +f 237 238 235 +f 238 128 234 +f 235 238 234 +f 237 239 238 +f 128 238 239 +f 239 240 128 +f 240 127 128 +f 126 127 240 +f 241 220 219 +f 242 165 163 +f 166 242 215 +f 165 242 166 +f 163 243 242 +f 244 243 163 +f 247 246 245 +f 242 243 215 +f 163 248 244 +f 249 248 163 +f 163 146 249 +f 249 146 250 +f 147 250 146 +f 250 147 148 +f 148 153 250 +f 250 153 249 +f 251 249 153 +f 248 249 251 +f 251 252 248 +f 248 252 244 +f 244 252 247 +f 243 244 247 +f 247 215 243 +f 252 246 247 +f 251 246 252 +f 153 150 251 +f 251 150 246 +f 150 149 115 +f 150 151 246 +f 253 246 151 +f 245 246 253 +f 253 151 152 +f 114 113 152 +f 254 152 113 +f 254 113 111 +f 253 255 245 +f 152 255 253 +f 255 152 254 +f 255 254 256 +f 256 254 111 +f 257 256 111 +f 112 257 111 +f 257 112 110 +f 258 257 110 +f 108 258 110 +f 108 259 258 +f 259 108 109 +f 122 259 109 +f 259 122 260 +f 260 122 123 +f 123 261 260 +f 123 262 261 +f 262 123 124 +f 263 245 255 +f 264 263 255 +f 264 255 256 +f 256 265 264 +f 265 256 257 +f 257 258 265 +f 258 266 265 +f 267 258 259 +f 266 258 267 +f 268 267 259 +f 268 260 261 +f 259 260 268 +f 261 262 268 +f 262 269 268 +f 268 269 270 +f 270 271 268 +f 268 271 267 +f 271 272 267 +f 267 272 273 +f 273 266 267 +f 273 265 266 +f 265 273 274 +f 274 264 265 +f 275 264 274 +f 263 264 275 +f 275 276 263 +f 276 277 263 +f 245 263 277 +f 247 245 277 +f 167 215 278 +f 215 279 278 +f 215 280 279 +f 279 280 281 +f 280 282 281 +f 282 280 283 +f 280 277 283 +f 280 247 277 +f 247 280 215 +f 277 284 283 +f 284 285 283 +f 284 277 276 +f 276 285 284 +f 286 285 276 +f 275 286 276 +f 274 286 275 +f 274 287 286 +f 288 287 274 +f 273 288 274 +f 289 288 273 +f 273 272 289 +f 272 271 289 +f 271 290 289 +f 270 290 271 +f 291 290 270 +f 292 290 291 +f 291 293 292 +f 290 292 289 +f 294 289 292 +f 295 289 294 +f 288 289 295 +f 295 287 288 +f 296 287 295 +f 297 287 296 +f 286 287 297 +f 297 285 286 +f 285 297 298 +f 285 298 283 +f 298 299 283 +f 299 282 283 +f 292 293 300 +f 300 294 292 +f 301 294 300 +f 295 294 301 +f 302 295 301 +f 302 296 295 +f 296 302 297 +f 297 302 303 +f 298 297 303 +f 126 240 304 +f 240 305 304 +f 240 239 305 +f 305 239 306 +f 237 307 239 +f 308 307 237 +f 237 236 309 +f 309 308 237 +f 306 307 308 +f 307 306 239 +f 306 308 310 +f 305 306 310 +f 311 308 309 +f 310 308 311 +f 312 305 310 +f 305 312 304 +f 312 125 304 +f 125 126 304 +f 125 262 124 +f 313 262 125 +f 312 313 125 +f 313 312 314 +f 312 310 314 +f 310 311 314 +f 311 315 314 +f 315 270 314 +f 270 269 314 +f 269 262 314 +f 262 313 314 +f 291 270 316 +f 270 315 316 +f 315 311 316 +f 311 317 316 +f 317 318 316 +f 318 319 316 +f 319 291 316 +f 320 318 317 +f 317 311 320 +f 320 311 309 +f 309 321 320 +f 309 322 321 +f 321 322 323 +f 321 324 320 +f 324 318 320 +f 325 324 321 +f 321 323 325 +f 188 187 236 +f 236 187 326 +f 309 236 326 +f 187 186 326 +f 322 309 326 +f 186 322 326 +f 186 327 322 +f 189 327 186 +f 327 189 328 +f 233 328 189 +f 232 328 233 +f 328 232 329 +f 232 231 329 +f 330 231 227 +f 227 228 330 +f 330 228 229 +f 229 331 330 +f 229 225 331 +f 331 225 224 +f 333 332 223 +f 332 331 223 +f 331 224 223 +f 331 332 334 +f 334 330 331 +f 330 334 329 +f 231 330 329 +f 335 328 329 +f 336 335 329 +f 334 336 329 +f 336 334 337 +f 334 332 337 +f 332 338 337 +f 333 338 332 +f 333 222 220 +f 241 219 218 +f 217 241 218 +f 241 217 339 +f 339 217 340 +f 340 217 216 +f 328 322 327 +f 323 322 341 +f 341 322 328 +f 328 335 341 +f 341 335 342 +f 335 336 342 +f 336 343 342 +f 343 336 337 +f 338 343 337 +f 343 338 344 +f 338 345 344 +f 346 345 338 +f 338 333 346 +f 346 333 220 +f 220 241 346 +f 346 241 339 +f 347 346 339 +f 346 347 348 +f 347 349 348 +f 349 350 348 +f 345 346 348 +f 351 345 348 +f 350 351 348 +f 352 350 349 +f 351 353 345 +f 345 353 344 +f 353 354 344 +f 354 355 344 +f 355 343 344 +f 343 355 342 +f 355 356 342 +f 354 356 355 +f 356 341 342 +f 341 356 357 +f 341 357 323 +f 357 325 323 +f 222 333 223 +f 339 340 347 +f 216 358 340 +f 340 360 359 +f 340 358 360 +f 347 340 359 +f 349 347 359 +f 361 349 359 +f 361 352 349 +f 362 361 359 +f 363 361 362 +f 362 364 363 +f 279 363 364 +f 363 279 281 +f 279 364 365 +f 279 365 278 +f 365 214 278 +f 214 167 278 +f 358 216 213 +f 213 214 358 +f 214 365 358 +f 365 360 358 +f 360 362 359 +f 362 360 365 +f 365 364 362 +f 354 353 366 +f 367 354 366 +f 354 367 368 +f 368 356 354 +f 357 356 368 +f 368 369 357 +f 353 351 366 +f 351 350 370 +f 351 372 371 +f 351 371 366 +f 368 367 373 +f 369 368 373 +f 373 374 369 +f 375 369 374 +f 325 369 375 +f 357 369 325 +f 375 324 325 +f 375 318 324 +f 376 318 375 +f 374 376 375 +f 352 361 377 +f 350 352 370 +f 352 377 370 +f 372 351 370 +f 379 373 378 +f 373 380 378 +f 373 367 380 +f 380 367 366 +f 381 380 366 +f 382 381 366 +f 371 382 366 +f 382 371 383 +f 371 384 383 +f 384 371 372 +f 384 372 370 +f 385 384 370 +f 386 385 370 +f 377 386 370 +f 387 386 377 +f 377 361 387 +f 387 361 388 +f 361 363 388 +f 363 389 388 +f 389 363 281 +f 390 389 281 +f 390 391 389 +f 392 391 390 +f 390 393 392 +f 389 391 388 +f 391 394 388 +f 394 391 395 +f 395 391 392 +f 392 393 396 +f 392 396 397 +f 395 392 397 +f 398 395 397 +f 398 399 395 +f 395 399 400 +f 394 395 400 +f 387 394 400 +f 394 387 388 +f 386 387 400 +f 401 386 400 +f 402 401 400 +f 399 402 400 +f 399 398 402 +f 403 402 398 +f 402 403 404 +f 405 402 404 +f 405 401 402 +f 401 405 406 +f 386 401 406 +f 407 386 406 +f 385 386 407 +f 384 385 408 +f 408 409 384 +f 384 409 383 +f 409 410 383 +f 410 411 383 +f 410 412 411 +f 411 412 404 +f 412 405 404 +f 405 412 406 +f 412 407 406 +f 385 407 413 +f 408 385 413 +f 409 408 413 +f 410 409 413 +f 412 410 413 +f 407 412 413 +f 411 414 383 +f 414 381 382 +f 414 382 383 +f 415 381 414 +f 416 381 415 +f 380 381 416 +f 380 416 378 +f 416 417 378 +f 417 379 378 +f 418 379 417 +f 417 416 419 +f 416 420 419 +f 420 416 421 +f 416 422 421 +f 415 422 416 +f 415 414 423 +f 414 411 423 +f 411 424 423 +f 424 411 404 +f 425 424 404 +f 426 425 404 +f 403 426 404 +f 425 426 427 +f 428 425 427 +f 425 428 421 +f 428 420 421 +f 422 425 421 +f 425 422 423 +f 424 425 423 +f 422 415 423 +f 429 374 373 +f 373 379 429 +f 430 429 379 +f 379 418 430 +f 430 418 431 +f 431 432 430 +f 433 432 431 +f 431 434 433 +f 433 434 435 +f 433 435 436 +f 435 434 437 +f 437 434 438 +f 434 431 438 +f 431 439 438 +f 431 418 439 +f 439 418 417 +f 439 417 419 +f 440 439 419 +f 439 440 438 +f 440 441 438 +f 441 442 438 +f 442 437 438 +f 442 441 443 +f 441 444 443 +f 441 440 444 +f 420 440 419 +f 420 428 440 +f 444 440 428 +f 428 445 444 +f 446 444 445 +f 444 446 443 +f 445 428 427 +f 447 445 427 +f 445 447 448 +f 446 445 448 +f 447 449 448 +f 449 447 450 +f 447 426 450 +f 426 447 427 +f 426 403 450 +f 451 449 450 +f 452 451 450 +f 452 454 453 +f 454 452 455 +f 455 452 450 +f 398 455 450 +f 403 398 450 +f 456 398 397 +f 398 456 455 +f 457 455 456 +f 456 458 457 +f 458 456 397 +f 396 458 397 +f 458 396 393 +f 393 459 458 +f 459 393 460 +f 460 393 461 +f 393 390 462 +f 390 463 462 +f 459 464 458 +f 464 459 465 +f 458 464 466 +f 466 464 467 +f 468 467 464 +f 466 467 469 +f 467 470 469 +f 454 455 469 +f 455 457 469 +f 457 458 469 +f 458 466 469 +f 282 463 281 +f 463 390 281 +f 282 299 463 +f 463 299 471 +f 461 463 471 +f 463 461 462 +f 461 393 462 +f 461 472 460 +f 460 472 473 +f 473 459 460 +f 465 459 473 +f 473 474 465 +f 474 473 472 +f 476 474 475 +f 474 472 475 +f 472 477 475 +f 461 477 472 +f 477 461 478 +f 471 478 461 +f 478 471 299 +f 299 298 479 +f 478 299 479 +f 480 478 479 +f 481 480 479 +f 479 303 481 +f 298 303 479 +f 481 482 480 +f 480 482 483 +f 478 480 483 +f 483 477 478 +f 484 477 483 +f 477 484 475 +f 484 485 475 +f 484 486 485 +f 485 486 487 +f 486 488 487 +f 489 488 486 +f 486 483 489 +f 483 482 489 +f 483 486 484 +f 319 293 291 +f 319 490 293 +f 493 492 491 +f 490 491 492 +f 293 490 494 +f 293 494 300 +f 300 495 301 +f 301 495 302 +f 302 495 496 +f 496 497 302 +f 303 302 497 +f 497 481 303 +f 498 482 481 +f 489 482 498 +f 499 488 489 +f 500 488 499 +f 499 489 501 +f 501 489 502 +f 489 498 502 +f 498 503 502 +f 481 497 498 +f 498 497 503 +f 503 497 496 +f 496 504 503 +f 496 505 504 +f 495 505 496 +f 506 505 495 +f 506 495 300 +f 300 507 506 +f 300 494 507 +f 494 508 507 +f 490 508 494 +f 492 508 490 +f 508 492 509 +f 509 492 493 +f 493 510 509 +f 508 509 507 +f 510 512 511 +f 510 514 513 +f 513 512 510 +f 511 509 510 +f 515 509 511 +f 507 509 515 +f 515 516 507 +f 517 507 516 +f 506 507 517 +f 517 505 506 +f 518 505 517 +f 504 505 518 +f 518 519 504 +f 503 504 519 +f 503 519 502 +f 519 501 502 +f 501 519 518 +f 501 518 499 +f 518 520 499 +f 520 518 517 +f 520 516 515 +f 517 516 520 +f 515 521 520 +f 522 521 515 +f 511 522 515 +f 511 512 522 +f 523 522 512 +f 512 524 523 +f 513 524 512 +f 523 525 522 +f 523 526 525 +f 525 521 522 +f 527 521 525 +f 521 527 528 +f 520 521 528 +f 528 529 520 +f 530 520 529 +f 530 499 520 +f 499 530 531 +f 500 499 531 +f 376 319 318 +f 319 376 490 +f 491 490 376 +f 491 376 374 +f 374 429 491 +f 491 429 532 +f 532 533 491 +f 491 533 493 +f 510 493 533 +f 533 514 510 +f 534 514 533 +f 533 532 534 +f 532 430 534 +f 429 430 532 +f 535 534 430 +f 430 432 535 +f 432 536 535 +f 537 536 432 +f 432 433 537 +f 536 534 535 +f 514 534 513 +f 513 534 536 +f 524 513 536 +f 524 536 537 +f 529 538 530 +f 530 538 531 +f 539 500 531 +f 539 540 500 +f 500 540 488 +f 488 540 487 +f 524 541 523 +f 526 523 541 +f 526 541 542 +f 542 543 526 +f 525 544 527 +f 525 545 544 +f 526 545 525 +f 543 545 526 +f 545 543 546 +f 546 544 545 +f 546 543 547 +f 548 547 543 +f 543 549 548 +f 548 549 550 +f 550 549 551 +f 552 551 549 +f 552 549 553 +f 553 549 542 +f 542 549 543 +f 553 542 554 +f 554 542 541 +f 541 537 554 +f 537 541 524 +f 436 537 433 +f 554 537 436 +f 436 555 554 +f 555 556 554 +f 556 557 554 +f 554 557 553 +f 553 557 558 +f 559 558 557 +f 559 557 560 +f 560 557 556 +f 556 555 560 +f 561 560 555 +f 555 562 561 +f 555 435 562 +f 436 435 555 +f 564 435 563 +f 435 564 565 +f 565 562 435 +f 566 562 565 +f 565 564 566 +f 528 538 529 +f 538 567 531 +f 538 568 567 +f 567 568 569 +f 569 570 567 +f 571 570 569 +f 569 572 571 +f 546 547 573 +f 547 548 573 +f 575 574 572 +f 573 548 576 +f 576 548 550 +f 574 571 572 +f 544 546 577 +f 558 552 553 +f 574 578 571 +f 580 579 571 +f 571 578 580 +f 579 570 571 +f 567 570 579 +f 581 567 579 +f 582 567 581 +f 567 582 531 +f 582 539 531 +f 539 582 540 +f 582 583 540 +f 540 583 584 +f 584 487 540 +f 528 585 538 +f 538 585 568 +f 585 586 568 +f 568 586 569 +f 587 569 586 +f 572 569 587 +f 588 572 587 +f 575 572 589 +f 588 589 572 +f 587 576 588 +f 573 576 587 +f 587 577 573 +f 573 577 546 +f 586 577 587 +f 577 586 590 +f 590 544 577 +f 590 586 585 +f 590 585 527 +f 585 528 527 +f 527 544 590 +f 591 584 583 +f 583 592 591 +f 593 591 592 +f 592 594 593 +f 592 595 594 +f 596 594 595 +f 596 595 597 +f 597 595 598 +f 598 595 599 +f 595 580 599 +f 580 578 599 +f 600 578 574 +f 574 601 600 +f 575 601 574 +f 580 595 602 +f 579 580 602 +f 592 579 602 +f 579 592 581 +f 583 581 592 +f 581 583 582 +f 595 592 602 +f 603 561 562 +f 604 561 603 +f 605 561 604 +f 606 561 605 +f 560 561 606 +f 606 559 560 +f 606 607 559 +f 608 606 605 +f 605 609 608 +f 608 609 610 +f 610 611 608 +f 611 612 608 +f 608 612 613 +f 608 613 607 +f 607 606 608 +f 607 558 559 +f 558 607 613 +f 613 614 558 +f 558 614 552 +f 552 614 551 +f 615 551 614 +f 551 615 550 +f 550 615 576 +f 576 615 616 +f 617 616 615 +f 617 615 612 +f 612 615 618 +f 618 613 612 +f 618 614 613 +f 614 618 615 +f 616 588 576 +f 588 616 617 +f 617 619 588 +f 612 619 617 +f 622 621 620 +f 612 620 619 +f 619 623 588 +f 621 625 624 +f 621 624 623 +f 622 625 621 +f 620 611 622 +f 620 612 611 +f 626 611 610 +f 626 622 611 +f 626 627 622 +f 610 627 626 +f 622 627 625 +f 627 628 625 +f 624 629 623 +f 629 575 623 +f 588 623 589 +f 630 575 629 +f 629 624 630 +f 625 630 624 +f 631 630 625 +f 631 625 628 +f 628 632 631 +f 631 632 633 +f 633 630 631 +f 634 630 633 +f 630 634 601 +f 630 601 575 +f 634 600 601 +f 578 600 599 +f 600 635 599 +f 635 636 599 +f 636 598 599 +f 636 597 598 +f 635 600 634 +f 634 637 635 +f 636 635 637 +f 636 637 638 +f 637 634 638 +f 633 638 634 +f 639 638 633 +f 640 639 633 +f 632 640 633 +f 639 640 641 +f 641 642 639 +f 642 641 643 +f 643 644 642 +f 644 643 645 +f 645 643 646 +f 645 647 644 +f 644 648 636 +f 636 642 644 +f 638 642 636 +f 639 642 638 +f 648 597 636 +f 647 648 644 +f 596 648 647 +f 648 596 597 +f 647 649 596 +f 596 649 650 +f 651 596 650 +f 651 594 596 +f 593 594 651 +f 651 652 593 +f 650 652 651 +f 652 650 653 +f 650 649 653 +f 649 654 653 +f 649 655 654 +f 655 649 647 +f 655 647 656 +f 656 647 645 +f 658 645 657 +f 645 646 657 +f 646 659 657 +f 620 621 623 +f 620 623 619 +f 660 487 584 +f 660 584 591 +f 661 660 591 +f 591 593 661 +f 661 593 652 +f 661 652 653 +f 662 660 653 +f 660 661 653 +f 662 485 660 +f 485 487 660 +f 662 663 476 +f 664 476 663 +f 654 664 663 +f 654 663 653 +f 663 662 653 +f 476 664 665 +f 666 476 665 +f 476 666 474 +f 485 662 475 +f 662 476 475 +f 655 664 654 +f 664 655 665 +f 655 658 665 +f 656 658 655 +f 647 656 655 +f 645 658 656 +f 623 575 589 +f 667 658 657 +f 668 667 657 +f 669 668 657 +f 659 669 657 +f 668 669 670 +f 670 667 668 +f 672 670 671 +f 670 673 671 +f 670 674 673 +f 675 674 670 +f 670 669 675 +f 676 666 665 +f 677 676 665 +f 676 677 468 +f 468 464 676 +f 667 468 677 +f 677 678 667 +f 678 677 665 +f 658 678 665 +f 658 667 678 +f 670 672 667 +f 468 667 672 +f 468 672 467 +f 672 470 467 +f 470 672 671 +f 470 679 469 +f 679 470 671 +f 680 679 671 +f 673 680 671 +f 680 673 674 +f 674 681 680 +f 474 666 465 +f 465 666 676 +f 464 465 676 +f 679 454 469 +f 679 682 454 +f 454 682 453 +f 451 452 453 +f 683 451 453 +f 684 683 453 +f 685 684 453 +f 453 682 685 +f 685 682 686 +f 682 679 686 +f 679 680 686 +f 680 687 686 +f 680 681 687 +f 687 681 688 +f 688 689 687 +f 690 687 689 +f 687 690 686 +f 690 691 686 +f 691 685 686 +f 685 691 692 +f 684 685 692 +f 683 684 692 +f 449 451 683 +f 683 693 449 +f 693 683 692 +f 694 693 692 +f 691 694 692 +f 691 695 694 +f 695 691 696 +f 691 690 696 +f 690 697 696 +f 697 690 689 +f 689 698 697 +f 698 700 699 +f 697 698 699 +f 701 697 699 +f 697 701 696 +f 701 702 696 +f 702 695 696 +f 702 703 695 +f 703 694 695 +f 704 694 703 +f 693 694 704 +f 693 704 448 +f 449 693 448 +f 704 446 448 +f 446 704 705 +f 446 705 443 +f 705 442 443 +f 563 442 705 +f 437 442 563 +f 563 435 437 +f 564 707 706 +f 566 564 706 +f 708 566 706 +f 563 707 564 +f 707 563 709 +f 563 705 709 +f 705 703 709 +f 703 705 704 +f 703 702 709 +f 702 710 709 +f 701 710 702 +f 701 711 710 +f 711 701 699 +f 700 711 699 +f 711 708 706 +f 710 711 706 +f 707 710 706 +f 710 707 709 +f 603 562 566 +f 610 689 627 +f 698 689 610 +f 698 610 609 +f 609 700 698 +f 711 700 609 +f 711 609 605 +f 605 708 711 +f 708 605 604 +f 604 566 708 +f 566 604 603 +f 627 689 688 +f 688 628 627 +f 628 688 681 +f 681 632 628 +f 632 681 674 +f 674 640 632 +f 641 640 674 +f 674 643 641 +f 643 674 675 +f 675 646 643 +f 669 646 675 +f 659 646 669 +# 1419 elements diff --git a/Gem/gem_filmAVF.so b/Gem/gem_filmAVF.so index b9ae51a..2e466ff 100755 Binary files a/Gem/gem_filmAVF.so and b/Gem/gem_filmAVF.so differ diff --git a/Gem/gem_imageIO.so b/Gem/gem_imageIO.so index b667cc1..724f935 100755 Binary files a/Gem/gem_imageIO.so and b/Gem/gem_imageIO.so differ diff --git a/Gem/gem_imageJPEG.so b/Gem/gem_imageJPEG.so index 63bcc6e..06a262a 100755 Binary files a/Gem/gem_imageJPEG.so and b/Gem/gem_imageJPEG.so differ diff --git a/Gem/gem_imageSGI.so b/Gem/gem_imageSGI.so index 4f5b766..e7aecea 100755 Binary files a/Gem/gem_imageSGI.so and b/Gem/gem_imageSGI.so differ diff --git a/Gem/gem_imageSTB.so b/Gem/gem_imageSTB.so index 2c075f1..05e8b7e 100755 Binary files a/Gem/gem_imageSTB.so and b/Gem/gem_imageSTB.so differ diff --git a/Gem/gem_imageTIFF.so b/Gem/gem_imageTIFF.so index f6e2bd1..3481ec1 100755 Binary files a/Gem/gem_imageTIFF.so and b/Gem/gem_imageTIFF.so differ diff --git a/Gem/gem_modelOBJ.so b/Gem/gem_modelOBJ.so index 3fa8a63..3b4558e 100755 Binary files a/Gem/gem_modelOBJ.so and b/Gem/gem_modelOBJ.so differ diff --git a/Gem/gem_videoAVF.so b/Gem/gem_videoAVF.so index 829d0cc..04b278a 100755 Binary files a/Gem/gem_videoAVF.so and b/Gem/gem_videoAVF.so differ diff --git a/Gem/gemcocoawindow.pd_darwin b/Gem/gemcocoawindow.pd_darwin index a09d267..d9a90bc 100755 Binary files a/Gem/gemcocoawindow.pd_darwin and b/Gem/gemcocoawindow.pd_darwin differ diff --git a/Gem/gemglutwindow.pd_darwin b/Gem/gemglutwindow.pd_darwin index 2cc110c..148947b 100755 Binary files a/Gem/gemglutwindow.pd_darwin and b/Gem/gemglutwindow.pd_darwin differ diff --git a/Gem/gemmacoswindow.pd_darwin b/Gem/gemmacoswindow.pd_darwin index 852d070..d3ebce5 100755 Binary files a/Gem/gemmacoswindow.pd_darwin and b/Gem/gemmacoswindow.pd_darwin differ diff --git a/Gem/manual/Advanced.html b/Gem/manual/Advanced.html index 5c2a5f2..e23b090 100644 --- a/Gem/manual/Advanced.html +++ b/Gem/manual/Advanced.html @@ -1,27 +1,27 @@ - - - - - - - Advanced - - - -
-

-Advanced objects

- -


Todo: -

more than 8 lights -
pix_imageInPlace -
accumrotate -
camera -
polygon and curve -
text3d -
pix_data -
linear_path -
spline_path -

[return] - - + + + + + + + Advanced + + + +

+

+Advanced objects

+ +


Todo: +

more than 8 lights +
pix_imageInPlace +
accumrotate +
camera +
polygon and curve +
text3d +
pix_data +
linear_path +
spline_path +

[return] + + diff --git a/Gem/manual/BasicObj.html b/Gem/manual/BasicObj.html index 80e5d84..b65dc68 100644 --- a/Gem/manual/BasicObj.html +++ b/Gem/manual/BasicObj.html @@ -1,115 +1,115 @@ - - - - - - - Basic Objects - - - -

-

-Basic Objects

- -


There are a number of objects which are the foundation for GEM. -These objects are used in every patch and control the graphics and rendering. -

[gemwin] - The window manager -
[gemhead] - The start of a rendering chain -
manips - Move an object in the window -
geos - Render a shape -

-

-[gemwin]

-The graphics window is created and destroyed with the [gemwin] object. -With the [gemwin] object, you can set the default size of the graphics -window, create and destroy the graphics window, turn on and off rendering, -etc. All basic GEM patches will have the following [gemwin] -object with these messages: -
-

-The create and destroy messages will display and remove the graphics window. -The 1 and 0 messages start and stop rendering. -

-

-[gemhead]

-The [gemhead] object is the start of every rendering chain. -A simple patch, which is located in examples/gem_basic/gem1.redSquare.pd -looks like: -
-

- -

This patch will render a red square. The [gemhead] object -signifies the start of rendering. The [color] object sets the color -for all objects after it in the chain. The [square] object renders -a square into the graphics window based on the current color, texturing, -and transformations. In this case, there is no texturing and no transformation. -

Every rendering chain MUST start with a [gemhead]. If you -do not put a [gemhead] at the beginning of the chain, then nothing -will be rendered for that part of the patch. -

-

-manips

-In the patch 01.basic/02.cube.pd, the [translateXYZ] object is -introduced. -
-

- -

The graphics are transformed and moved by the manipulator objects, -or the manips. GEM has the following manips: -

[color] - set the color with a vector -
[colorRGB] - set the color with 3 discrete values -
[rotate] - rotate with an angle and vector -
[rotateXYZ] - rotate with 3 discrete values -
[scale] - scale with a vector -
[scaleXYZ] - scale with 3 discrete values -
[translate] - translate with a vector -
[translateXYZ] - translate with 3 discrete values -

To understand the difference between the vector and discrete values -version, realize that everything in is defined in 3 dimensions. These -dimensions can be XYZ values, or RGB colors. -

-

- -

The two translate objects above will do exactly the same thing in a -patch, but they provide two different ways to do it. [translate] accepts -a scalar and vector. [translateXYZ] accepts three floats which -specify a point in space. The manips will transform any object which -appears after it in the rendering chain. -

-

-geos

-Up above, we saw the [square] and [cube] objects. The other -primary geos are: -

[square] - render a square -
[circle] - render a circle -
[triangle] - render a triangle -
[cube] - render a cube -
[sphere] - render a sphere -
[cone] - render a cone -

The [square], [circle], [cube], and [triangle] objects -have a right-hand inlet to set the size of the shape. The default -size is 1. -

The [cone] and [sphere] objects are not perfectly smooth. -They are actually composed of a number of polygons. In order to control -the rendering better, the middle inlet is the size of the object, while -the right-hand inlet is the number of slices to define the shape. -Take a look at the patch gem_basic/gem3.sphere.pd to see how the number -of slices can change the look of a sphere. Don't worry about the -[world_light] -object, it is just there to make it easier to see the difference in the -number of slices. Make sure to click the 'lighting 0' message before -closing the patch (if you don't, then other patches will probably be completely -black until you quit and restart pd/GEM). -

Your graphics window should look like this for 5 and 15 slices: -

-

-Obviously, the more slices that you use, the better the sphere looks. -However, each slice adds more polygons, which can slow down your frame -rate. In computer graphics, there is always a trade off between resolution -and speed. -

-

[return] -
- - + + + + + + + Basic Objects + + + +

+

+Basic Objects

+ +


There are a number of objects which are the foundation for GEM. +These objects are used in every patch and control the graphics and rendering. +

[gemwin] - The window manager +
[gemhead] - The start of a rendering chain +
manips - Move an object in the window +
geos - Render a shape +

+

+[gemwin]

+The graphics window is created and destroyed with the [gemwin] object. +With the [gemwin] object, you can set the default size of the graphics +window, create and destroy the graphics window, turn on and off rendering, +etc. All basic GEM patches will have the following [gemwin] +object with these messages: +
+

+The create and destroy messages will display and remove the graphics window. +The 1 and 0 messages start and stop rendering. +

+

+[gemhead]

+The [gemhead] object is the start of every rendering chain. +A simple patch, which is located in examples/gem_basic/gem1.redSquare.pd +looks like: +
+

+ +

This patch will render a red square. The [gemhead] object +signifies the start of rendering. The [color] object sets the color +for all objects after it in the chain. The [square] object renders +a square into the graphics window based on the current color, texturing, +and transformations. In this case, there is no texturing and no transformation. +

Every rendering chain MUST start with a [gemhead]. If you +do not put a [gemhead] at the beginning of the chain, then nothing +will be rendered for that part of the patch. +

+

+manips

+In the patch 01.basic/02.cube.pd, the [translateXYZ] object is +introduced. +
+

+ +

The graphics are transformed and moved by the manipulator objects, +or the manips. GEM has the following manips: +

[color] - set the color with a vector +
[colorRGB] - set the color with 3 discrete values +
[rotate] - rotate with an angle and vector +
[rotateXYZ] - rotate with 3 discrete values +
[scale] - scale with a vector +
[scaleXYZ] - scale with 3 discrete values +
[translate] - translate with a vector +
[translateXYZ] - translate with 3 discrete values +

To understand the difference between the vector and discrete values +version, realize that everything in is defined in 3 dimensions. These +dimensions can be XYZ values, or RGB colors. +

+

+ +

The two translate objects above will do exactly the same thing in a +patch, but they provide two different ways to do it. [translate] accepts +a scalar and vector. [translateXYZ] accepts three floats which +specify a point in space. The manips will transform any object which +appears after it in the rendering chain. +

+

+geos

+Up above, we saw the [square] and [cube] objects. The other +primary geos are: +

[square] - render a square +
[circle] - render a circle +
[triangle] - render a triangle +
[cube] - render a cube +
[sphere] - render a sphere +
[cone] - render a cone +

The [square], [circle], [cube], and [triangle] objects +have a right-hand inlet to set the size of the shape. The default +size is 1. +

The [cone] and [sphere] objects are not perfectly smooth. +They are actually composed of a number of polygons. In order to control +the rendering better, the middle inlet is the size of the object, while +the right-hand inlet is the number of slices to define the shape. +Take a look at the patch gem_basic/gem3.sphere.pd to see how the number +of slices can change the look of a sphere. Don't worry about the +[world_light] +object, it is just there to make it easier to see the difference in the +number of slices. Make sure to click the 'lighting 0' message before +closing the patch (if you don't, then other patches will probably be completely +black until you quit and restart pd/GEM). +

Your graphics window should look like this for 5 and 15 slices: +

+

+Obviously, the more slices that you use, the better the sphere looks. +However, each slice adds more polygons, which can slow down your frame +rate. In computer graphics, there is always a trade off between resolution +and speed. +

+

[return] +
+ + diff --git a/Gem/manual/GemFaq.html b/Gem/manual/GemFaq.html index fe2e175..1fe41cd 100644 --- a/Gem/manual/GemFaq.html +++ b/Gem/manual/GemFaq.html @@ -1,667 +1,667 @@ - - - - - - - Gem FAQ - - - -

-

-GEM FAQ

- -


* : new question -
+ : changed question -

-

-QUESTIONS

-GENERAL -
1.1) What is GEM? -
1.2) What is Pd? -
1.3) What platforms do GEM and Pd run on? -
1.4.0) How do I install GEM and Pd on IRIX? -
1.4.1) How do I install GEM and Pd on linux? -
1.4.2) How do I install GEM and Pd on WinNT? -
1.7) What is a good intro to OpenGL? -
1.8) Are there any web sites for Pd or GEM? -
1.9) What libraries does GEM use? (aka: Who does Mark -want to thank?) -
1.10) Are there any restrictions on GEM? -
1.11) How do I use GEM in a performance? -

USING GEM -
2.1) How do I (???) -
2.2) How do I make GEM run? -
2.3) Why doesn't GEM run? -
2.4) I've got it running. Now what? -
2.5) On IRIX 5.3, why does GEM dump with an rld error? -
2.6) Why can't I compile GEM on IRIX 5.3? -
2.7) Why is GEM slow in general? -
2.8) Why is GEM slow on IRIX? -
2.9) Why is GEM slow on WinNT/Win95? -
2.10) Why is GEM slow on Linux? -
2.11) If I resize the window, everything looks strange. -
2.12) Can GEM run on a 3Dfx Voodoo card? -
2.13) Will GEM support hardware transform and lighting -(T&L) ? -
2.14) I get an error "GEM needs Truecolor visual support". -

VIEWING OBJECTS -
3.1) Why does everything seem dim? -
3.2) Why does everything seem dark? -

TEXTURE MAPPING -
4.1) My image doesn't appear. What is going on? -
4.2) My image looks strange. What is going on? -
4.3) Why does GEM say that it can't handle a gray image? -
4.4) What image formats can GEM handle? -
4.5) What movie formats can GEM handle? -
4.6) Why is pix_draw so slow? -

WORKING WITH PD -
5.1) Why do I get clicks in the audio? -
5.2) How do I get audio data to GEM? -
5.3) Why can't GEM find an image/model file? -
5.4) How can I optimize my patches? -

WRITING NEW GEM OBJECTS -
6.1) How do I write a new GEM object? -
6.2) What are the default OpenGL states? -

OBJECT SPECIFIC -
7.1) Why doesn't <object> exist on <platform>? -
7.2) Why doesn't gemtablet work? -
7.3) I don't want GEM to take over my tablet. -How do I stop it? -
7.4) Why doesn't gemmouse work in IRIX/Linux? -
7.5) Why doesn't gemorb work? -
7.6) What is wrong with pix_video in WinNT? -

-

-ANSWERS

-

GENERAL

-
1.1) What is GEM? -

GEM is the Graphics Environment for Multimedia. -It was originally written by Mark Danks to generate real-time computer -graphics, especially for audio-visual compositions. It originally ran under -FTS/Max (which is why you might see some papers reference it), but all -new development is under Pd. -

You can get GEM at http://gem.iem.at/ -

GEM was sponsored by a grant from Intel (http://www.intel.com) -

GEM was ported to linux by Günter Geiger -

GEM is now maintained by IOhannes m zmölnig. -

the core-development team consists of

    -
  • chris clepper
  • -
  • günter geiger
  • -
  • daniel heckenberg
  • -
  • james tittle
  • -
  • IOhannes m zmölnig
-lots of contributions are made by various people (thanks to all of them) -

---- -
1.2) What is Pd? -

Pd is a real-time environment for audio and MIDI. -It was written by Miller Puckette, who created FTS/Max when -he was at IRCAM. Basically, Pd can be seen as the next generation -of real-time visual programming languages. GEM runs inside of the -Pd environment. -

You can get Pd at http://www.crca.ucsd.edu/~msp/software.html -

Pd is sponsored by a grant from Intel (http://www.intel.com) -

---- -
1.3) What platforms do GEM and Pd run on? -

GEM and Pd run on Windows (95, 98, ME, NT 4.0, 2000, XP), linux and macOS-X (>10.2). -SGI-Irix (> 6.2) used to be supported but i don't have any prove that it still works). -Günter Geiger -has done an initial port of GEM and Pd to Linux http://gige.epy.co.at). -

GEM is now maintained by me and -developed by a team of several independent programmers (see section 1.1) -

---- -
1.4) How do I install GEM ? -

---- -
1.4.0) How do I install GEM and Pd on IRIX? -

See the readme for installing Pd. -

GEM should be at -

pd/gem -

If you run GEM.INSTALL.sh, then all of the example files and documention -should be put in the correct locations. -

---- -
1.4.1) How do I install GEM and Pd on linux? -

See the readme for installing Pd. -

GEM should be at -

chdir to <gem>/src/Gnu and build Gem following the instructions in the README.build -(./configure; make) -

If you then make install, then all of the example files and documention -should be put in the correct locations. -

if you are using debian, Gem should be available via apt

-

if you are using an rpm-based distribution, check out the builds at planetCCRMA

-

---- -
1.4.2) How do I install GEM and Pd on WinNT? -

See the readme for installing Pd. -

unzip GEM so that it is at -

pd\gem -

If you run GEM.INSTALL.bat, then all of the example files and documentation -should be put in the correct locations. -

there is also an installer for windows. -

---- -
1.4.3) How do I install GEM and Pd on macOS? -

See the readme for installing Pd. -

there is also an installer for macOS. -

---- -
1.7) What is a good intro to OpenGL? -

The best book is the OpenGL Programming Manual -by Mason and Woo. This is also called the "Red Book". If you search -the web, there are many sites on OpenGL. A good starting point is -http://www.opengl.org. -Also, Mark Kilgard (who used to work for SGI) has a wonderful site with -lots of links (http://reality.sgi.com/mjk) -Also, Normal Lin has written another great book on 3D-graphics under linux -

---- -
1.8) Are there any web sites for Pd or GEM? -

Except for the ones noted above, there is the Japanese -installation page at -
http://www.rinc.or.jp/~kotobuki/gem/index.htm -

There is a Pd mailing list. Subscription info -is on IEM's site http://www.iem.at/mailinglists/pd-list -

One of pd's unofficial home-pages is at http://pd.iem.at hosted by the -Institute of Electronic Music and Acoustics, Graz, Austria -

Also hosted by the iem is the site of the pd-community -http://www.puredata.info -

An interesting place might also be Günter Geiger's size http://gige.epy.co.at/ -

there are lot's of other cool pages (search the net...) -

---- -
1.9) What libraries does GEM use? -(aka: Who does Mark want to thank?) -

All copyrights and license info can be found in -
GEM.LICENSE.TERMS -
Thanks to Sam Leffner for libTiff, the TIFF image -loader. -
-sam@engr.sgi.com -
ftp://ftp.sgi.com/graphics/tiff/ -
Thanks to Masayuki Matsumoto for fstimage for OpenGL, -the SGI -
image loader. -
-matumot@dst.nk-exa.co.jp -
Thanks to the Independent JPEG Group for libjpeg, -the JPEG image loader. -
-jpeg-info@uunet.uu.net -
ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/ -
Thanks to Mark Kilgard at al. (and SGI) for glut, the openGL Utility Toolkit -
http://www.pobox.com/~ndr -
Thanks to Stephane Rehel for GLTT, the OpenGL TrueType -render. -
-rehel@worldnet.fr -
http://home.worldnet.fr/~rehel/gltt/gltt.html -
Thanks to David Turner, Robert Wilhelm, and Werner -Lemberg for -
Freetype, a TrueType font -rendering engine. -
-turner@enst.fr -
-robert@physiol.med.tu-muenchen.de -
-a7971428@unet.univie.ac.at -
http://www.physiol.med.tu-muenchen.de/~robert/freetype.html -
Thanks to the MPEG Software Simulation Group, for -libmpeg, the -
MPEG-2 Encoder/Decoder -
-mssg@mpeg.org -
http://www.mpeg.org/MSSG/ -
Thanks to Heroine for quicktime4linux -a quickime Decoder -and libmpeg3, another MPEG-2 Encoder/Decoder -
MPEG-2 Encoder/Decoder -
-mssg@mpeg.org -
http://heroinewarrior.com/ -
Thanks to LCS/Telegraphics for Wintab, the Windows -tablet library. -
-wintab@pointing.com -
Thanks to David McAllister for the Particle System -library. -
-davemc@cs.unc.edu -
http://www.cs.unc.edu/~davemc/Particle/ -
Thanks to John Stone for the Space Orb library, -libOrb -
-j.stone@acm.org -
http://www.umr.edu/~johns/projects/liborb/ -

---- -
1.10) Are there any restrictions on GEM? -

GEM is under the Gnu Public License. This basically -means that it will always be free software.Check out http://www.gnu.org -for more information and read the full license in GnuGPL.LICENSE in the GEM release. -

---- -
1.11) How do I use GEM in a performance? -

This is a constant problem, because there is no consistent -way to display video on any platform. Also, you usually do not want -to send the entire screen, but only the GEM window. It is also useful -to be able to edit/control the Pd patch window while the patch is actually -running. -

On SGIs, the best way is to get a video out option. -On the SGI O2, Impact, and Onyx (Mark has used all of these), there is a -simple connector or breakout box to do video. -If you run the video out program, then you will get a rectangle on your screen -which shows what is being sent out the video connector. -Make your GEM window a little larger than 640x480 and center it in the rectangle. -You can now project this with a standard video projector. -

On PCs it is a bit harder. -Several modern video-cards have the possibility to output several screens -(either 2 (or more) VGA-screens or 1 VGA-screen and 1 TV (Composite or S-HVS) -or a combination with DFTs) -If you have a Canopus Voodoo2 card it has a video and s-video output on it. As described -in question 2.12, you can get a Voodoo to work with -GEM. If any one else has a better solution, please let me know. -The nVidia Riva TNTs require that you output the full screen, so this is -not a very good option. You can use a video scan convertor. -Some of them only display a part of the scene, which is exactly what you -want. -

With modern multi-headed cards it is more simple: -Configure your card to display the desktop spread over your multiple screens -(e.g.: from left-to-right). -On windows and macOS you can do this via the display-properties dialog. -On linux you will have to edit your /etc/X11/XF86Config-4 file either by hand or -(if your system supports it) via an appropriate editor (yes, nowadays there are some). -Now create your gem-window on the second screen: -it should have the same dimensions as the 2nd screen (e.g: "[dimen 800 600("). -to place it at the second screen use the offset (e.g: if your primary sreen -(the one you want for patch-editing) has the dimension 1024x768 use "[offset 1024 0(", -which will create the gem-window 1024 pixels right of the upper-left corner -of the total screen (and 0 pixels below it), -which is exactly the upper-left corner of the 2nd screen. -You most probably want to turn off the borders with "[border 0(".
-Note: some grafix-card have openGL-hardware-acceleration only on the 1st screen -(so you should create the gem-window on the 1st screen and move -your patches to the 2nd screen) -

If you are using an XServer for displaying (under linux) you can also use another -computer for rendering. -You can specify the place where the gem-window should be created with something like -"create <render.host>:0.0" - -

If you are doing audio with graphics, the only solution -to prevent clicking (question 5.1) is to run 2 computers -and have them communicate with netsend/netreceive. We are working -on making Pd/GEM multi-processor friendly, so if you have a multi-processor -system, you can run everything on one machine eventually. -

-


USING GEM

-
2.1)How do I (???) -

Many of the general usage questions are probably -answered in the manual or release notes. The pd mailing list is also -a good place to find answers as well. -

2.2) How do I make GEM run? -

GEM is not an executable. It requires Pd to -work and is loaded in at run time. For example, I have an alias on -the SGI which does -

/usr/people/mdanks/pd/bin/pd -lib /usr/people/mdanks/pd/gem/Gem -

and on WinNT -

\pdDir\pd\bin\pd -lib /pdDir/pd/gem/Gem -

on UNIX-systems you will probably want to use a .pdrc file, - where you can put the command-line arguments for pd that you "always" need. -

If you don't see a startup message from GEM, then something went wrong. -

Most people use use the command shell to start Pd. -It is not very difficult to configure Pd to run from double-clicking on the icon. -

---- -
2.3) Why doesn't GEM run? -

Notice that the -lib flag always requires Unix -styles slashes. This is the case even on Windows. -

You may also want to use the -nosound flag. -For instance, my PC has problems using audio (it leaks memory), so I just -turn off the audio part of Pd. However, other people can't get GEM -to work if the -nosound is used (on Win95). You can also try the --dac or -adc flags (for digital-analog-conversion only and analog-digital-conversion -only). -

---- -
2.4) I've got it running. Now what? -

Try out the manual. It will step you through -the basics. -
You will also want to look at the example files. -Assuming that everything is installed correctly, you can get to the examples -by going to the Help menu in Pd and selecting examples. A bunch of -the patches should start with gem<something>. The best one is -gem/01.basic/01.redSquare.pd -It puts a red square up on the screen and allows you to rotate it. gemImage.pd -shows how to load in a TIFF file. gem/03.lighting/04.moveSpheres.pd -moves two spheres around the screen. Try the other ones. -
Most of the GEM objects have test patches which -give some information about the various controls for the object. -

---- -
2.5) On IRIX 5.3, why does GEM dump with an rld error? -

GEM only works under IRIX 6.2+. The rld error -is probably something about not having glBindTextureEXT (or something). -OpenGL 1.0 has some extensions to speed up texture mapping (which are an -integral part of OpenGL 1.1). However, these don't exist on IRIX -5.3. If you recompile GEM (see the next question), things should -work fine. -
I don't have access to an IRIX machine, so don't -expect any builds from me. Upgrading to IRIX 6.2+ is worth it. -

---- -
2.6) Why can't I compile GEM on IRIX 5.3? -

There was probably an error saying that the compiler -couldn't find the file "dmedia/vl_vino.h" in pix_videoSGI.cpp. IRIX -6.2+ adds new functionality to the media libraries which makes life much -easier. You cannot compile pix_video or pix_indycam as is under 5.3. -You can remove them from the Pix/Makefile and from the linker part of the -global Makefile. You will also need to recompile the Td and Tiff -libraries. -

There shouldn't be any problems doing this. I haven't tried any -of this, so if it works for someone, please let me know. -

---- -
2.7) Why is GEM slow in general? -

Examine what you are doing. If you are constantly -changing textures, then this is probably your problem. If you have -models with a million triangles, then this is probably the problem. -Compare what you are doing with realistic specs on your system. Some -systems slow down when they have to draw very large polygons (slow fill -rate). -
You can also turn on profiling to see how long it -takes to render a frame. Send a profile message to the gemwin object. -The number that is printed is the number of milliseconds one frame takes -to render. 50 milliseconds is 20 frames per second. 'profile 2' is -good if you want to see how long the image processing is taking. -
profile 0 - turn off profiling -
profile 1 - turn on profiling -
profile 2 - turn on profiling -and don't cache pixes -

---- -
2.8) Why is GEM slow on IRIX? -

If you are having major slowdowns, then please let -me know. I have gotten very good performance on most machines (Indy, -O2, Impact, Onyx2). -

---- -
2.9) Why is GEM slow on WinNT/Win95? -

You probably don't have hardware acceleration. -You can use software rendering, but it basically useless except for extremely -basic patches. You can get a good graphics accelerator for really -cheap these days. I recommend a card based on nVidia's chipsets, -such as the TNT2 or GeForce, but there are other companies such as 3dfx -and Matrox. Make sure that you are running the latest drivers for -your card. The basic drivers that come with the cards are usually -very bad. -
Also, PCs don't deal with lots of texture maps very -well (they are bus limited, at least until AGP), so if you are trying to -use lots of constantly changing texture maps -(especially with [pix_multiimage], [pix_video] or [pix_film]), that will cause problems. -

---- -
2.10) Why is GEM slow on Linux? -

It is because you have to use Mesa, which might be -running iin software. Mesa (http://www.mesa.org) -is an awesome package by Brian Paul (brianp@avid.com) which "emulates" -OpenGL. Basically, it is a fully compliant OpenGL package, but it -isn't officially sanctioned by the OpenGL ARB, such, it is doesn't have -the OpenGL name. There is an acceleration package for the many graphics -card, but I don't know anything about it. -
nVidia is being very supportive of Linux: -their TNT2 and GeForce cards work under Linux with hardware-acceleration of openGL. -(but the drivers are proprietary) -
radeon cards should also be supported very well under linux (even with open-source drivers) -

---- -
2.11) If I resize the window, everything looks strange. -

GEM doesn't trap resize events in IRIX or Linux (this -is not a problem in WinNT). This means that OpenGL doesn't have the -correct information to render properly. If you want to resize the -window, send a 'dimen x y' message to gemwin before you create the window. -

---- -
2.12) Can GEM run on a 3Dfx Voodoo card? -

I (this is: Mark Danks) have a Voodoo2 card, which runs fine under WinNT. -I use the OpenGL beta driver from 3Dfx at work all the time without any -problems and, except that the Voodoo takes over the full screen, it seems -to work fine. You will need to download the OpenGL Beta driver from -3Dfx's web site at http://www.3dfx.com and put the OpenGL32.dll into the -same directory as pd.exe (NOT gem.dll). Debugging patches is much -easier if you have two monitors, one for the 3-D card and one for the 2-D -card. -

IMPORTANT: You MUST set the environment variable -

GEM_SINGLE_CONTEXT = 1 -

to make the Voodoo card work. It will make a window 640x480 (which -is the correct size for TV video out on my Canopus V2 card). On WinNT, -right click "My Computer" and go to "Properties". On the "Environment" -tab, you need to add the variable "GEM_SINGLE_CONTEXT" with a value of -1. -
Resizing the GEM window with a Voodoo card is not -a great idea. The Voodoo card can only display certain window sizes and -will clip the graphics. -

For the tech heads in the audience...I create an -OpenGL context at startup and never actually display its associated window. -This means that GEM objects can create display lists, call OpenGL commands, -etc. in their constructors, even if no window is actually being displayed. -However, with the Voodoo card, there can only be one OpenGL context. -So, instead of creating one context and just holding onto it in the background, -I create the normal GEM window and associate the OpenGL context with it...and -the user can never destroy or close that window. -

---- -
2.13) Will GEM support hardware transform and lighting -(T & L)? -

Absolutely! Unlike some other APIs, OpenGL -will automatically use hardware accelerated transform and lighting if the -card has it. GEM gets great performance from cards like nVidia's -GeForce. -

2.14) I get an error "GEM needs Truecolor visual -support". -

This error means that your X display is running with -paletted colors, which is the result of limited color depth. If you -start the X display with -

startx -- -bpp 16 -

or some higher number, then it should work fine. 32-bit color -is the best. -

-


VIEWING OBJECTS

-
3.1)Why does everything seem dim?< -

You probably turned on lighting but don't have any -lights in the world. Either add a light with world_light or -light -or turn lighting off by sending a message 'lighting 0' to the gemwin. -You can also send a reset message to gemwin to set it back to the -startup state (which doesn't have any lighting). -

---- -
3.2) Why does everything seem dark? -

See question 3.1. -
If you are using view in your patch to change the viewpoint, -you may not be pointing in the correct direction. You also might have translated -everything outside of the current viewport. -
Also, if you have been using single buffering ('buffer -1' message to gemwin), then you might still be in that mode. -Either send a 'buffer 2' message or a 'reset' message to gemwin. -Then, destroy and create your window. -

-


TEXTURE MAPPING

-
4.1) My image doesn't appear. What is going -on? -

Normally images have to be texture-mapped onto Geos. -You have to use [pix_texture] to map the current image onto a Geo. -"Current" means that any pix-manipulation that is done after texturing will not be displayed. -

Any Geo has a color (which is initially set to white). -If you have set the color to black, your Geo (including the image) might be very dark. -If you are using alpha-blending, make sure that the Geo is not invisible. -

Normally images that want to be texture mapped with openGL should have dimensions that are a power of 2 in both height and width. -Now [pix_texture] will make this totally transparent to you (so normally you don't have to care about the size of the image). -However with non-power-of-2 images pix_coordinate might not behave as expected, -because these images need absolute texture-coordinates rather than normalized ones -(as are used with power-of-2 images): so if the texture-coordinates are set to "(0,0) (1,0) (1,1) (0,1)" you might see only the first pixel of the image (which might be black). -

Also, make sure that GEM can find your image (ie, -that the path name is correct). -

---- -
4.2) My image looks strange. What is going -on? -

GEM supports gray8, YUV, and RGBA images. If -it sees that the number of bits per channel and the number of channels -is something that it should be able to handle, it tries to load the raw -data. If you have compressed or stored the pixel data in some "strange" -format, then GEM will probably not read the information correctly. -
Also, if it is an RGBA image, then make sure that -the alpha channel is something useful (this only matters if you are using -the alpha channel, like in the alpha object or pix_mask). -

---- -
4.3) Why does GEM say that it can't handle a gray -image? -

This error message occurs whenever a pix object receives -a gray8 image and the implementor hasn't provided a way to deal with that -format of image. (Implementors often only provide functions for GEM's native -color-format RGBA. Any other color-format (like BGR) will try to call the function -for gray8 images, which might not be supported.) - If you do not want to change the image format with some extern image-programm -(like Photoshop or the Gimp) you might want to try pix_rgba -or harass whoever made the object to add the functionality. -

---- -
4.4) What image formats can GEM handle? -

GEM can read in TIFF, JPEG, and SGI images. -These can be in any color format. Gray scale images are loaded in -as gray scale (ie, one byte per pixel). Everything else is loaded -in or converted to an RGBA image (ie, four bytes per pixel). If there -is an alpha channel, then it will be respected. Otherwise, the alpha -channel will be set to fully opaque (alpha == 255). -

GEM can write TIFF and JPEG images. -TIFF-images will be full RGBA-images, wheras JPEG-files only support (compressed) RGB. -

---- -
4.5) What movie formats can GEM handle? -

The movie formats GEM can handle (still) depend on the platform -you are using. -

On Windoze you can read all AVI-files you have codecs for -

On linux the readable formats depend on the libraries you had installed when you compiled GEM. -Currently there is (optional) support for AVI, quicktime (*.MOV) and MPEG (*.MPG) files. -Not all quicktime-formats are supported. This is unfortunate but is due to linux restrictions. -I highly recommend that you install the mpeg3-library from Heroine because it is much more stable than mpeg1 (which comes with many linux-distributions). -If you have compiled in support for libavifile, you will be able to open Micro$oft-AVI-files. -If you have installed the proper codecs -(libavifile supports a mechanism for loading codecs from windows-DLLs) you should be able to -open almost any format. - -If you have serious problems, mail them to me. -(Be ready to upload the movie-file that won't work) -

---- -
4.6) Why is pix_draw so slow? -

pix_draw is almost never hardware accelerated -on PCs graphics accelerator. This means that it runs extremely -slowly. Always use pix_texture, even if you are just displaying -an image. -

-


WORKING WITH PD

-
5.1) Why do I get clicks in the audio? -

If you are getting a constant stream of clicks in -your audio, then it is probably because you are trying to do graphics and -audio in the same process. Rendering a graphics frame usually takes -longer than the size of the audio buffer, which is why you get clicks (the -clicks are usually at 20Hz...the typical frame rate). -
One way around this is to use two computers, one -for graphics and one for audio. If you have enough processing power -(or dual processors), then you can run two versions of Pd, one for graphics -and one for audio. Just use netsend and netreceive -to have the two versions of Pd talk to each other. -

---- -
5.2) How do I get audio data to GEM? -

One simple way to get raw audio values right now is -to use snapshot~. Just set up a metro which bangs snapshot~ -and use the floating point value. If you want "musical" information, -then use objects such as env~. -You might also have a look at the pix_sig2pix~ which interprets audio-data as pixels -and its counterpart pix_pix2sig~ -

---- -
5.3) Why can't GEM find an image/model file? -

This means that GEM can't locate the file. -If you use an absolute path (with / for instance), then GEM will look there. -Otherwise, GEM will look in the directory of where the patch is. -Then pd/GEM will search the paths you specified at startup with the -path flag. -

Check the following: -

1) Does the file exist? -
2) Did you make a typo in the filename? -
3) Is the file in the search-path ? -

---- -
5.4) How can I optimize my patches? -

One of the biggest performance hits is having UI -elements in your patch which have to be updated. The biggest performance -hog is the number box. While the number box is great for debugging, -make sure that they are all gone from your "release" patch. If you -run a performance meter, you will see that whenever Tcl/Tk has to update -the user interface, it sucks the entire processor. Another examples -of this is when you move a lot of objects at once, everything jerks and -slides across the screen. There are probably ways to improve this... -
Another problem is doing unneccessary calculations. -When you are throwing lots of numbers around, especially packing/unpacking, -doing vector math, etc., they add up. If the calculations are going -unused (for instance, that part of the patch is turned off), then do not -trigger the math objects. Use spigot or gate and block -the events early. This is especially important with objects that -send a lot of numbers, like ~ objects or line/tripleLine. -

-


WRITING NEW GEM OBJECTS

-
6.1) How do I write a new GEM object? -

For the time being, you have to look at the code. -It is fairly well documented and straight forward (if you know C++ and -OOP). Start with an object which is similar to what you want and -derive a new class. The biggest issue right now is how to load in -GEM as a DSO/DLL. For SGIs, you will need to setenv LD_LIBRARY_PATH. -On NT, you will need to have your path include the directory with GEM. -

---- -
6.2) What are the default OpenGL states? -

GemMan (and by association, gemwin) disables alpha -testing, alpha blending, culling, and lighting. Lighting defaults -to two sided, with GL_COLOR_MATERIAL enabled. The viewport is set -to -

float xDivy = (float)m_width / (float)m_height; -
glMatrixMode(GL_PROJECTION); -
glLoadIdentity(); -
glFrustum(-xDivy, xDivy, -1.0, 1.0, 1.0, 20.0); -
gluLookAt(0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 1.0, -0.0); -
glMatrixMode(GL_MODELVIEW); -
glViewport(0, 0, m_width, m_height); -

which gives a range of about -4 to 4 in X and Y at the origin. -This is a small range, but changing it now would break a lot of patches. -

The specific functions to look at are: -

GemMan::windowInit() -
GemMan::resetValues() -
gemhead::renderGL() -

-


OBJECT SPECIFIC

-
7.1) Why doesn't <object> exist on <platform>? -

Usually, this is because I don't have the resources -to get the object running on that platform. If an object that you -want doesn't exist on your platform, then ask for it! However, if -it is tied to hardware, then it is much less likely that I will be able -to do anything about it (unless someone donates the hardware to me...) -

---- -
7.2) Why doesn't gemtablet work? -

gemtablet only works on WinNT. I don't -have drivers for IRIX or Linux (also, see question 7.4) -
If GEM can find the tablet, then it will print a -message at window creation time. If you don't see a message, then -GEM doesn't think that you have a tablet. -
The tablet is mapped to the size of the GEM graphics -window. -

--- -
7.3) I don't want GEM to take over my tablet. -How do I stop it? -

Set the environment variable -

GEM_NO_TABLET = 1 -

---- -
7.4) Why doesn't gemmouse work in IRIX? -

Basically, I don't have physical access to an SGI machine. -This makes it hard to do some of the OS specific work. -It should be straightforward to do the event handling, so if someone gets -it working, I would love to include it (and give you credit). All -you have to do is call the correct event functions from GemEvent.h and -everything should just start to work (ie, gemmouse doesn't have any OS -specific code in it). -

---- -
7.5) Why doesn't gemorb work? -

You need to make sure that your SpaceOrb is hooked -up correctly. I am using a library which isn't supported by SpaceTec so -there can be problems, although I have not had any. -
<RANT> When will companies wake up and actually -provide drivers and support for their products under WinNT? </RANT> -

---- -
7.6) What is wrong with pix_video in WinNT? -

I haven't completely figured out how to get access -to the video stream in WinNT. I'm using Video for Windows with a -Connectix QuickCam, as well as an Intel Video Capture Card, and it seems -to assume that you are only writing to a file or previewing into a window. -Windows tries to take over the system and doesn't really provide any stable -hooks (unlike IRIX). If anyone knows how to deal with this, please -let me know. -

[return] -
-
- - + + + + + + + Gem FAQ + + + +

+

+GEM FAQ

+ +


* : new question +
+ : changed question +

+

+QUESTIONS

+GENERAL +
1.1) What is GEM? +
1.2) What is Pd? +
1.3) What platforms do GEM and Pd run on? +
1.4.0) How do I install GEM and Pd on IRIX? +
1.4.1) How do I install GEM and Pd on linux? +
1.4.2) How do I install GEM and Pd on WinNT? +
1.7) What is a good intro to OpenGL? +
1.8) Are there any web sites for Pd or GEM? +
1.9) What libraries does GEM use? (aka: Who does Mark +want to thank?) +
1.10) Are there any restrictions on GEM? +
1.11) How do I use GEM in a performance? +

USING GEM +
2.1) How do I (???) +
2.2) How do I make GEM run? +
2.3) Why doesn't GEM run? +
2.4) I've got it running. Now what? +
2.5) On IRIX 5.3, why does GEM dump with an rld error? +
2.6) Why can't I compile GEM on IRIX 5.3? +
2.7) Why is GEM slow in general? +
2.8) Why is GEM slow on IRIX? +
2.9) Why is GEM slow on WinNT/Win95? +
2.10) Why is GEM slow on Linux? +
2.11) If I resize the window, everything looks strange. +
2.12) Can GEM run on a 3Dfx Voodoo card? +
2.13) Will GEM support hardware transform and lighting +(T&L) ? +
2.14) I get an error "GEM needs Truecolor visual support". +

VIEWING OBJECTS +
3.1) Why does everything seem dim? +
3.2) Why does everything seem dark? +

TEXTURE MAPPING +
4.1) My image doesn't appear. What is going on? +
4.2) My image looks strange. What is going on? +
4.3) Why does GEM say that it can't handle a gray image? +
4.4) What image formats can GEM handle? +
4.5) What movie formats can GEM handle? +
4.6) Why is pix_draw so slow? +

WORKING WITH PD +
5.1) Why do I get clicks in the audio? +
5.2) How do I get audio data to GEM? +
5.3) Why can't GEM find an image/model file? +
5.4) How can I optimize my patches? +

WRITING NEW GEM OBJECTS +
6.1) How do I write a new GEM object? +
6.2) What are the default OpenGL states? +

OBJECT SPECIFIC +
7.1) Why doesn't <object> exist on <platform>? +
7.2) Why doesn't gemtablet work? +
7.3) I don't want GEM to take over my tablet. +How do I stop it? +
7.4) Why doesn't gemmouse work in IRIX/Linux? +
7.5) Why doesn't gemorb work? +
7.6) What is wrong with pix_video in WinNT? +

+

+ANSWERS

+

GENERAL

+
1.1) What is GEM? +

GEM is the Graphics Environment for Multimedia. +It was originally written by Mark Danks to generate real-time computer +graphics, especially for audio-visual compositions. It originally ran under +FTS/Max (which is why you might see some papers reference it), but all +new development is under Pd. +

You can get GEM at http://gem.iem.at/ +

GEM was sponsored by a grant from Intel (http://www.intel.com) +

GEM was ported to linux by Günter Geiger +

GEM is now maintained by IOhannes m zmölnig. +

the core-development team consists of

    +
  • chris clepper
  • +
  • günter geiger
  • +
  • daniel heckenberg
  • +
  • james tittle
  • +
  • IOhannes m zmölnig
+lots of contributions are made by various people (thanks to all of them) +

---- +
1.2) What is Pd? +

Pd is a real-time environment for audio and MIDI. +It was written by Miller Puckette, who created FTS/Max when +he was at IRCAM. Basically, Pd can be seen as the next generation +of real-time visual programming languages. GEM runs inside of the +Pd environment. +

You can get Pd at http://www.crca.ucsd.edu/~msp/software.html +

Pd is sponsored by a grant from Intel (http://www.intel.com) +

---- +
1.3) What platforms do GEM and Pd run on? +

GEM and Pd run on Windows (95, 98, ME, NT 4.0, 2000, XP), linux and macOS-X (>10.2). +SGI-Irix (> 6.2) used to be supported but i don't have any prove that it still works). +Günter Geiger +has done an initial port of GEM and Pd to Linux http://gige.epy.co.at). +

GEM is now maintained by me and +developed by a team of several independent programmers (see section 1.1) +

---- +
1.4) How do I install GEM ? +

---- +
1.4.0) How do I install GEM and Pd on IRIX? +

See the readme for installing Pd. +

GEM should be at +

pd/gem +

If you run GEM.INSTALL.sh, then all of the example files and documention +should be put in the correct locations. +

---- +
1.4.1) How do I install GEM and Pd on linux? +

See the readme for installing Pd. +

GEM should be at +

chdir to <gem>/src/Gnu and build Gem following the instructions in the README.build +(./configure; make) +

If you then make install, then all of the example files and documention +should be put in the correct locations. +

if you are using debian, Gem should be available via apt

+

if you are using an rpm-based distribution, check out the builds at planetCCRMA

+

---- +
1.4.2) How do I install GEM and Pd on WinNT? +

See the readme for installing Pd. +

unzip GEM so that it is at +

pd\gem +

If you run GEM.INSTALL.bat, then all of the example files and documentation +should be put in the correct locations. +

there is also an installer for windows. +

---- +
1.4.3) How do I install GEM and Pd on macOS? +

See the readme for installing Pd. +

there is also an installer for macOS. +

---- +
1.7) What is a good intro to OpenGL? +

The best book is the OpenGL Programming Manual +by Mason and Woo. This is also called the "Red Book". If you search +the web, there are many sites on OpenGL. A good starting point is +http://www.opengl.org. +Also, Mark Kilgard (who used to work for SGI) has a wonderful site with +lots of links (http://reality.sgi.com/mjk) +Also, Normal Lin has written another great book on 3D-graphics under linux +

---- +
1.8) Are there any web sites for Pd or GEM? +

Except for the ones noted above, there is the Japanese +installation page at +
http://www.rinc.or.jp/~kotobuki/gem/index.htm +

There is a Pd mailing list. Subscription info +is on IEM's site http://www.iem.at/mailinglists/pd-list +

One of pd's unofficial home-pages is at http://pd.iem.at hosted by the +Institute of Electronic Music and Acoustics, Graz, Austria +

Also hosted by the iem is the site of the pd-community +http://www.puredata.info +

An interesting place might also be Günter Geiger's size http://gige.epy.co.at/ +

there are lot's of other cool pages (search the net...) +

---- +
1.9) What libraries does GEM use? +(aka: Who does Mark want to thank?) +

All copyrights and license info can be found in +
GEM.LICENSE.TERMS +
Thanks to Sam Leffner for libTiff, the TIFF image +loader. +
+sam@engr.sgi.com +
ftp://ftp.sgi.com/graphics/tiff/ +
Thanks to Masayuki Matsumoto for fstimage for OpenGL, +the SGI +
image loader. +
+matumot@dst.nk-exa.co.jp +
Thanks to the Independent JPEG Group for libjpeg, +the JPEG image loader. +
+jpeg-info@uunet.uu.net +
ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/ +
Thanks to Mark Kilgard at al. (and SGI) for glut, the openGL Utility Toolkit +
http://www.pobox.com/~ndr +
Thanks to Stephane Rehel for GLTT, the OpenGL TrueType +render. +
+rehel@worldnet.fr +
http://home.worldnet.fr/~rehel/gltt/gltt.html +
Thanks to David Turner, Robert Wilhelm, and Werner +Lemberg for +
Freetype, a TrueType font +rendering engine. +
+turner@enst.fr +
+robert@physiol.med.tu-muenchen.de +
+a7971428@unet.univie.ac.at +
http://www.physiol.med.tu-muenchen.de/~robert/freetype.html +
Thanks to the MPEG Software Simulation Group, for +libmpeg, the +
MPEG-2 Encoder/Decoder +
+mssg@mpeg.org +
http://www.mpeg.org/MSSG/ +
Thanks to Heroine for quicktime4linux +a quickime Decoder +and libmpeg3, another MPEG-2 Encoder/Decoder +
MPEG-2 Encoder/Decoder +
+mssg@mpeg.org +
http://heroinewarrior.com/ +
Thanks to LCS/Telegraphics for Wintab, the Windows +tablet library. +
+wintab@pointing.com +
Thanks to David McAllister for the Particle System +library. +
+davemc@cs.unc.edu +
http://www.cs.unc.edu/~davemc/Particle/ +
Thanks to John Stone for the Space Orb library, +libOrb +
+j.stone@acm.org +
http://www.umr.edu/~johns/projects/liborb/ +

---- +
1.10) Are there any restrictions on GEM? +

GEM is under the Gnu Public License. This basically +means that it will always be free software.Check out http://www.gnu.org +for more information and read the full license in GnuGPL.LICENSE in the GEM release. +

---- +
1.11) How do I use GEM in a performance? +

This is a constant problem, because there is no consistent +way to display video on any platform. Also, you usually do not want +to send the entire screen, but only the GEM window. It is also useful +to be able to edit/control the Pd patch window while the patch is actually +running. +

On SGIs, the best way is to get a video out option. +On the SGI O2, Impact, and Onyx (Mark has used all of these), there is a +simple connector or breakout box to do video. +If you run the video out program, then you will get a rectangle on your screen +which shows what is being sent out the video connector. +Make your GEM window a little larger than 640x480 and center it in the rectangle. +You can now project this with a standard video projector. +

On PCs it is a bit harder. +Several modern video-cards have the possibility to output several screens +(either 2 (or more) VGA-screens or 1 VGA-screen and 1 TV (Composite or S-HVS) +or a combination with DFTs) +If you have a Canopus Voodoo2 card it has a video and s-video output on it. As described +in question 2.12, you can get a Voodoo to work with +GEM. If any one else has a better solution, please let me know. +The nVidia Riva TNTs require that you output the full screen, so this is +not a very good option. You can use a video scan convertor. +Some of them only display a part of the scene, which is exactly what you +want. +

With modern multi-headed cards it is more simple: +Configure your card to display the desktop spread over your multiple screens +(e.g.: from left-to-right). +On windows and macOS you can do this via the display-properties dialog. +On linux you will have to edit your /etc/X11/XF86Config-4 file either by hand or +(if your system supports it) via an appropriate editor (yes, nowadays there are some). +Now create your gem-window on the second screen: +it should have the same dimensions as the 2nd screen (e.g: "[dimen 800 600("). +to place it at the second screen use the offset (e.g: if your primary sreen +(the one you want for patch-editing) has the dimension 1024x768 use "[offset 1024 0(", +which will create the gem-window 1024 pixels right of the upper-left corner +of the total screen (and 0 pixels below it), +which is exactly the upper-left corner of the 2nd screen. +You most probably want to turn off the borders with "[border 0(".
+Note: some grafix-card have openGL-hardware-acceleration only on the 1st screen +(so you should create the gem-window on the 1st screen and move +your patches to the 2nd screen) +

If you are using an XServer for displaying (under linux) you can also use another +computer for rendering. +You can specify the place where the gem-window should be created with something like +"create <render.host>:0.0" + +

If you are doing audio with graphics, the only solution +to prevent clicking (question 5.1) is to run 2 computers +and have them communicate with netsend/netreceive. We are working +on making Pd/GEM multi-processor friendly, so if you have a multi-processor +system, you can run everything on one machine eventually. +

+


USING GEM

+
2.1)How do I (???) +

Many of the general usage questions are probably +answered in the manual or release notes. The pd mailing list is also +a good place to find answers as well. +

2.2) How do I make GEM run? +

GEM is not an executable. It requires Pd to +work and is loaded in at run time. For example, I have an alias on +the SGI which does +

/usr/people/mdanks/pd/bin/pd -lib /usr/people/mdanks/pd/gem/Gem +

and on WinNT +

\pdDir\pd\bin\pd -lib /pdDir/pd/gem/Gem +

on UNIX-systems you will probably want to use a .pdrc file, + where you can put the command-line arguments for pd that you "always" need. +

If you don't see a startup message from GEM, then something went wrong. +

Most people use use the command shell to start Pd. +It is not very difficult to configure Pd to run from double-clicking on the icon. +

---- +
2.3) Why doesn't GEM run? +

Notice that the -lib flag always requires Unix +styles slashes. This is the case even on Windows. +

You may also want to use the -nosound flag. +For instance, my PC has problems using audio (it leaks memory), so I just +turn off the audio part of Pd. However, other people can't get GEM +to work if the -nosound is used (on Win95). You can also try the +-dac or -adc flags (for digital-analog-conversion only and analog-digital-conversion +only). +

---- +
2.4) I've got it running. Now what? +

Try out the manual. It will step you through +the basics. +
You will also want to look at the example files. +Assuming that everything is installed correctly, you can get to the examples +by going to the Help menu in Pd and selecting examples. A bunch of +the patches should start with gem<something>. The best one is +gem/01.basic/01.redSquare.pd +It puts a red square up on the screen and allows you to rotate it. gemImage.pd +shows how to load in a TIFF file. gem/03.lighting/04.moveSpheres.pd +moves two spheres around the screen. Try the other ones. +
Most of the GEM objects have test patches which +give some information about the various controls for the object. +

---- +
2.5) On IRIX 5.3, why does GEM dump with an rld error? +

GEM only works under IRIX 6.2+. The rld error +is probably something about not having glBindTextureEXT (or something). +OpenGL 1.0 has some extensions to speed up texture mapping (which are an +integral part of OpenGL 1.1). However, these don't exist on IRIX +5.3. If you recompile GEM (see the next question), things should +work fine. +
I don't have access to an IRIX machine, so don't +expect any builds from me. Upgrading to IRIX 6.2+ is worth it. +

---- +
2.6) Why can't I compile GEM on IRIX 5.3? +

There was probably an error saying that the compiler +couldn't find the file "dmedia/vl_vino.h" in pix_videoSGI.cpp. IRIX +6.2+ adds new functionality to the media libraries which makes life much +easier. You cannot compile pix_video or pix_indycam as is under 5.3. +You can remove them from the Pix/Makefile and from the linker part of the +global Makefile. You will also need to recompile the Td and Tiff +libraries. +

There shouldn't be any problems doing this. I haven't tried any +of this, so if it works for someone, please let me know. +

---- +
2.7) Why is GEM slow in general? +

Examine what you are doing. If you are constantly +changing textures, then this is probably your problem. If you have +models with a million triangles, then this is probably the problem. +Compare what you are doing with realistic specs on your system. Some +systems slow down when they have to draw very large polygons (slow fill +rate). +
You can also turn on profiling to see how long it +takes to render a frame. Send a profile message to the gemwin object. +The number that is printed is the number of milliseconds one frame takes +to render. 50 milliseconds is 20 frames per second. 'profile 2' is +good if you want to see how long the image processing is taking. +
profile 0 - turn off profiling +
profile 1 - turn on profiling +
profile 2 - turn on profiling +and don't cache pixes +

---- +
2.8) Why is GEM slow on IRIX? +

If you are having major slowdowns, then please let +me know. I have gotten very good performance on most machines (Indy, +O2, Impact, Onyx2). +

---- +
2.9) Why is GEM slow on WinNT/Win95? +

You probably don't have hardware acceleration. +You can use software rendering, but it basically useless except for extremely +basic patches. You can get a good graphics accelerator for really +cheap these days. I recommend a card based on nVidia's chipsets, +such as the TNT2 or GeForce, but there are other companies such as 3dfx +and Matrox. Make sure that you are running the latest drivers for +your card. The basic drivers that come with the cards are usually +very bad. +
Also, PCs don't deal with lots of texture maps very +well (they are bus limited, at least until AGP), so if you are trying to +use lots of constantly changing texture maps +(especially with [pix_multiimage], [pix_video] or [pix_film]), that will cause problems. +

---- +
2.10) Why is GEM slow on Linux? +

It is because you have to use Mesa, which might be +running iin software. Mesa (http://www.mesa.org) +is an awesome package by Brian Paul (brianp@avid.com) which "emulates" +OpenGL. Basically, it is a fully compliant OpenGL package, but it +isn't officially sanctioned by the OpenGL ARB, such, it is doesn't have +the OpenGL name. There is an acceleration package for the many graphics +card, but I don't know anything about it. +
nVidia is being very supportive of Linux: +their TNT2 and GeForce cards work under Linux with hardware-acceleration of openGL. +(but the drivers are proprietary) +
radeon cards should also be supported very well under linux (even with open-source drivers) +

---- +
2.11) If I resize the window, everything looks strange. +

GEM doesn't trap resize events in IRIX or Linux (this +is not a problem in WinNT). This means that OpenGL doesn't have the +correct information to render properly. If you want to resize the +window, send a 'dimen x y' message to gemwin before you create the window. +

---- +
2.12) Can GEM run on a 3Dfx Voodoo card? +

I (this is: Mark Danks) have a Voodoo2 card, which runs fine under WinNT. +I use the OpenGL beta driver from 3Dfx at work all the time without any +problems and, except that the Voodoo takes over the full screen, it seems +to work fine. You will need to download the OpenGL Beta driver from +3Dfx's web site at http://www.3dfx.com and put the OpenGL32.dll into the +same directory as pd.exe (NOT gem.dll). Debugging patches is much +easier if you have two monitors, one for the 3-D card and one for the 2-D +card. +

IMPORTANT: You MUST set the environment variable +

GEM_SINGLE_CONTEXT = 1 +

to make the Voodoo card work. It will make a window 640x480 (which +is the correct size for TV video out on my Canopus V2 card). On WinNT, +right click "My Computer" and go to "Properties". On the "Environment" +tab, you need to add the variable "GEM_SINGLE_CONTEXT" with a value of +1. +
Resizing the GEM window with a Voodoo card is not +a great idea. The Voodoo card can only display certain window sizes and +will clip the graphics. +

For the tech heads in the audience...I create an +OpenGL context at startup and never actually display its associated window. +This means that GEM objects can create display lists, call OpenGL commands, +etc. in their constructors, even if no window is actually being displayed. +However, with the Voodoo card, there can only be one OpenGL context. +So, instead of creating one context and just holding onto it in the background, +I create the normal GEM window and associate the OpenGL context with it...and +the user can never destroy or close that window. +

---- +
2.13) Will GEM support hardware transform and lighting +(T & L)? +

Absolutely! Unlike some other APIs, OpenGL +will automatically use hardware accelerated transform and lighting if the +card has it. GEM gets great performance from cards like nVidia's +GeForce. +

2.14) I get an error "GEM needs Truecolor visual +support". +

This error means that your X display is running with +paletted colors, which is the result of limited color depth. If you +start the X display with +

startx -- -bpp 16 +

or some higher number, then it should work fine. 32-bit color +is the best. +

+


VIEWING OBJECTS

+
3.1)Why does everything seem dim?< +

You probably turned on lighting but don't have any +lights in the world. Either add a light with world_light or +light +or turn lighting off by sending a message 'lighting 0' to the gemwin. +You can also send a reset message to gemwin to set it back to the +startup state (which doesn't have any lighting). +

---- +
3.2) Why does everything seem dark? +

See question 3.1. +
If you are using view in your patch to change the viewpoint, +you may not be pointing in the correct direction. You also might have translated +everything outside of the current viewport. +
Also, if you have been using single buffering ('buffer +1' message to gemwin), then you might still be in that mode. +Either send a 'buffer 2' message or a 'reset' message to gemwin. +Then, destroy and create your window. +

+


TEXTURE MAPPING

+
4.1) My image doesn't appear. What is going +on? +

Normally images have to be texture-mapped onto Geos. +You have to use [pix_texture] to map the current image onto a Geo. +"Current" means that any pix-manipulation that is done after texturing will not be displayed. +

Any Geo has a color (which is initially set to white). +If you have set the color to black, your Geo (including the image) might be very dark. +If you are using alpha-blending, make sure that the Geo is not invisible. +

Normally images that want to be texture mapped with openGL should have dimensions that are a power of 2 in both height and width. +Now [pix_texture] will make this totally transparent to you (so normally you don't have to care about the size of the image). +However with non-power-of-2 images pix_coordinate might not behave as expected, +because these images need absolute texture-coordinates rather than normalized ones +(as are used with power-of-2 images): so if the texture-coordinates are set to "(0,0) (1,0) (1,1) (0,1)" you might see only the first pixel of the image (which might be black). +

Also, make sure that GEM can find your image (ie, +that the path name is correct). +

---- +
4.2) My image looks strange. What is going +on? +

GEM supports gray8, YUV, and RGBA images. If +it sees that the number of bits per channel and the number of channels +is something that it should be able to handle, it tries to load the raw +data. If you have compressed or stored the pixel data in some "strange" +format, then GEM will probably not read the information correctly. +
Also, if it is an RGBA image, then make sure that +the alpha channel is something useful (this only matters if you are using +the alpha channel, like in the alpha object or pix_mask). +

---- +
4.3) Why does GEM say that it can't handle a gray +image? +

This error message occurs whenever a pix object receives +a gray8 image and the implementor hasn't provided a way to deal with that +format of image. (Implementors often only provide functions for GEM's native +color-format RGBA. Any other color-format (like BGR) will try to call the function +for gray8 images, which might not be supported.) + If you do not want to change the image format with some extern image-programm +(like Photoshop or the Gimp) you might want to try pix_rgba +or harass whoever made the object to add the functionality. +

---- +
4.4) What image formats can GEM handle? +

GEM can read in TIFF, JPEG, and SGI images. +These can be in any color format. Gray scale images are loaded in +as gray scale (ie, one byte per pixel). Everything else is loaded +in or converted to an RGBA image (ie, four bytes per pixel). If there +is an alpha channel, then it will be respected. Otherwise, the alpha +channel will be set to fully opaque (alpha == 255). +

GEM can write TIFF and JPEG images. +TIFF-images will be full RGBA-images, wheras JPEG-files only support (compressed) RGB. +

---- +
4.5) What movie formats can GEM handle? +

The movie formats GEM can handle (still) depend on the platform +you are using. +

On Windoze you can read all AVI-files you have codecs for +

On linux the readable formats depend on the libraries you had installed when you compiled GEM. +Currently there is (optional) support for AVI, quicktime (*.MOV) and MPEG (*.MPG) files. +Not all quicktime-formats are supported. This is unfortunate but is due to linux restrictions. +I highly recommend that you install the mpeg3-library from Heroine because it is much more stable than mpeg1 (which comes with many linux-distributions). +If you have compiled in support for libavifile, you will be able to open Micro$oft-AVI-files. +If you have installed the proper codecs +(libavifile supports a mechanism for loading codecs from windows-DLLs) you should be able to +open almost any format. + +If you have serious problems, mail them to me. +(Be ready to upload the movie-file that won't work) +

---- +
4.6) Why is pix_draw so slow? +

pix_draw is almost never hardware accelerated +on PCs graphics accelerator. This means that it runs extremely +slowly. Always use pix_texture, even if you are just displaying +an image. +

+


WORKING WITH PD

+
5.1) Why do I get clicks in the audio? +

If you are getting a constant stream of clicks in +your audio, then it is probably because you are trying to do graphics and +audio in the same process. Rendering a graphics frame usually takes +longer than the size of the audio buffer, which is why you get clicks (the +clicks are usually at 20Hz...the typical frame rate). +
One way around this is to use two computers, one +for graphics and one for audio. If you have enough processing power +(or dual processors), then you can run two versions of Pd, one for graphics +and one for audio. Just use netsend and netreceive +to have the two versions of Pd talk to each other. +

---- +
5.2) How do I get audio data to GEM? +

One simple way to get raw audio values right now is +to use snapshot~. Just set up a metro which bangs snapshot~ +and use the floating point value. If you want "musical" information, +then use objects such as env~. +You might also have a look at the pix_sig2pix~ which interprets audio-data as pixels +and its counterpart pix_pix2sig~ +

---- +
5.3) Why can't GEM find an image/model file? +

This means that GEM can't locate the file. +If you use an absolute path (with / for instance), then GEM will look there. +Otherwise, GEM will look in the directory of where the patch is. +Then pd/GEM will search the paths you specified at startup with the -path flag. +

Check the following: +

1) Does the file exist? +
2) Did you make a typo in the filename? +
3) Is the file in the search-path ? +

---- +
5.4) How can I optimize my patches? +

One of the biggest performance hits is having UI +elements in your patch which have to be updated. The biggest performance +hog is the number box. While the number box is great for debugging, +make sure that they are all gone from your "release" patch. If you +run a performance meter, you will see that whenever Tcl/Tk has to update +the user interface, it sucks the entire processor. Another examples +of this is when you move a lot of objects at once, everything jerks and +slides across the screen. There are probably ways to improve this... +
Another problem is doing unneccessary calculations. +When you are throwing lots of numbers around, especially packing/unpacking, +doing vector math, etc., they add up. If the calculations are going +unused (for instance, that part of the patch is turned off), then do not +trigger the math objects. Use spigot or gate and block +the events early. This is especially important with objects that +send a lot of numbers, like ~ objects or line/tripleLine. +

+


WRITING NEW GEM OBJECTS

+
6.1) How do I write a new GEM object? +

For the time being, you have to look at the code. +It is fairly well documented and straight forward (if you know C++ and +OOP). Start with an object which is similar to what you want and +derive a new class. The biggest issue right now is how to load in +GEM as a DSO/DLL. For SGIs, you will need to setenv LD_LIBRARY_PATH. +On NT, you will need to have your path include the directory with GEM. +

---- +
6.2) What are the default OpenGL states? +

GemMan (and by association, gemwin) disables alpha +testing, alpha blending, culling, and lighting. Lighting defaults +to two sided, with GL_COLOR_MATERIAL enabled. The viewport is set +to +

float xDivy = (float)m_width / (float)m_height; +
glMatrixMode(GL_PROJECTION); +
glLoadIdentity(); +
glFrustum(-xDivy, xDivy, -1.0, 1.0, 1.0, 20.0); +
gluLookAt(0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 1.0, +0.0); +
glMatrixMode(GL_MODELVIEW); +
glViewport(0, 0, m_width, m_height); +

which gives a range of about -4 to 4 in X and Y at the origin. +This is a small range, but changing it now would break a lot of patches. +

The specific functions to look at are: +

GemMan::windowInit() +
GemMan::resetValues() +
gemhead::renderGL() +

+


OBJECT SPECIFIC

+
7.1) Why doesn't <object> exist on <platform>? +

Usually, this is because I don't have the resources +to get the object running on that platform. If an object that you +want doesn't exist on your platform, then ask for it! However, if +it is tied to hardware, then it is much less likely that I will be able +to do anything about it (unless someone donates the hardware to me...) +

---- +
7.2) Why doesn't gemtablet work? +

gemtablet only works on WinNT. I don't +have drivers for IRIX or Linux (also, see question 7.4) +
If GEM can find the tablet, then it will print a +message at window creation time. If you don't see a message, then +GEM doesn't think that you have a tablet. +
The tablet is mapped to the size of the GEM graphics +window. +

--- +
7.3) I don't want GEM to take over my tablet. +How do I stop it? +

Set the environment variable +

GEM_NO_TABLET = 1 +

---- +
7.4) Why doesn't gemmouse work in IRIX? +

Basically, I don't have physical access to an SGI machine. +This makes it hard to do some of the OS specific work. +It should be straightforward to do the event handling, so if someone gets +it working, I would love to include it (and give you credit). All +you have to do is call the correct event functions from GemEvent.h and +everything should just start to work (ie, gemmouse doesn't have any OS +specific code in it). +

---- +
7.5) Why doesn't gemorb work? +

You need to make sure that your SpaceOrb is hooked +up correctly. I am using a library which isn't supported by SpaceTec so +there can be problems, although I have not had any. +
<RANT> When will companies wake up and actually +provide drivers and support for their products under WinNT? </RANT> +

---- +
7.6) What is wrong with pix_video in WinNT? +

I haven't completely figured out how to get access +to the video stream in WinNT. I'm using Video for Windows with a +Connectix QuickCam, as well as an Intel Video Capture Card, and it seems +to assume that you are only writing to a file or previewing into a window. +Windows tries to take over the system and doesn't really provide any stable +hooks (unlike IRIX). If anyone knows how to deal with this, please +let me know. +

[return] +
+
+ + diff --git a/Gem/manual/GemWPd.html b/Gem/manual/GemWPd.html index b564d99..46c863a 100644 --- a/Gem/manual/GemWPd.html +++ b/Gem/manual/GemWPd.html @@ -1,140 +1,140 @@ - - - - - - - Using GEM with Pd - - - -

-

-Using GEM with Pd

-    An important fact is that GEM is NOT an application. -It is a library that the application Pd loads in at run-time.  Most -of this information is taken directly from the GEM FAQ. -

How do I install GEM on IRIX? -
How do I install GEM on Win95/NT/2k? -
How do I install GEM on linux? -
How do I install GEM on macOS-X? -
How do I run GEM on IRIX? -
How do I run GEM on Win95/NT/2k? -
How do I run GEM on linux? -
How do I run GEM on linux? -
Why doesn't GEM run? -

-

-How do I install GEM and Pd on IRIX?

-See the readme for installing Pd. -

Uncompress and untar the GEM file that you downloaded.  GEM should -be located at -

pd/gem -

depending on where you have installed Pd. -

If you run the shell script, GEM.INSTALL.sh, then all of the example -files and documention -
should be put in the correct locations. -

-

-How do I install GEM and Pd on WinNT?

-See the readme for installing Pd. -

TODO: there should be a install package somewhere -

Unzip the GEM file that you downloaded so that it is at -

pd\gem -

depending on where you have installed Pd. -

If you run GEM.INSTALL.bat, then all of the example files and documentation -should be put in the correct locations. -

-

-How do I install GEM and Pd on linux?

-See the readme for installing Pd. -

Uncompress and untar the GEM file that you downloaded so that it is at -

pd/gem -

depending on where you have installed Pd. -

chdir into <pd/gem>/src/Gnu -

read the README.build -

run ./configure and afterwards make -

If you run make install, then all of the example files and documentation -should be put in the correct locations. -

-

-How do I install GEM and Pd on macOS-X?

-See the readme for installing Pd. -

TODO: there should be a install package somewhere -

-

-How do I run GEM on IRIX?

-   To use GEM type something like: -

/usr/people/mdanks/pd/bin/pd -lib /usr/people/mdanks/pd/gem/Gem -

(where /usr/people/mdanks is the path to the pd directory). Check out -the README for Pd to see examples of the -lib flag. If you just try to -"run" GEM, you will get an error! Notice that last word is a capital Gem. -If you get a "can't find gem_setup" error, then that is the problem. Look -in the GEM FAQ -
for trouble shooting suggestions. -

If you don't see startup messages from GEM, then something went wrong. -
Also, you might need to add pd/bin to your PATH environment variable. -

-

-How do I run GEM on Win95/NT?

-    It is best to start Pd from a DOS command line.  -If you go to the Start menu, you should find an application called "Command -Prompt" under the Program menu.  You need to change to the drive where -you installed Pd.  For instance, if it is on your D: drive, just type -d: at the prompt. -

   To use GEM type something like: -

\pd\bin\pd -lib /pd/gem/Gem -

depending on where you installed Pd. -

    Check out the README for Pd to see examples of the --lib flag. If you just try to double click GEM, you will get an error! -Notice that last word is a capital Gem. If you get a "can't find gem_setup" -error, then that is the problem. Look in the GEM FAQ for trouble shooting -suggestions. -

If you don't see a startup message from GEM, then something went wrong. -

    Most people use the command shell to start Pd.  -It is difficult to configure Pd to run from double-clicking on the icon. -

    Also, you might need to add pd/bin to your PATH environment -variable. -

-

-How do I run GEM on linux?

-   To use GEM type something like: -

/usr/people/mdanks/pd/bin/pd -lib /usr/people/mdanks/pd/gem/Gem -

(where /usr/people/mdanks is the path to the pd directory). Check out -the README for Pd to see examples of the -lib flag. If you just try to -"run" GEM, you will get an error! Notice that last word is a capital Gem. -If you get a "can't find gem_setup" error, then that is the problem. Look -in the GEM FAQ -
for trouble shooting suggestions. -

If you don't see startup messages from GEM, then something went wrong. -
Also, you might need to add pd/bin to your PATH environment variable. -

-

-How do I run GEM on macOS-X?

-   To use GEM type something like: -/usr/local/bin/pd -lib /Users/zmoelnig/pd/Gem -

(where /usr/local/bin/pd is the path to the pd directory and -/Users/zmoelnig/pd is the path where the Gem.pd_darwin resides). -Check out the README for Pd to see examples of the -lib flag. If you just try to -"run" GEM, you will get an error! Notice that last word is a capital Gem. -If you get a "can't find gem_setup" error, then that is the problem. Look -in the GEM FAQ -
for trouble shooting suggestions. -

If you don't see startup messages from GEM, then something went wrong. -
Also, you might need to add pd/bin to your PATH environment variable. -

-

-Why doesn't GEM run?

-    Notice that the -lib flag always requires Unix styles -slashes, even if you are on Windows.  This means that you need to -do -lib /gem/Gem, not -lib \gem\Gem -

    You may also want to use the -nosound flag.  -For instance, my PC has problems using audio (it leaks memory), so I just -turn off the audio part of Pd.  However, other people can't get GEM -to work if the -nosound is used (on Win95).  You can also try the --dac or -adc flags (for digital-analog-conversion only and analog-digital-conversion -only). -

[return] -
  - - + + + + + + + Using GEM with Pd + + + +

+

+Using GEM with Pd

+    An important fact is that GEM is NOT an application. +It is a library that the application Pd loads in at run-time.  Most +of this information is taken directly from the GEM FAQ. +

How do I install GEM on IRIX? +
How do I install GEM on Win95/NT/2k? +
How do I install GEM on linux? +
How do I install GEM on macOS-X? +
How do I run GEM on IRIX? +
How do I run GEM on Win95/NT/2k? +
How do I run GEM on linux? +
How do I run GEM on linux? +
Why doesn't GEM run? +

+

+How do I install GEM and Pd on IRIX?

+See the readme for installing Pd. +

Uncompress and untar the GEM file that you downloaded.  GEM should +be located at +

pd/gem +

depending on where you have installed Pd. +

If you run the shell script, GEM.INSTALL.sh, then all of the example +files and documention +
should be put in the correct locations. +

+

+How do I install GEM and Pd on WinNT?

+See the readme for installing Pd. +

TODO: there should be a install package somewhere +

Unzip the GEM file that you downloaded so that it is at +

pd\gem +

depending on where you have installed Pd. +

If you run GEM.INSTALL.bat, then all of the example files and documentation +should be put in the correct locations. +

+

+How do I install GEM and Pd on linux?

+See the readme for installing Pd. +

Uncompress and untar the GEM file that you downloaded so that it is at +

pd/gem +

depending on where you have installed Pd. +

chdir into <pd/gem>/src/Gnu +

read the README.build +

run ./configure and afterwards make +

If you run make install, then all of the example files and documentation +should be put in the correct locations. +

+

+How do I install GEM and Pd on macOS-X?

+See the readme for installing Pd. +

TODO: there should be a install package somewhere +

+

+How do I run GEM on IRIX?

+   To use GEM type something like: +

/usr/people/mdanks/pd/bin/pd -lib /usr/people/mdanks/pd/gem/Gem +

(where /usr/people/mdanks is the path to the pd directory). Check out +the README for Pd to see examples of the -lib flag. If you just try to +"run" GEM, you will get an error! Notice that last word is a capital Gem. +If you get a "can't find gem_setup" error, then that is the problem. Look +in the GEM FAQ +
for trouble shooting suggestions. +

If you don't see startup messages from GEM, then something went wrong. +
Also, you might need to add pd/bin to your PATH environment variable. +

+

+How do I run GEM on Win95/NT?

+    It is best to start Pd from a DOS command line.  +If you go to the Start menu, you should find an application called "Command +Prompt" under the Program menu.  You need to change to the drive where +you installed Pd.  For instance, if it is on your D: drive, just type +d: at the prompt. +

   To use GEM type something like: +

\pd\bin\pd -lib /pd/gem/Gem +

depending on where you installed Pd. +

    Check out the README for Pd to see examples of the +-lib flag. If you just try to double click GEM, you will get an error! +Notice that last word is a capital Gem. If you get a "can't find gem_setup" +error, then that is the problem. Look in the GEM FAQ for trouble shooting +suggestions. +

If you don't see a startup message from GEM, then something went wrong. +

    Most people use the command shell to start Pd.  +It is difficult to configure Pd to run from double-clicking on the icon. +

    Also, you might need to add pd/bin to your PATH environment +variable. +

+

+How do I run GEM on linux?

+   To use GEM type something like: +

/usr/people/mdanks/pd/bin/pd -lib /usr/people/mdanks/pd/gem/Gem +

(where /usr/people/mdanks is the path to the pd directory). Check out +the README for Pd to see examples of the -lib flag. If you just try to +"run" GEM, you will get an error! Notice that last word is a capital Gem. +If you get a "can't find gem_setup" error, then that is the problem. Look +in the GEM FAQ +
for trouble shooting suggestions. +

If you don't see startup messages from GEM, then something went wrong. +
Also, you might need to add pd/bin to your PATH environment variable. +

+

+How do I run GEM on macOS-X?

+   To use GEM type something like: +/usr/local/bin/pd -lib /Users/zmoelnig/pd/Gem +

(where /usr/local/bin/pd is the path to the pd directory and +/Users/zmoelnig/pd is the path where the Gem.pd_darwin resides). +Check out the README for Pd to see examples of the -lib flag. If you just try to +"run" GEM, you will get an error! Notice that last word is a capital Gem. +If you get a "can't find gem_setup" error, then that is the problem. Look +in the GEM FAQ +
for trouble shooting suggestions. +

If you don't see startup messages from GEM, then something went wrong. +
Also, you might need to add pd/bin to your PATH environment variable. +

+

+Why doesn't GEM run?

+    Notice that the -lib flag always requires Unix styles +slashes, even if you are on Windows.  This means that you need to +do -lib /gem/Gem, not -lib \gem\Gem +

    You may also want to use the -nosound flag.  +For instance, my PC has problems using audio (it leaks memory), so I just +turn off the audio part of Pd.  However, other people can't get GEM +to work if the -nosound is used (on Win95).  You can also try the +-dac or -adc flags (for digital-analog-conversion only and analog-digital-conversion +only). +

[return] +
  + + diff --git a/Gem/manual/Gloss.html b/Gem/manual/Gloss.html index 1d42709..fcf35c9 100644 --- a/Gem/manual/Gloss.html +++ b/Gem/manual/Gloss.html @@ -1,41 +1,41 @@ - - - - - - - Glossary/Index - - - -

-

-Glossary

-Alpha - The amount of opacity.  An alpha equal -to 1.0 means completely opaque.  An alpha equal to 0.0 means completely -transparent. -

Controls - GEM objects which access the low levels -of GEM, such as window managers. -

Geos - GEM objects which have a shape of some kind, -such as a cube. -

Manips - GEM objects which manipulate the geos. -

MarkEx - A collection of objects which help with -data manipulation, especially for usage in GEM. -

Nongeos - GEM objects which do not have an explicit -shape, yet affect the rendering in some way. -

OpenGL - A -graphics API which exists on many different platforms.
-Gem can also be used as a wrapper for openGL, allowing to program openGL without having to -compile -

Particles - GEM objects which involve the particle -system. -

Pd -- A visual programming language for audio processing.  This is the -host application for GEM. -

Pixes - Image processing objects in GEM -

Texture mapping - Applying an image to a geometric -object. -

[return] -
  - - + + + + + + + Glossary/Index + + + +

+

+Glossary

+Alpha - The amount of opacity.  An alpha equal +to 1.0 means completely opaque.  An alpha equal to 0.0 means completely +transparent. +

Controls - GEM objects which access the low levels +of GEM, such as window managers. +

Geos - GEM objects which have a shape of some kind, +such as a cube. +

Manips - GEM objects which manipulate the geos. +

MarkEx - A collection of objects which help with +data manipulation, especially for usage in GEM. +

Nongeos - GEM objects which do not have an explicit +shape, yet affect the rendering in some way. +

OpenGL - A +graphics API which exists on many different platforms.
+Gem can also be used as a wrapper for openGL, allowing to program openGL without having to +compile +

Particles - GEM objects which involve the particle +system. +

Pd +- A visual programming language for audio processing.  This is the +host application for GEM. +

Pixes - Image processing objects in GEM +

Texture mapping - Applying an image to a geometric +object. +

[return] +
  + + diff --git a/Gem/manual/Images.html b/Gem/manual/Images.html index 182d153..cc6eb99 100644 --- a/Gem/manual/Images.html +++ b/Gem/manual/Images.html @@ -1,112 +1,112 @@ - - - - - - - Images - - - -

-

-Dealing with Images

-Images are files which are loaded into GEM. The images can be manipulated, -applied to objects, and used in any number of different ways. In -this section, you will load in an image and display it on the screen. -This section will not apply the images to a geo; that occurs in -the next part of the manual. -

The pix objects are GEM objects which deal with pixels. -They do everything from loading in images to applying filters to the data. -The objects in this section of the manual only load in pix data from outside -sources. How you actually display the image is up to you. The -most common usages are with [pix_draw] and [pix_texture]. -

Warning: [pix_draw] is almost always slower than [pix_texture]. -Because [pix_draw] is easier to use than [pix_texture], it is -used in these examples. However, in any real usage or piece, [pix_texture] -should always be used instead. [pix_draw] is slow because PC -graphics accelerators do not provide hardware acceleration for that functionality. -[pix_texture] does have hardware acceleration and will be much faster. -

[pix_image] - load in an image -
[pix_multiimage] - load in multiple images -
[pix_movie] - load in a movie file -
[pix_video] - use a real time video source -

-

-[pix_image]

-[pix_image] is used to load in images. Images can be in a variety -of different formats, including TIFF, JPEG, and SGI formats. The -patch gem_pix/gemImage.pd is the simplest use of the [pix_image] object. -In this patch, the [pix_image] object loads in the file dancer.JPG. -
-

- -

As is the case with every GEM chain, this patch starts with the [gemhead] -object. The next object is [pix_image], which actually loads -the image. [pix_image] makes the file dancer.JPG the current -pixel data, which will be used in all subsequent operations in the chain. -The [translateXYZ] object is used to move the image around. -Finally, the [pix_draw] object renders the pixel data to the screen. -

The patch mentions that changing the Z in [translateXYZ] does not -change the size of the image, as would occur with a geo object like -[square]. -This is because [pix_draw] simply draws the pixel at the current raster -position, without any transformation. If you want to change the size -on the fly and rotate the image, you need to texture map the pix, which -is described in the next section. -

-

-[pix_multiimage]

-The [pix_image] object only loads in one image at time. If you -try to change the image rapidly while the patch is running, you will notice -a lag every time it has to load in a new file. To avoid this lag, -there is another object called [pix_multiimage]. If you look -at patch gem_pix/gemMultiImage.pd, you will see this object in action. -

Basically, the * in the file name is replaced by the number that you -pass in. This allows you to play sequences of images with random -access. The one downside is that every image is loaded into memory -when the object is created, so you need to have a lot of RAM to use it. -

-

[pix_movie]/[pix_film]

-These objects are used to read movie-files from disk (or if supported from the internet). - -The movie is streamed off of disk, -using whatever decompression libraries are installed on your computer. -On Windows AVI movies seem to work fine, -but there is also a prelaminary support for quicktimes (and mpeg). -On macOS-X all formats supported by the system (basically: quicktime) should work ok. -On linux the support is highly depending on what libraries are installed during compile time. -There is support for MPEG (with libmpeg1 or (preferred:) libmpeg3), -quicktime (either libquicktime or quicktime4linux; -most likely you will not be able to decode quicktimes with proprietary codecs) -and AVI (with libavifile which is able to utilize windows-dlls for (proprietary) codecs). -There is also some rudimentary support for FFMPEG. - -The right inlet of [pix_movie] -accepts a number to specify the frame to display. Look at 04.pix/04.movie.pd -for an image. -

A key fact of [pix_movie] is that it immediately sends the movie -data to OpenGL as a texture map. This means that you do not need -the [pix_texture] object in your chain. This also means that -you cannot process the movie data with pix objects. The main reason -for this is that it removes the need for a copy of all of the movie data. -If you want to apply some image-processing, you will have to use [pix_film] -(and [pix_texture] for texture-mapping). -

Some of the geos will not texture map the [pix_movie] data correctly. -Cone and sphere do not use texture coordinates when they are provided, -so when you display a movie on one of these objects, you will have a black -region (unless your movie size is a power of two...however, most movies -are 320x160 pixels or something). This will be fixed in a future -release. -

-

-pix_video

-The "image" can come from the [pix_video] object. -This means that you can use a real-time video source and display it on the screen. -

You can play with [pix_video] with the patches in 04.video/. -The patches are explained in more depth in the advanced section of the GEM manual. -

-

[return] -
- - + + + + + + + Images + + + +

+

+Dealing with Images

+Images are files which are loaded into GEM. The images can be manipulated, +applied to objects, and used in any number of different ways. In +this section, you will load in an image and display it on the screen. +This section will not apply the images to a geo; that occurs in +the next part of the manual. +

The pix objects are GEM objects which deal with pixels. +They do everything from loading in images to applying filters to the data. +The objects in this section of the manual only load in pix data from outside +sources. How you actually display the image is up to you. The +most common usages are with [pix_draw] and [pix_texture]. +

Warning: [pix_draw] is almost always slower than [pix_texture]. +Because [pix_draw] is easier to use than [pix_texture], it is +used in these examples. However, in any real usage or piece, [pix_texture] +should always be used instead. [pix_draw] is slow because PC +graphics accelerators do not provide hardware acceleration for that functionality. +[pix_texture] does have hardware acceleration and will be much faster. +

[pix_image] - load in an image +
[pix_multiimage] - load in multiple images +
[pix_movie] - load in a movie file +
[pix_video] - use a real time video source +

+

+[pix_image]

+[pix_image] is used to load in images. Images can be in a variety +of different formats, including TIFF, JPEG, and SGI formats. The +patch gem_pix/gemImage.pd is the simplest use of the [pix_image] object. +In this patch, the [pix_image] object loads in the file dancer.JPG. +
+

+ +

As is the case with every GEM chain, this patch starts with the [gemhead] +object. The next object is [pix_image], which actually loads +the image. [pix_image] makes the file dancer.JPG the current +pixel data, which will be used in all subsequent operations in the chain. +The [translateXYZ] object is used to move the image around. +Finally, the [pix_draw] object renders the pixel data to the screen. +

The patch mentions that changing the Z in [translateXYZ] does not +change the size of the image, as would occur with a geo object like +[square]. +This is because [pix_draw] simply draws the pixel at the current raster +position, without any transformation. If you want to change the size +on the fly and rotate the image, you need to texture map the pix, which +is described in the next section. +

+

+[pix_multiimage]

+The [pix_image] object only loads in one image at time. If you +try to change the image rapidly while the patch is running, you will notice +a lag every time it has to load in a new file. To avoid this lag, +there is another object called [pix_multiimage]. If you look +at patch gem_pix/gemMultiImage.pd, you will see this object in action. +

Basically, the * in the file name is replaced by the number that you +pass in. This allows you to play sequences of images with random +access. The one downside is that every image is loaded into memory +when the object is created, so you need to have a lot of RAM to use it. +

+

[pix_movie]/[pix_film]

+These objects are used to read movie-files from disk (or if supported from the internet). + +The movie is streamed off of disk, +using whatever decompression libraries are installed on your computer. +On Windows AVI movies seem to work fine, +but there is also a prelaminary support for quicktimes (and mpeg). +On macOS-X all formats supported by the system (basically: quicktime) should work ok. +On linux the support is highly depending on what libraries are installed during compile time. +There is support for MPEG (with libmpeg1 or (preferred:) libmpeg3), +quicktime (either libquicktime or quicktime4linux; +most likely you will not be able to decode quicktimes with proprietary codecs) +and AVI (with libavifile which is able to utilize windows-dlls for (proprietary) codecs). +There is also some rudimentary support for FFMPEG. + +The right inlet of [pix_movie] +accepts a number to specify the frame to display. Look at 04.pix/04.movie.pd +for an image. +

A key fact of [pix_movie] is that it immediately sends the movie +data to OpenGL as a texture map. This means that you do not need +the [pix_texture] object in your chain. This also means that +you cannot process the movie data with pix objects. The main reason +for this is that it removes the need for a copy of all of the movie data. +If you want to apply some image-processing, you will have to use [pix_film] +(and [pix_texture] for texture-mapping). +

Some of the geos will not texture map the [pix_movie] data correctly. +Cone and sphere do not use texture coordinates when they are provided, +so when you display a movie on one of these objects, you will have a black +region (unless your movie size is a power of two...however, most movies +are 320x160 pixels or something). This will be fixed in a future +release. +

+

+pix_video

+The "image" can come from the [pix_video] object. +This means that you can use a real-time video source and display it on the screen. +

You can play with [pix_video] with the patches in 04.video/. +The patches are explained in more depth in the advanced section of the GEM manual. +

+

[return] +
+ + diff --git a/Gem/manual/Input.html b/Gem/manual/Input.html index fe089d0..3b027e1 100644 --- a/Gem/manual/Input.html +++ b/Gem/manual/Input.html @@ -1,19 +1,19 @@ - - - - - - - Input devices - - - -

-

-Input devices

- -


Nothing here yet -

[return] -
  - - + + + + + + + Input devices + + + +

+

+Input devices

+ +


Nothing here yet +

[return] +
  + + diff --git a/Gem/manual/Intro.html b/Gem/manual/Intro.html index 23e8d23..165ad27 100644 --- a/Gem/manual/Intro.html +++ b/Gem/manual/Intro.html @@ -1,62 +1,62 @@ - - - - - - - GEM - Introduction - - - -

-

-Introduction

-GEM is the Graphics Environment for Multimedia. It was originally written by -Mark Danks to generate real-time computer graphics, -especially for audio-visual compositions. -Because GEM is a visual programming environment, users do not need any experience -in traditional computer languages. -

GEM is a collection of externals which allow the user to create -OpenGL -graphics within Pd, -a program for real-time audio processing by Miller -Puckette (of Max fame). -

There are many different shapes and objects, including polygonal graphics, -lighting, texture mapping, image processing, and camera motion. All of -this is possible in real-time without any previous programming experience. -Because GEM is an add-on library for Pd, -users can combine audio and graphics, controlling one medium from another. -

GEM is supported in part by a grant from the Intel -Research Council for the The Global Visual -Music project of Vibeke -Sorensen, Miller Puckette -and Rand Steiger. -

An important thing to remember is that GEM is NOT an application.  -It is a library that Pd loads at run-time.  Make sure that you see -the section on using GEM with Pd.  This -manual assumes that you have Pd working correctly and can load up patches -already.  If you do not have that working yet, look at the Pd manual -and the GEM FAQ.  Also, it is assumed that you have a basic understanding -of how to use Pd and the idea behind the data flow model.  In other -words, if I ask you to pass a message with 3 floats into an object, you -would know what I mean. -

The system requirements vary depending on your system and what you are -trying to do.  In general, you should have the most powerful computer -available and the best graphics accelerator on the market.  In reality, -people have been doing some amazing work with a Pentium II and an nVidia -Riva TNT or 3Dfx Voodoo2 card.  -If you are on an SGI, then everything from an O2 up seems to be okay.  -The biggest requirement is that you have some kind of OpenGL graphics accelerator.  -This means that a Matrox Millennium II will not run very quickly. -

The other factor is what you are trying to do.  Pushing real-time -video around requires a fast bus, which really only exists on SGIs.  -Doing thousands of texture mapped polygons is great on a PC...if it is -a constant texture.  There are many issues which mean that there is -no one answer to "Is this system good enough?".  In general, you will -have to try and see. -

GEM is now maintained by IOhannes m zmölnig. -So any bug-reports and donations should go to him instead of Mark... -

[return] -
  - - + + + + + + + GEM - Introduction + + + +

+

+Introduction

+GEM is the Graphics Environment for Multimedia. It was originally written by +Mark Danks to generate real-time computer graphics, +especially for audio-visual compositions. +Because GEM is a visual programming environment, users do not need any experience +in traditional computer languages. +

GEM is a collection of externals which allow the user to create +OpenGL +graphics within Pd, +a program for real-time audio processing by Miller +Puckette (of Max fame). +

There are many different shapes and objects, including polygonal graphics, +lighting, texture mapping, image processing, and camera motion. All of +this is possible in real-time without any previous programming experience. +Because GEM is an add-on library for Pd, +users can combine audio and graphics, controlling one medium from another. +

GEM is supported in part by a grant from the Intel +Research Council for the The Global Visual +Music project of Vibeke +Sorensen, Miller Puckette +and Rand Steiger. +

An important thing to remember is that GEM is NOT an application.  +It is a library that Pd loads at run-time.  Make sure that you see +the section on using GEM with Pd.  This +manual assumes that you have Pd working correctly and can load up patches +already.  If you do not have that working yet, look at the Pd manual +and the GEM FAQ.  Also, it is assumed that you have a basic understanding +of how to use Pd and the idea behind the data flow model.  In other +words, if I ask you to pass a message with 3 floats into an object, you +would know what I mean. +

The system requirements vary depending on your system and what you are +trying to do.  In general, you should have the most powerful computer +available and the best graphics accelerator on the market.  In reality, +people have been doing some amazing work with a Pentium II and an nVidia +Riva TNT or 3Dfx Voodoo2 card.  +If you are on an SGI, then everything from an O2 up seems to be okay.  +The biggest requirement is that you have some kind of OpenGL graphics accelerator.  +This means that a Matrox Millennium II will not run very quickly. +

The other factor is what you are trying to do.  Pushing real-time +video around requires a fast bus, which really only exists on SGIs.  +Doing thousands of texture mapped polygons is great on a PC...if it is +a constant texture.  There are many issues which mean that there is +no one answer to "Is this system good enough?".  In general, you will +have to try and see. +

GEM is now maintained by IOhannes m zmölnig. +So any bug-reports and donations should go to him instead of Mark... +

[return] +
  + + diff --git a/Gem/manual/Lighting.html b/Gem/manual/Lighting.html index dcff171..5c30fb9 100644 --- a/Gem/manual/Lighting.html +++ b/Gem/manual/Lighting.html @@ -1,107 +1,107 @@ - - - - - - - Lighting - - - -

-

-Lighting

-Lighting is an important factor is how we perceive the quality of an image. -For example, without lighting and shading, a sphere would just look like -a circle. GEM provides two types of lights, a local light and world -light. -

OpenGL uses a vertex lighting model. This means that for every -vertex in the scene, the influence of the light is calculated. The -color for the polygon is then modified by the light value of all of the -vertices. This generally produces a very smooth effect, but you will -occasionally run into rendering artifacts, especially if you use local -lights. For example, imagine you have a local light close a large -square. The corners of the square are far away from the light, so -none of them will be lit very brightly, even though the light itself is -very close to the surface of the square. -

It is important to realize that lighting is an expensive operation to -use. The number of polygons that you will be able to render will -be much lower if lighting is turned on. As usual, the complexity -of the scene and the speed of your computer and graphics card will greatly -affect your frame rate. -

GEM has only a maximum of 8 lights at one time. If you try to -create more lights than that, you will get an error message. -

Activate lighting -
[world_light] - A directional light -
[light] - A point light in the world -
Moving lights -

-

-Activate lighting

-Lighting is activated by sending a message to [gemwin]. If you -send "lighting 1", then lighting will be turned on. If you send "lighting -0", then lighting will be turned off. The lighting state is kept -even if you destroy the gemwin. This means that if you close a patch -and open another one, the lighting will still be the same. -

Individual lights can be turned on and off by sending a 1 or 0 to the -left inlet of the light object itself. -

-

-[world_light]

-A [world_light] is a light which exists infintely far away. -This reduces the computation needed, so your patch can run faster, but -it means that all of the light rays are parallel. The [world_light] -is good for objects like the sun and other lighting affects. This -means that translating a [world_light] has no effect, although rotation -does. -

The following patch is 03.lighting/01.world_light.pd. -

-

- -

The [world_light] has one extra inlet. The right inlet accepts -three floats to set the color of the light. A [color] object -would do nothing. In this case, the light is being set to purple. -The [world_light] also accepts a debug message. The debug message -turns on and off a graphical representation of the light in the scene. -The [world_light] looks like a cone. The cone shows the direction -that the light is coming from. Remember that the actual position -of the light does not matter, so geos behind the cone will still be lit. -It is the direction of the light that matters. This is why you can -rotate the light. -

-

-[light]

-A [light] object generates a point light in the world. Because -the light is local to the scene, there is more math to generate the effect -of the light on the vertices. However, unlike a [world_light], -you can translate the [light] object. -

Below is the patch 03.lighting/02.light.pd. -

-

- -

The [light] object has a right inlet for the color, just light -the [world_light] object. As this patch shows, the light can -be moved around the scene with both [rotate] and [translate] -objects. If you were to set the translate X value equal to 1.0, then -the sphere would not be lit at all. This is because the light would -be inside of the sphere. When you turn on the debug representation, -it is a sphere with its origin where the light it. The [light] -object does not have any size. It exists as a point source. -

-

-Moving lights

-The patch 03.lighting/03.controlLights.pd allows you to move a [light] -and [world_light] object in the same scene to see the difference between -the two objects. -

The patch 03.lighting/04.moveSpheres.pd is an example which moves -two spheres around the world. Turn on and off the individual lights -for a demonstration of a local versus infinite light. -

The patch 03.lighting/05.materials.pd uses the material objects to -selectively control the color of the object. Notice that the diffuse object -sets the "overall" color, while the specular objects sets the bright reflective -area where the light directly shines. -

-

[return] -
- - + + + + + + + Lighting + + + +

+

+Lighting

+Lighting is an important factor is how we perceive the quality of an image. +For example, without lighting and shading, a sphere would just look like +a circle. GEM provides two types of lights, a local light and world +light. +

OpenGL uses a vertex lighting model. This means that for every +vertex in the scene, the influence of the light is calculated. The +color for the polygon is then modified by the light value of all of the +vertices. This generally produces a very smooth effect, but you will +occasionally run into rendering artifacts, especially if you use local +lights. For example, imagine you have a local light close a large +square. The corners of the square are far away from the light, so +none of them will be lit very brightly, even though the light itself is +very close to the surface of the square. +

It is important to realize that lighting is an expensive operation to +use. The number of polygons that you will be able to render will +be much lower if lighting is turned on. As usual, the complexity +of the scene and the speed of your computer and graphics card will greatly +affect your frame rate. +

GEM has only a maximum of 8 lights at one time. If you try to +create more lights than that, you will get an error message. +

Activate lighting +
[world_light] - A directional light +
[light] - A point light in the world +
Moving lights +

+

+Activate lighting

+Lighting is activated by sending a message to [gemwin]. If you +send "lighting 1", then lighting will be turned on. If you send "lighting +0", then lighting will be turned off. The lighting state is kept +even if you destroy the gemwin. This means that if you close a patch +and open another one, the lighting will still be the same. +

Individual lights can be turned on and off by sending a 1 or 0 to the +left inlet of the light object itself. +

+

+[world_light]

+A [world_light] is a light which exists infintely far away. +This reduces the computation needed, so your patch can run faster, but +it means that all of the light rays are parallel. The [world_light] +is good for objects like the sun and other lighting affects. This +means that translating a [world_light] has no effect, although rotation +does. +

The following patch is 03.lighting/01.world_light.pd. +

+

+ +

The [world_light] has one extra inlet. The right inlet accepts +three floats to set the color of the light. A [color] object +would do nothing. In this case, the light is being set to purple. +The [world_light] also accepts a debug message. The debug message +turns on and off a graphical representation of the light in the scene. +The [world_light] looks like a cone. The cone shows the direction +that the light is coming from. Remember that the actual position +of the light does not matter, so geos behind the cone will still be lit. +It is the direction of the light that matters. This is why you can +rotate the light. +

+

+[light]

+A [light] object generates a point light in the world. Because +the light is local to the scene, there is more math to generate the effect +of the light on the vertices. However, unlike a [world_light], +you can translate the [light] object. +

Below is the patch 03.lighting/02.light.pd. +

+

+ +

The [light] object has a right inlet for the color, just light +the [world_light] object. As this patch shows, the light can +be moved around the scene with both [rotate] and [translate] +objects. If you were to set the translate X value equal to 1.0, then +the sphere would not be lit at all. This is because the light would +be inside of the sphere. When you turn on the debug representation, +it is a sphere with its origin where the light it. The [light] +object does not have any size. It exists as a point source. +

+

+Moving lights

+The patch 03.lighting/03.controlLights.pd allows you to move a [light] +and [world_light] object in the same scene to see the difference between +the two objects. +

The patch 03.lighting/04.moveSpheres.pd is an example which moves +two spheres around the world. Turn on and off the individual lights +for a demonstration of a local versus infinite light. +

The patch 03.lighting/05.materials.pd uses the material objects to +selectively control the color of the object. Notice that the diffuse object +sets the "overall" color, while the specular objects sets the bright reflective +area where the light directly shines. +

+

[return] +
+ + diff --git a/Gem/manual/ListObjects.html b/Gem/manual/ListObjects.html index 2708993..da6ab37 100644 --- a/Gem/manual/ListObjects.html +++ b/Gem/manual/ListObjects.html @@ -1,231 +1,231 @@ - - - - - - - List of GEM objects - - - -

-

-List of GEM objects

-Controls -
Manipulators -
Geos -
Particles -
Nongeos -
Pixes -
TV -
MarkEx -

-


Controls -
gemhead - the start of rendering chain -
gemwin - the window manager -
gemmouse - outputs the mouse position and buttons in the GEM window -
gemkeyboard - outputs the keycode of a key pressed when you are in the GEM window (there might be different keycodes in Windows/Linux) -
gemkeyname - outputs a symbolic description of a key pressed when you are in the GEM window (there might be different symbols in Windows/Linux) -
gemorb - outputs the position, rotation, and buttons for a Space Orb -
gemtablet - outputs the pen position, pressure, and buttons in the -GEM window -

-


-
Manipulators -
accumrotate - accumulate a rotation -
alpha - enable/disable alpha blending -
ambient - set the ambient color with a vector -
ambientRGB - set the ambient color with 3 discrete values -
camera - -
color - set the color with a vector -
colorRGB - set the color with 3 discrete values -
depth - enable/disable depth testing -
diffuse - set the diffuse color with a vector -
diffuseRGB - set the diffuse color with 3 discrete values -
emission - set the emissive color with a vector -
emissionRGB - set the emissive color with 3 discrete values -
linear_path - generate a path from an array of points -
ortho - change the view to orthogonal, with the viewport the size of -the window -
polygon_smooth - turn on anti-aliasing for the objects below -
rotate - rotate with an angle and vector -
rotateXYZ - rotate with 3 discrete values -
scale - scale with a vector -
scaleXYZ - scale with 3 discrete values -
separator - push the OpenGL state for the rest of the chain and pop -when done -
shininess - set the shininess of an object -
specular - set the specular color with a vector -
specularRGB - set the specular color with 3 discrete values -
spline_path - generate a spline from an array of knots -
translate - translate with a vector -
translateXYZ - translate with 3 discrete values - -

Geos -
circle - render a circle -
colorSquare - render a colored square (evtl. with color gradients) -
cone - render a cone -
cube - render a cube -
cuboid - render a box -
curve - render a Bezier curve -
curve3d - render a surface -
cylinder - render a cylinder -
disk - render a disk -
imageVert - make pixel colors to a height field map -
model - render an Alias|Wavefront model -
multimodel - render a series of Alias|Wavefront models, render by number -
newWave - render a wave (that is evolving over time) -
polygon - render a polygon -
primTri - a triangle primitive -
rectangle - render a rectangle -
ripple - a rectangle with distorted (over time) texture-coordinates -
rubber - a grid where you can move one of the grid-points -
slideSquare - render a number of sliding squares -
sphere - render a sphere -
square - render a square -
teapot - render a teapot -
text2d - render 2-D text (a bitmap) -
text3d - render 3-D text (polygonal) -
textextruded - render an extruded 3D-text -
textoutline - render outlined text (polygonal) -
triangle - render a triangle -

Particles -
part_head - The start of a particle group -
part_color - Set the range of colors for the new particles -
part_damp - set the damping for particles -
part_draw - Apply the actions and render the particles.  Accepts -a message "draw line" or "draw point" to change the drawing style. -
part_follow - Particles will follow each other like a snake -
part_gravity - Have the particles accelerate in a direction -
part_info - get the information (position, color, size,...) of each particle -
part_killold - Remove particles past a certain age -
part_killslow - Remove particles below a certain speed -
part_orbitpoint - Orbit the particles around a specified point -
part_render - render the remaining gem-tree as particles. -
part_size - Set the size of new particles -
part_source - Generate particles -
part_targetcolor - Change color of the particles toward the specified -color -
part_targetsize - Change size of the particles toward the specified -size -
part_velocity - Set the velocity domain -(distribution like CONE and the appropriate arguments) -
part_vertex - emit a single particle - -

Nongeos -
light - make a point light -
world_light - make a light at infinity -

Pixes -
pix_2grey - convert rgb pixels to grey (still an RGBA image) -
pix_a_2grey - convert rgb pixels to grey based on alpha channel -
pix_add - add two pixes together -
pix_aging - super8-like aging effect -
pix_alpha - set the alpha value of a pix -
pix_background - let through only pixels that differ from a static "background" image -
pix_backlight - a backlight photo effect -
pix_biquad - 2p2z-filter for subsequent images -
pix_bitmask - apply a bitmask to a pix -
pix_blob - get center of gravity -
pix_buf - buffer a pix -
pix_buffer - storage room for pixes (like [table] for floats) -
pix_buffer_read/pix_buffer_write - put/get pixes into/from a pix_buffer -
pix_chroma_key - color keying (like "blue-box") -
pix_coloralpha - set the alpha-channel of a pix as a mean-value of the color-components -
pix_colormatrix - recombine the RGBA-channels with matrix-operation -
pix_color - set the color of a pix (leaving alpha alone) -
pix_colorreduce - reduce the number of colors (statistically) -
pix_composite - composite two pixes together -
pix_convolve - convolve a pix with a kernal -
pix_coordinate - set the texture coordinates -
pix_crop - get a sub-image of a pix -
pix_curve - apply color-curves onto a pix -
pix_data - get pixel data information -
pix_delay - frame-wise delay -
pix_diff - get absolute difference of two pixes -
pix_dot - rasterize a pix with big dots -
pix_draw - draw a pix -
pix_dump - dump the pixel-data as a long list of floats -
pix_duotone - reduce the number of colors by thresholding -
pix_film - use a movie file as a pix source for image-processing -
pix_flip - flip the pixels of a pix -
pix_gain - apply a gain to a pix -
pix_grey - convert any pix into greyscale colorspace -
pix_halftone - rasterize a pix like it was printed in a newspaper -
pix_histo - get the histogram of a pix -
pix_hsv2rgb - transform a pix from HSV-colorspace into RGB-colorspace -
pix_image - load in an image file -
pix_imageInPlace - load a series of image files directly into texture-buffer, display by number -
pix_info - get information about the pix (like dimension, colorspace,...) -
pix_invert - invert a pix -
pix_kaleidoscope - as if you were looking at the pix through a kaleidoscope -
pix_levels - level adjustment -
pix_lumaoffset - y-offset pixels depending on their luminance -
pix_mask - mask a pix based on another pix -
pix_metaimage - recompose an image out of smaller versions of itself -
pix_mix - mix to pixes together -
pix_motionblur - motionblur an image -
pix_movie - use a movie file as a pix source and load it immediately into the texture-buffer -
pix_movement - set the alpha-channel with respect to the change between two frames -
pix_multiply - multiply two pixes -
pix_multiimage - load in a series of image files, display by number -
pix_normalize - normalize a pix -
pix_offset - add an offset to a pix (wrapping instead of clipping) -
pix_pix2sig~ - interpret a pix as 4 (RGBA) audio-signals -
pix_posterize - posterization photo effect -
pix_puzzle - shuffle an image -
pix_rds - generate a Random Dot Stereogram out of the image (aka: Magic Eye (tm)) -
pix_rectangle - generate a rectangle in a pix buffer -
pix_refraction - break up an image into coloured "glass-bricks" -
pix_resize - resize a pix to next power of 2 -
pix_rgb2hsv - transform a pix from RGB-colorspace into HSV-colorspace -
pix_rgba - transform a pix of any format into RGBA -
pix_roll - (sc)roll through an image (wrapping) -
pix_rtx - swap time-axis and x-axis -
pix_scanline - take every nth line of the original image -
pix_set - set the pixel-data with a long list of floats -
pix_sig2pix~ - interpret 4 audio-signals as (RGBA) image-data -
pix_snap - capture the render window into a pix -
pix_snap2tex - capture the render window directly as a texture -
pix_subtract - subtract two pixes -
pix_tIIR - time-base Infinite-Impulse-Response filter (for motion-bluring,...) with settable number of poles/zeros -
pix_takealpha - take the alpha channel of one pix and put it into another pix -
pix_texture - use a pix as a texture map -
pix_threshold - apply a threshold to a pix -
pix_video - use a video camera as a pix source -
pix_write - capture the render window to disk -
pix_zoom - zoom into a pix (using OpenGL) - -

openGL -there are more than 250 objects that -form a complete wrapper around the openGL set of functions -(as defined in the openGL-1.2 standard).
-each openGL-function is prefixed with "GEM", eg: -[GEMglVertex3f] is wrapped around glVertex3f. - -

MarkEx -
alternate - alternate between two outlets -
average - average a sequence of numbers -
change - only output on change -
counter - count bangs -
invert - non-zero numbers to zero, zero to 1 -
multiselect/multisel - a select object which accepts a list in the -right inlet -
oneshot - send a bang, then block until reset -
randomF / randF - floating point random numbers -
strcat - string concatentation -
tripleLine - do a line with three numbers -
tripleRand - random with three numbers -
vector+ / v+ - add a scalar to a vector -
vector- / v- - subtract a scalar from a vector -
vector* / v* - multiply a vector by a scalar -
vector/ / v/ - divide a vector by a scalar -
vectorpack / vpack - attach a scalar to the end of a vector -
rgb2hsv - convert a list of three floats from RGB to an HSV value -
hsv2rgb - convert a list of three floats from HSV to an RGB value -
abs~ - absolute value of a signal -
reson~ - resonant filter -

[return] -
  -
  - - + + + + + + + List of GEM objects + + + +

+

+List of GEM objects

+Controls +
Manipulators +
Geos +
Particles +
Nongeos +
Pixes +
TV +
MarkEx +

+


Controls +
gemhead - the start of rendering chain +
gemwin - the window manager +
gemmouse - outputs the mouse position and buttons in the GEM window +
gemkeyboard - outputs the keycode of a key pressed when you are in the GEM window (there might be different keycodes in Windows/Linux) +
gemkeyname - outputs a symbolic description of a key pressed when you are in the GEM window (there might be different symbols in Windows/Linux) +
gemorb - outputs the position, rotation, and buttons for a Space Orb +
gemtablet - outputs the pen position, pressure, and buttons in the +GEM window +

+


+
Manipulators +
accumrotate - accumulate a rotation +
alpha - enable/disable alpha blending +
ambient - set the ambient color with a vector +
ambientRGB - set the ambient color with 3 discrete values +
camera - +
color - set the color with a vector +
colorRGB - set the color with 3 discrete values +
depth - enable/disable depth testing +
diffuse - set the diffuse color with a vector +
diffuseRGB - set the diffuse color with 3 discrete values +
emission - set the emissive color with a vector +
emissionRGB - set the emissive color with 3 discrete values +
linear_path - generate a path from an array of points +
ortho - change the view to orthogonal, with the viewport the size of +the window +
polygon_smooth - turn on anti-aliasing for the objects below +
rotate - rotate with an angle and vector +
rotateXYZ - rotate with 3 discrete values +
scale - scale with a vector +
scaleXYZ - scale with 3 discrete values +
separator - push the OpenGL state for the rest of the chain and pop +when done +
shininess - set the shininess of an object +
specular - set the specular color with a vector +
specularRGB - set the specular color with 3 discrete values +
spline_path - generate a spline from an array of knots +
translate - translate with a vector +
translateXYZ - translate with 3 discrete values + +

Geos +
circle - render a circle +
colorSquare - render a colored square (evtl. with color gradients) +
cone - render a cone +
cube - render a cube +
cuboid - render a box +
curve - render a Bezier curve +
curve3d - render a surface +
cylinder - render a cylinder +
disk - render a disk +
imageVert - make pixel colors to a height field map +
model - render an Alias|Wavefront model +
multimodel - render a series of Alias|Wavefront models, render by number +
newWave - render a wave (that is evolving over time) +
polygon - render a polygon +
primTri - a triangle primitive +
rectangle - render a rectangle +
ripple - a rectangle with distorted (over time) texture-coordinates +
rubber - a grid where you can move one of the grid-points +
slideSquare - render a number of sliding squares +
sphere - render a sphere +
square - render a square +
teapot - render a teapot +
text2d - render 2-D text (a bitmap) +
text3d - render 3-D text (polygonal) +
textextruded - render an extruded 3D-text +
textoutline - render outlined text (polygonal) +
triangle - render a triangle +

Particles +
part_head - The start of a particle group +
part_color - Set the range of colors for the new particles +
part_damp - set the damping for particles +
part_draw - Apply the actions and render the particles.  Accepts +a message "draw line" or "draw point" to change the drawing style. +
part_follow - Particles will follow each other like a snake +
part_gravity - Have the particles accelerate in a direction +
part_info - get the information (position, color, size,...) of each particle +
part_killold - Remove particles past a certain age +
part_killslow - Remove particles below a certain speed +
part_orbitpoint - Orbit the particles around a specified point +
part_render - render the remaining gem-tree as particles. +
part_size - Set the size of new particles +
part_source - Generate particles +
part_targetcolor - Change color of the particles toward the specified +color +
part_targetsize - Change size of the particles toward the specified +size +
part_velocity - Set the velocity domain +(distribution like CONE and the appropriate arguments) +
part_vertex - emit a single particle + +

Nongeos +
light - make a point light +
world_light - make a light at infinity +

Pixes +
pix_2grey - convert rgb pixels to grey (still an RGBA image) +
pix_a_2grey - convert rgb pixels to grey based on alpha channel +
pix_add - add two pixes together +
pix_aging - super8-like aging effect +
pix_alpha - set the alpha value of a pix +
pix_background - let through only pixels that differ from a static "background" image +
pix_backlight - a backlight photo effect +
pix_biquad - 2p2z-filter for subsequent images +
pix_bitmask - apply a bitmask to a pix +
pix_blob - get center of gravity +
pix_buf - buffer a pix +
pix_buffer - storage room for pixes (like [table] for floats) +
pix_buffer_read/pix_buffer_write - put/get pixes into/from a pix_buffer +
pix_chroma_key - color keying (like "blue-box") +
pix_coloralpha - set the alpha-channel of a pix as a mean-value of the color-components +
pix_colormatrix - recombine the RGBA-channels with matrix-operation +
pix_color - set the color of a pix (leaving alpha alone) +
pix_colorreduce - reduce the number of colors (statistically) +
pix_composite - composite two pixes together +
pix_convolve - convolve a pix with a kernal +
pix_coordinate - set the texture coordinates +
pix_crop - get a sub-image of a pix +
pix_curve - apply color-curves onto a pix +
pix_data - get pixel data information +
pix_delay - frame-wise delay +
pix_diff - get absolute difference of two pixes +
pix_dot - rasterize a pix with big dots +
pix_draw - draw a pix +
pix_dump - dump the pixel-data as a long list of floats +
pix_duotone - reduce the number of colors by thresholding +
pix_film - use a movie file as a pix source for image-processing +
pix_flip - flip the pixels of a pix +
pix_gain - apply a gain to a pix +
pix_grey - convert any pix into greyscale colorspace +
pix_halftone - rasterize a pix like it was printed in a newspaper +
pix_histo - get the histogram of a pix +
pix_hsv2rgb - transform a pix from HSV-colorspace into RGB-colorspace +
pix_image - load in an image file +
pix_imageInPlace - load a series of image files directly into texture-buffer, display by number +
pix_info - get information about the pix (like dimension, colorspace,...) +
pix_invert - invert a pix +
pix_kaleidoscope - as if you were looking at the pix through a kaleidoscope +
pix_levels - level adjustment +
pix_lumaoffset - y-offset pixels depending on their luminance +
pix_mask - mask a pix based on another pix +
pix_metaimage - recompose an image out of smaller versions of itself +
pix_mix - mix to pixes together +
pix_motionblur - motionblur an image +
pix_movie - use a movie file as a pix source and load it immediately into the texture-buffer +
pix_movement - set the alpha-channel with respect to the change between two frames +
pix_multiply - multiply two pixes +
pix_multiimage - load in a series of image files, display by number +
pix_normalize - normalize a pix +
pix_offset - add an offset to a pix (wrapping instead of clipping) +
pix_pix2sig~ - interpret a pix as 4 (RGBA) audio-signals +
pix_posterize - posterization photo effect +
pix_puzzle - shuffle an image +
pix_rds - generate a Random Dot Stereogram out of the image (aka: Magic Eye (tm)) +
pix_rectangle - generate a rectangle in a pix buffer +
pix_refraction - break up an image into coloured "glass-bricks" +
pix_resize - resize a pix to next power of 2 +
pix_rgb2hsv - transform a pix from RGB-colorspace into HSV-colorspace +
pix_rgba - transform a pix of any format into RGBA +
pix_roll - (sc)roll through an image (wrapping) +
pix_rtx - swap time-axis and x-axis +
pix_scanline - take every nth line of the original image +
pix_set - set the pixel-data with a long list of floats +
pix_sig2pix~ - interpret 4 audio-signals as (RGBA) image-data +
pix_snap - capture the render window into a pix +
pix_snap2tex - capture the render window directly as a texture +
pix_subtract - subtract two pixes +
pix_tIIR - time-base Infinite-Impulse-Response filter (for motion-bluring,...) with settable number of poles/zeros +
pix_takealpha - take the alpha channel of one pix and put it into another pix +
pix_texture - use a pix as a texture map +
pix_threshold - apply a threshold to a pix +
pix_video - use a video camera as a pix source +
pix_write - capture the render window to disk +
pix_zoom - zoom into a pix (using OpenGL) + +

openGL +there are more than 250 objects that +form a complete wrapper around the openGL set of functions +(as defined in the openGL-1.2 standard).
+each openGL-function is prefixed with "GEM", eg: +[GEMglVertex3f] is wrapped around glVertex3f. + +

MarkEx +
alternate - alternate between two outlets +
average - average a sequence of numbers +
change - only output on change +
counter - count bangs +
invert - non-zero numbers to zero, zero to 1 +
multiselect/multisel - a select object which accepts a list in the +right inlet +
oneshot - send a bang, then block until reset +
randomF / randF - floating point random numbers +
strcat - string concatentation +
tripleLine - do a line with three numbers +
tripleRand - random with three numbers +
vector+ / v+ - add a scalar to a vector +
vector- / v- - subtract a scalar from a vector +
vector* / v* - multiply a vector by a scalar +
vector/ / v/ - divide a vector by a scalar +
vectorpack / vpack - attach a scalar to the end of a vector +
rgb2hsv - convert a list of three floats from RGB to an HSV value +
hsv2rgb - convert a list of three floats from HSV to an RGB value +
abs~ - absolute value of a signal +
reson~ - resonant filter +

[return] +
  +
  + + diff --git a/Gem/manual/Particles.html b/Gem/manual/Particles.html index 7b8ceb6..4a4f80c 100644 --- a/Gem/manual/Particles.html +++ b/Gem/manual/Particles.html @@ -1,19 +1,19 @@ - - - - - - - Particles - - - -

-

-Particles

- -


Nothing here yet -

[return] -
  - - + + + + + + + Particles + + + +

+

+Particles

+ +


Nothing here yet +

[return] +
  + + diff --git a/Gem/manual/Pixes.html b/Gem/manual/Pixes.html index badf8bc..6b90842 100644 --- a/Gem/manual/Pixes.html +++ b/Gem/manual/Pixes.html @@ -1,105 +1,105 @@ - - - - - - - Pixes (image processing) - - - -

-

-Image processing

-The pix objects are used to do image processing to pixel data. If -you load in an image with [pix_image], then you can change what the -image looks like before rendering it out -

In general, processing images is extremely expensive, so you -probably cannot have that many active pix objects. GEM only reprocesses -images when the source image changes or one of the parameters for a pix -object changes. This means that GEM will only process an image when -something is different, instead of every frame. If you want to do -a lot of processing at start up, but then not change anything once the -patch is running, GEM will only do the computation once.
-Modern CPUs use SIMD (Single Instruction - Multiple Data) (like MMX, SSE2, altivec) -to make pixel-processing more effective (by processing data parallely). -Until now, only the macOS version of Gem has support for SIMD for some pix-objects. -MMX/SSE2 boosts will hopefully come in future Gem-releases. - -

The pix objects are divided into two general groups, those which take -one input, and those which require two input images. For example, -[pix_invert] -will "invert" all of the pixels (if a pixel is white, it will change to -black), while [pix_add] will add two images together. -

Only some of the pix objects are described here. Look in the reference -patches for explanations for the other pix objects. -

[pix_invert] - invert the pixel data -
[pix_add] - add two pixes together -
[pix_mask] - create an alpha mask -
[pix_convolve] - convolve a pix with a kernel -

-

-[pix_invert]

-[pix_invert] inverts the pixels in an image. To use [pix_invert], -simply make sure that you have already loaded an image into the chain. -In the following patch, the fractal image will be inverted. -
-

- -

Here is the difference between the fractal image and the inverted version. -

-

- -

-

-pix_add

-[pix_add] does what you would expect. It adds two images together. -
-

- -

This patch adds the fractal image with a car image. The processed -image will often contain a lot of white pixels, because the data is just -added together. This occurs in the resulting image, shown below. -

-

- -


-

-

-pix_mask

-[pix_mask] is used to create an alpha mask from another image. -In the following example (gem_pix/gemMaskDancer.pd), the fractal image's -alpha channel is replaced by the dancer image. If the [alpha] -object was removed, then you would just see the solid fractal image (because -the alpha channel wouldn't be used). -

In other words, images are composed of a red, a green, a blue, and an -alpha channel. The alpha channel is the transparency of the pixel. - -[pix_mask] only modifies the alpha channel and does not touch the -red, green, or blue data. -

-

- -

The result is this image. -

-

- -

-

-pix_convolve

-[pix_convolve] convolves pix data with a convolution kernel. -Basically, you can get really nice effects if you choose the correct kernel...and -garbage if you choose the wrong one. -

Edge detection is done with a convolution kernel, as is smoothing. -The biggest problem is that convolving an image is about the most expensive -operation that you can do in GEM. -

Look at gem_pix/gemPixConvolve.pd to get an idea of some of the kernels -that you can send to [pix_convolve] and the effects that you can get. -

If you want to learn the math behind convolution, then find any standard -image processing (or audio processing book, this is just 2D convolution). -
-

-

[return] -
- - + + + + + + + Pixes (image processing) + + + +

+

+Image processing

+The pix objects are used to do image processing to pixel data. If +you load in an image with [pix_image], then you can change what the +image looks like before rendering it out +

In general, processing images is extremely expensive, so you +probably cannot have that many active pix objects. GEM only reprocesses +images when the source image changes or one of the parameters for a pix +object changes. This means that GEM will only process an image when +something is different, instead of every frame. If you want to do +a lot of processing at start up, but then not change anything once the +patch is running, GEM will only do the computation once.
+Modern CPUs use SIMD (Single Instruction - Multiple Data) (like MMX, SSE2, altivec) +to make pixel-processing more effective (by processing data parallely). +Until now, only the macOS version of Gem has support for SIMD for some pix-objects. +MMX/SSE2 boosts will hopefully come in future Gem-releases. + +

The pix objects are divided into two general groups, those which take +one input, and those which require two input images. For example, +[pix_invert] +will "invert" all of the pixels (if a pixel is white, it will change to +black), while [pix_add] will add two images together. +

Only some of the pix objects are described here. Look in the reference +patches for explanations for the other pix objects. +

[pix_invert] - invert the pixel data +
[pix_add] - add two pixes together +
[pix_mask] - create an alpha mask +
[pix_convolve] - convolve a pix with a kernel +

+

+[pix_invert]

+[pix_invert] inverts the pixels in an image. To use [pix_invert], +simply make sure that you have already loaded an image into the chain. +In the following patch, the fractal image will be inverted. +
+

+ +

Here is the difference between the fractal image and the inverted version. +

+

+ +

+

+pix_add

+[pix_add] does what you would expect. It adds two images together. +
+

+ +

This patch adds the fractal image with a car image. The processed +image will often contain a lot of white pixels, because the data is just +added together. This occurs in the resulting image, shown below. +

+

+ +


+

+

+pix_mask

+[pix_mask] is used to create an alpha mask from another image. +In the following example (gem_pix/gemMaskDancer.pd), the fractal image's +alpha channel is replaced by the dancer image. If the [alpha] +object was removed, then you would just see the solid fractal image (because +the alpha channel wouldn't be used). +

In other words, images are composed of a red, a green, a blue, and an +alpha channel. The alpha channel is the transparency of the pixel. + +[pix_mask] only modifies the alpha channel and does not touch the +red, green, or blue data. +

+

+ +

The result is this image. +

+

+ +

+

+pix_convolve

+[pix_convolve] convolves pix data with a convolution kernel. +Basically, you can get really nice effects if you choose the correct kernel...and +garbage if you choose the wrong one. +

Edge detection is done with a convolution kernel, as is smoothing. +The biggest problem is that convolving an image is about the most expensive +operation that you can do in GEM. +

Look at gem_pix/gemPixConvolve.pd to get an idea of some of the kernels +that you can send to [pix_convolve] and the effects that you can get. +

If you want to learn the math behind convolution, then find any standard +image processing (or audio processing book, this is just 2D convolution). +
+

+

[return] +
+ + diff --git a/Gem/manual/Texture.html b/Gem/manual/Texture.html index 1de889c..0e35a1d 100644 --- a/Gem/manual/Texture.html +++ b/Gem/manual/Texture.html @@ -1,126 +1,126 @@ - - - - - - - Texture mapping - - - -

-

-Texture Mapping

-Texture mapping is the act of applying -pixel data to a geometric object. In GEM, this is achieved with the -[pix_texture] -object. It is important to understand that the -[pix_texture] -object merely sets the pix as the current texture. It does not do -any rendering! You need to use a geo object which does texture mapping. -All of the basic geo objects can texture map, such as [square] or -[sphere]. -

-

A simple example of texture mapping is the following patch: -

-

- -

This patch can be found at 07.texture/01.texture.pd. Change -the number box connected to the rotate object to see what a texture map -on a cube looks like. -

The [pix_image] object loads in the fractal image file. The -[pix_texture] -object says that the pix data should be used as a texture map. Notice -that this is different than the previous manual section when we used the -[pix_draw] object. The final object in the chain is the [cube] -object. Because we have enabled texture mapping with the [pix_texture] -object, the cube takes the pix data and applies it to the geometry. -

-

Texture mapping can be used with any GEM object. In the previous -manual section, you saw how to load in pix data with a variety of objects, -including [pix_multiimage] and [pix_video]. All of these -objects can be used with the [pix_texture] object. -

Because the pix data is applied to geometry, you can move, rotate, and -scale the image. This is extremely useful on the [square] object. -Instead of doing a one-to-one pixel mapping as occurs with the [pix_draw] -object, you can resize and reshape the image. -

OpenGL originally required that images must have dimensions that are power-of-2, such as 64, 128, or 256. This restriction has been released with recent gfx-cards -(like some radeon/nvidia products). -However, if the width or height of an image is not a power of two, -then the [pix_texture] object will take care of this, -and still render it (depending on you hardware with some tricks). -You can thus texture images of any size, but since this is based on tricking -the texture-coordinates, [pix_coordinate] might not give the wanted result any more. -

-

The example patch 07.texture/02.moveImages.pd is a much more complex -patch which uses alpha blending to create a transparent object, in this -case, the dancer. Make sure to turn on the rotation with the [metro] -object. -

-

People have been asking how textures are handled in GEM. Here -is a long explanation from an email which I wrote. -

Here is how textures are dealt with under OpenGL and hardware -accelerators. This can obviously change in the future, but right -now, I am fairly certain that the info is correct (I make games in my day -job, so I have vested interest in this :-) -

The amount of memory (VRAM) on the card (12mb for Voodoo2, -16mb for TNT, 64mb for GeForce2, etc) is used for both textures (TRAM) -and frame buffer space. If you have a large rendering window, like -1600x1200, it will take up 1600x1200x4x3 in 32-bit mode with double buffering -and a Z buffer (or 23mb). Most people run at TV resolution, like -NTSC, so it takes 640x480x4x3 = 3.7mb All of the space left -is for textures onboard the card (FYI, if you have heard that people are -having problems with the PlayStation2, notice that it only has 4mb of VRAM...not -much onboard texture space, huh? :-) Thankfully it has an extremely -fast DMA bus) -

Sooo, when GEM "creates" a texture, it immediately tries -to send the texture to the card, which uses some of the left over space -in the VRAM. If you had a 640x480 window on a Voodoo2, you have ~8mb -of texture space left over. On a GeForce2, ~60mb. The problem -is what happens if you want more textures than can fit into TRAM. -OpenGL requires that the video drivers deal with the problem, so GEM doesn't -care too much (more about this later). -

In most cases, the drivers cache the textures in main memory -and if a texture is requested for rendering and it isn't resident on the -card, it will download it. If you have AGP, then this is pretty quick, -although none of 3dfx cards really take advantage of this (ie, those cards -are about the same speed as the PCI bus). So depending on the number -of textures, and how complex the scene is, you might be able to display -more textures than you have TRAM. -

One slowdown that can happen with GEM is that it makes a -copy of the image before sending it down the chain of objects. If -you are constantly changing images with a pix_multiimage, this can be a -performance hit, but you can modify the actual pixel data with the pix -objects. The pixels aren't sent to the graphics card until the pix_texture -object is reached. -

GEM tries to help with this with a few objects. pix_imageInPlace -acts much the same as pix_multiimage, but it downloads _every_ image in -the sequence to the card when a download message is recieved. It -also immediately turns on texturing, instead of making a copy (ie, you -don't need a pix_texture object). Much faster, but not as flexible. -pix_movie does much the same thing. It sends the pixel data without -copying it if there is a new frame to display. -

The entire pix system uses a caching system so that the copying -and processing only occurs if something actually changes. For example, -if you had a pix_threshold object, it would only process when rendering -started...and every time that the values actually changed. You can -use pix_buf to isolate parts which don't change from those that do, but -it involves another copy. -

On the Voodoo2, the hardware itself limits textures to 256x256...this -will never change. The newest Voodoo5 boards have a higher texture -size. -

If you load the _exact_ same image (this means the exact -same file/path name), then the pix_image has a cache system which means -that it is only loaded into the -
computers memory once. However, each pix_image still sends -its own copy down to the gfx card. -

You could use a single [pix_image]/[pix_texture] with [separator] -to do this...I have done it a lot in the past. -

The reason that [pix_image] doesn't share the actual texture -data is that you can modify the pixel data with other pix objects...[pix_image] -doesn't actually send the texture data to the gfx card, [pix_texture] does. -

-

[return] -
- - + + + + + + + Texture mapping + + + +

+

+Texture Mapping

+Texture mapping is the act of applying +pixel data to a geometric object. In GEM, this is achieved with the +[pix_texture] +object. It is important to understand that the +[pix_texture] +object merely sets the pix as the current texture. It does not do +any rendering! You need to use a geo object which does texture mapping. +All of the basic geo objects can texture map, such as [square] or +[sphere]. +

+

A simple example of texture mapping is the following patch: +

+

+ +

This patch can be found at 07.texture/01.texture.pd. Change +the number box connected to the rotate object to see what a texture map +on a cube looks like. +

The [pix_image] object loads in the fractal image file. The +[pix_texture] +object says that the pix data should be used as a texture map. Notice +that this is different than the previous manual section when we used the +[pix_draw] object. The final object in the chain is the [cube] +object. Because we have enabled texture mapping with the [pix_texture] +object, the cube takes the pix data and applies it to the geometry. +

+

Texture mapping can be used with any GEM object. In the previous +manual section, you saw how to load in pix data with a variety of objects, +including [pix_multiimage] and [pix_video]. All of these +objects can be used with the [pix_texture] object. +

Because the pix data is applied to geometry, you can move, rotate, and +scale the image. This is extremely useful on the [square] object. +Instead of doing a one-to-one pixel mapping as occurs with the [pix_draw] +object, you can resize and reshape the image. +

OpenGL originally required that images must have dimensions that are power-of-2, such as 64, 128, or 256. This restriction has been released with recent gfx-cards +(like some radeon/nvidia products). +However, if the width or height of an image is not a power of two, +then the [pix_texture] object will take care of this, +and still render it (depending on you hardware with some tricks). +You can thus texture images of any size, but since this is based on tricking +the texture-coordinates, [pix_coordinate] might not give the wanted result any more. +

+

The example patch 07.texture/02.moveImages.pd is a much more complex +patch which uses alpha blending to create a transparent object, in this +case, the dancer. Make sure to turn on the rotation with the [metro] +object. +

+

People have been asking how textures are handled in GEM. Here +is a long explanation from an email which I wrote. +

Here is how textures are dealt with under OpenGL and hardware +accelerators. This can obviously change in the future, but right +now, I am fairly certain that the info is correct (I make games in my day +job, so I have vested interest in this :-) +

The amount of memory (VRAM) on the card (12mb for Voodoo2, +16mb for TNT, 64mb for GeForce2, etc) is used for both textures (TRAM) +and frame buffer space. If you have a large rendering window, like +1600x1200, it will take up 1600x1200x4x3 in 32-bit mode with double buffering +and a Z buffer (or 23mb). Most people run at TV resolution, like +NTSC, so it takes 640x480x4x3 = 3.7mb All of the space left +is for textures onboard the card (FYI, if you have heard that people are +having problems with the PlayStation2, notice that it only has 4mb of VRAM...not +much onboard texture space, huh? :-) Thankfully it has an extremely +fast DMA bus) +

Sooo, when GEM "creates" a texture, it immediately tries +to send the texture to the card, which uses some of the left over space +in the VRAM. If you had a 640x480 window on a Voodoo2, you have ~8mb +of texture space left over. On a GeForce2, ~60mb. The problem +is what happens if you want more textures than can fit into TRAM. +OpenGL requires that the video drivers deal with the problem, so GEM doesn't +care too much (more about this later). +

In most cases, the drivers cache the textures in main memory +and if a texture is requested for rendering and it isn't resident on the +card, it will download it. If you have AGP, then this is pretty quick, +although none of 3dfx cards really take advantage of this (ie, those cards +are about the same speed as the PCI bus). So depending on the number +of textures, and how complex the scene is, you might be able to display +more textures than you have TRAM. +

One slowdown that can happen with GEM is that it makes a +copy of the image before sending it down the chain of objects. If +you are constantly changing images with a pix_multiimage, this can be a +performance hit, but you can modify the actual pixel data with the pix +objects. The pixels aren't sent to the graphics card until the pix_texture +object is reached. +

GEM tries to help with this with a few objects. pix_imageInPlace +acts much the same as pix_multiimage, but it downloads _every_ image in +the sequence to the card when a download message is recieved. It +also immediately turns on texturing, instead of making a copy (ie, you +don't need a pix_texture object). Much faster, but not as flexible. +pix_movie does much the same thing. It sends the pixel data without +copying it if there is a new frame to display. +

The entire pix system uses a caching system so that the copying +and processing only occurs if something actually changes. For example, +if you had a pix_threshold object, it would only process when rendering +started...and every time that the values actually changed. You can +use pix_buf to isolate parts which don't change from those that do, but +it involves another copy. +

On the Voodoo2, the hardware itself limits textures to 256x256...this +will never change. The newest Voodoo5 boards have a higher texture +size. +

If you load the _exact_ same image (this means the exact +same file/path name), then the pix_image has a cache system which means +that it is only loaded into the +
computers memory once. However, each pix_image still sends +its own copy down to the gfx card. +

You could use a single [pix_image]/[pix_texture] with [separator] +to do this...I have done it a lot in the past. +

The reason that [pix_image] doesn't share the actual texture +data is that you can modify the pixel data with other pix objects...[pix_image] +doesn't actually send the texture data to the gfx card, [pix_texture] does. +

+

[return] +
+ + diff --git a/Gem/manual/Utility.html b/Gem/manual/Utility.html index c8f6e17..b2e619e 100644 --- a/Gem/manual/Utility.html +++ b/Gem/manual/Utility.html @@ -1,149 +1,149 @@ - - - - - - - Utility objects - - - -

-

-Utility objects

-There are a number of objects which were written to make it easier to use -both GEM and pd.  For instance, you often pass around 3 floats at -a time in GEM, either for position or colors.  To help with this, -there are a collection of vector objects.  Use the list below to find -out about the objects. -

These objects used to be in a separate library called MarkEx, but they -have now been folded into GEM. -

counter - count the number of bangs -
average - average a series of numbers together -
change - only output when there is a change in -the number -
invert - invert a number -
randomF/randF - floating point random number -
tripleLine - line object for 3 values -
tripleRand - three random numbers -
vector objects - process a series of numbers -
hsv2rgb and rgb2hsv - convert between RGB and -HSV color space -

-

-counter

- -
- -

The inlets are: -
bang (increment or decrement the counter) -
set direction (1 = count up, 2 = count down, 3 = count up and down) -
set low value -
set hight value -
The outlet is the current count. -

So in this case, the top counter will count up from 1 to 10.  -The bottom counter will count up from 2 to 5. -

The counter also accepts the messages reset and clear.  -Reset immediately sets the counter to its low value and outputs the value.  -The clear message means that the next bang will set the counter -to its low value. -

-

-average

-The average object just averages a series of numbers as they come -in.  The left inlet accepts a single float.  It then outputs -the current average.  The default number of floats to average together -is 10, but that can be changed by sending a new value to the right inlet. -

The average object also accepts the messages clear and reset.  -Clear will immediately set all of the values that the object has been storing -for averaging to 0.  With the reset message, you must pass in a number -to set all of the values. -

-

-change

-Change only accepts a number into its left inlet.  If the number -is the same as the last number sent to the change object, then it -does nothing.  If the number is different, then the change -object will output the new number and store it for the next comparision. -

This object is very useful for the == object and others like it, since -they send a 0 or a 1 every time they do a comparision, and you usually -only care when the state actually changes. -

-

-invert

-The invert object is very simple.  If the number sent to its -left inlet is equal to 0., then invert outputs a 1.  If the -number is not equal to 0., the invert outputs a 0. -

-

-randomF/randF

-One problem with the random object in pd is that it only sends out -integers.  This a real problem in GEM, where you often want a value -between 0 and 1.  randomF is exactly like the random -object. -

When the left inlet gets a bang, randomF outputs a random number -between 0 and the given range.  The range can be set with a number -to the right inlet. -

randF is just an alternate name for randomF. -

-

-tripleLine

- -
- -

The line object is really great for dealing with a single number.  -To do a line with 3 values, like an RGB color value, means that you have -to unpack, do a line, then repack the number.  Not only is -it a pain, but it expensive computationally. -

tripleLine behaves just like the line object, only it -accepts three numbers to interpolate between.  In the example, tripleLine -will interpolate from the current values to 1., .2, .4 over 1000 milliseconds.  -The default output resolution is 50 milliseconds, which is the same default -rendering time.  Going faster with GEM objects will not produce any -benefit, unless you increase the frames per second. -

-

-tripleRand

- -
- -

Just as using tripleLine makes it easier to interpolate between -3 values at once, tripleRand makes it easy to generate three random -values.  In the above example, when the bang is sent, tripleRand -will create three values and output them, with the first between 0 - 1, -the second between 0 - .5, and the third from 0 - .8. -

-

-Vector objects

-The vector math objects are -
vector+ or v+ -
vector- or v- -
vector* or v* -
vector/ or v/ -
All of the above objects perform math on a list of numbers.  The -left inlet accepts a list of numbers of any length.  The right inlet -accepts a single value, which is the operand for the computation.  -In other words, they work just like the normal *, +, -, and / objects, -except they can handle more than one number in the left inlet. -

There are two other objects which are also useful. -

The first is vectorabs or vabs. It computes the absolute -value on a list of numbers. -

The second object is vectorpack or vpack. vpack -accepts a list of numbers in the left inlet and a single number into the -right inlet.  The output is a single list of numbers that is the vector -with the single number appended to the end.  This is very useful when -you want to change the time for a tripleLine without unpacking and -repacking all of the data. -

-

-hsv2rgb and rgb2hsv

-These two objects convert three numbers between HSV and RGB color space.  -HSV stands for hue, saturation, and value.  The simple way to think -of HSV space is that hue is the "color", such as red, blue, etc, the saturation -is how intense the color is, and the value is how bright the color is. -

You can get some really nice effects by varying the hue of a color, -because the brightness will not change while you do it. -

-

[return] - - + + + + + + + Utility objects + + + +

+

+Utility objects

+There are a number of objects which were written to make it easier to use +both GEM and pd.  For instance, you often pass around 3 floats at +a time in GEM, either for position or colors.  To help with this, +there are a collection of vector objects.  Use the list below to find +out about the objects. +

These objects used to be in a separate library called MarkEx, but they +have now been folded into GEM. +

counter - count the number of bangs +
average - average a series of numbers together +
change - only output when there is a change in +the number +
invert - invert a number +
randomF/randF - floating point random number +
tripleLine - line object for 3 values +
tripleRand - three random numbers +
vector objects - process a series of numbers +
hsv2rgb and rgb2hsv - convert between RGB and +HSV color space +

+

+counter

+ +
+ +

The inlets are: +
bang (increment or decrement the counter) +
set direction (1 = count up, 2 = count down, 3 = count up and down) +
set low value +
set hight value +
The outlet is the current count. +

So in this case, the top counter will count up from 1 to 10.  +The bottom counter will count up from 2 to 5. +

The counter also accepts the messages reset and clear.  +Reset immediately sets the counter to its low value and outputs the value.  +The clear message means that the next bang will set the counter +to its low value. +

+

+average

+The average object just averages a series of numbers as they come +in.  The left inlet accepts a single float.  It then outputs +the current average.  The default number of floats to average together +is 10, but that can be changed by sending a new value to the right inlet. +

The average object also accepts the messages clear and reset.  +Clear will immediately set all of the values that the object has been storing +for averaging to 0.  With the reset message, you must pass in a number +to set all of the values. +

+

+change

+Change only accepts a number into its left inlet.  If the number +is the same as the last number sent to the change object, then it +does nothing.  If the number is different, then the change +object will output the new number and store it for the next comparision. +

This object is very useful for the == object and others like it, since +they send a 0 or a 1 every time they do a comparision, and you usually +only care when the state actually changes. +

+

+invert

+The invert object is very simple.  If the number sent to its +left inlet is equal to 0., then invert outputs a 1.  If the +number is not equal to 0., the invert outputs a 0. +

+

+randomF/randF

+One problem with the random object in pd is that it only sends out +integers.  This a real problem in GEM, where you often want a value +between 0 and 1.  randomF is exactly like the random +object. +

When the left inlet gets a bang, randomF outputs a random number +between 0 and the given range.  The range can be set with a number +to the right inlet. +

randF is just an alternate name for randomF. +

+

+tripleLine

+ +
+ +

The line object is really great for dealing with a single number.  +To do a line with 3 values, like an RGB color value, means that you have +to unpack, do a line, then repack the number.  Not only is +it a pain, but it expensive computationally. +

tripleLine behaves just like the line object, only it +accepts three numbers to interpolate between.  In the example, tripleLine +will interpolate from the current values to 1., .2, .4 over 1000 milliseconds.  +The default output resolution is 50 milliseconds, which is the same default +rendering time.  Going faster with GEM objects will not produce any +benefit, unless you increase the frames per second. +

+

+tripleRand

+ +
+ +

Just as using tripleLine makes it easier to interpolate between +3 values at once, tripleRand makes it easy to generate three random +values.  In the above example, when the bang is sent, tripleRand +will create three values and output them, with the first between 0 - 1, +the second between 0 - .5, and the third from 0 - .8. +

+

+Vector objects

+The vector math objects are +
vector+ or v+ +
vector- or v- +
vector* or v* +
vector/ or v/ +
All of the above objects perform math on a list of numbers.  The +left inlet accepts a list of numbers of any length.  The right inlet +accepts a single value, which is the operand for the computation.  +In other words, they work just like the normal *, +, -, and / objects, +except they can handle more than one number in the left inlet. +

There are two other objects which are also useful. +

The first is vectorabs or vabs. It computes the absolute +value on a list of numbers. +

The second object is vectorpack or vpack. vpack +accepts a list of numbers in the left inlet and a single number into the +right inlet.  The output is a single list of numbers that is the vector +with the single number appended to the end.  This is very useful when +you want to change the time for a tripleLine without unpacking and +repacking all of the data. +

+

+hsv2rgb and rgb2hsv

+These two objects convert three numbers between HSV and RGB color space.  +HSV stands for hue, saturation, and value.  The simple way to think +of HSV space is that hue is the "color", such as red, blue, etc, the saturation +is how intense the color is, and the value is how bright the color is. +

You can get some really nice effects by varying the hue of a color, +because the brightness will not change while you do it. +

+

[return] + + diff --git a/Gem/manual/WriteCode.html b/Gem/manual/WriteCode.html index d4d0480..1fb8e30 100644 --- a/Gem/manual/WriteCode.html +++ b/Gem/manual/WriteCode.html @@ -1,41 +1,41 @@ - - - - - - - Writing new objects - - - -

-

-Creating new GEM objects

-Look at the source code :-)  GEM is written in C++, which means that -you have to jump through some hopes to interact properly with Pd, which -is written in C.  If you look in Base/CPPExtern.h, you will see a -collection of macros which you can use to help you create new objects.  -Use one of the GEM objects which is closest to what you want to do as a -template. -

One problem on SGI...you will need to -

setenv LD_LIBRARY_PATH "/where/ever/pd/gem" -

so that rld (the run-time linker) can find the GEM dso.  Because -you are linking with GEM, Pd isn't involved with the run time linking process; -it is all done when Pd calls dlopen. -

On NT, there is much the same problem... -

set your PATH environment variable to \where\ever\pd\gem -

or -

make sure that your new .dll is located in the same directory where -GEM is. -

On NT, all of the classes and functions are exported through declexport/declimport.  -You shouldn't have to do anything to call the functions.  I have not -had any problems making other dll's which are loaded into Pd at runtime.  -You need to make certain that you are exporting the correct functions.  -If your dll cannot find the gem.dll, then it will silently fail. -

And of course, e-mail IOhannes m zmölnig (zmoelnig@iem.at) if you have any problems, -questions, or solutions -

-

[return] -
  - - + + + + + + + Writing new objects + + + +

+

+Creating new GEM objects

+Look at the source code :-)  GEM is written in C++, which means that +you have to jump through some hopes to interact properly with Pd, which +is written in C.  If you look in Base/CPPExtern.h, you will see a +collection of macros which you can use to help you create new objects.  +Use one of the GEM objects which is closest to what you want to do as a +template. +

One problem on SGI...you will need to +

setenv LD_LIBRARY_PATH "/where/ever/pd/gem" +

so that rld (the run-time linker) can find the GEM dso.  Because +you are linking with GEM, Pd isn't involved with the run time linking process; +it is all done when Pd calls dlopen. +

On NT, there is much the same problem... +

set your PATH environment variable to \where\ever\pd\gem +

or +

make sure that your new .dll is located in the same directory where +GEM is. +

On NT, all of the classes and functions are exported through declexport/declimport.  +You shouldn't have to do anything to call the functions.  I have not +had any problems making other dll's which are loaded into Pd at runtime.  +You need to make certain that you are exporting the correct functions.  +If your dll cannot find the gem.dll, then it will silently fail. +

And of course, e-mail IOhannes m zmölnig (zmoelnig@iem.at) if you have any problems, +questions, or solutions +

+

[return] +
  + + diff --git a/Gem/manual/index.html b/Gem/manual/index.html index 6d67068..c6739d5 100644 --- a/Gem/manual/index.html +++ b/Gem/manual/index.html @@ -1,67 +1,67 @@ - - - - - - Gem Manual - - - -

-

-GEM Manual

- -
a simple patch
- -

This is the first attempt at a manual for GEM, so bear with me. -Any comments are appreciated. Send them to Mark Danks -


-In fact, this ought to be the second attempt at such a manual. There will not be much now. -But send any comments to IOhannes m zmölnig instead. -

-

Introduction -
    An introduction to GEM and what you can do with -it.  The general system requirements are also described here. -

Using GEM with Pd -
    How to use GEM with Pd.  This includes how -to start Pd so that the GEM library is loaded and working properly. -

Basic objects -
    The basic objects that GEM has.  This section -shows you how to create a simple patch. -

Images -
    Using images is an important part of GEM. Here you -will load in images and learn the basics of dealing with images. -

Texture mapping -
    Loading in images is only one part.  Applying -those images to 3-D shapes is called texture mapping. -

Pixes (image processing) -
    Once you have texture mapped the images, you will -probably want to process and change them in response to user interaction.  -The pix objects provide this functionality. -

Lighting -
    Shading and lighting are easy with the lighting -objects. -

Particles -
    Particle systems can create effects such as smoke, -fire, and water. -

Utility objects -
    To help you deal with the data which GEM uses, there -are a number of utility objects. -

Input devices -
    GEM provides interaction with the mouse and other -input devices. -

Advanced -
    Now that you know all about the other objects, here -are a few of the more advanced ones. -

Writing new objects -
    How to write new objects for GEM. -

FAQ -
    Frequently asked questions about GEM. -

List of Objects -
    All of the objects in GEM with a very brief description.. -

Glossary/Index -
    A collection of definitions and links to explanations. -

-
  - - + + + + + + Gem Manual + + + +

+

+GEM Manual

+ +
a simple patch
+ +

This is the first attempt at a manual for GEM, so bear with me. +Any comments are appreciated. Send them to Mark Danks +


+In fact, this ought to be the second attempt at such a manual. There will not be much now. +But send any comments to IOhannes m zmölnig instead. +

+

Introduction +
    An introduction to GEM and what you can do with +it.  The general system requirements are also described here. +

Using GEM with Pd +
    How to use GEM with Pd.  This includes how +to start Pd so that the GEM library is loaded and working properly. +

Basic objects +
    The basic objects that GEM has.  This section +shows you how to create a simple patch. +

Images +
    Using images is an important part of GEM. Here you +will load in images and learn the basics of dealing with images. +

Texture mapping +
    Loading in images is only one part.  Applying +those images to 3-D shapes is called texture mapping. +

Pixes (image processing) +
    Once you have texture mapped the images, you will +probably want to process and change them in response to user interaction.  +The pix objects provide this functionality. +

Lighting +
    Shading and lighting are easy with the lighting +objects. +

Particles +
    Particle systems can create effects such as smoke, +fire, and water. +

Utility objects +
    To help you deal with the data which GEM uses, there +are a number of utility objects. +

Input devices +
    GEM provides interaction with the mouse and other +input devices. +

Advanced +
    Now that you know all about the other objects, here +are a few of the more advanced ones. +

Writing new objects +
    How to write new objects for GEM. +

FAQ +
    Frequently asked questions about GEM. +

List of Objects +
    All of the objects in GEM with a very brief description.. +

Glossary/Index +
    A collection of definitions and links to explanations. +

+
  + + diff --git a/Gem/pix_drum.pd_darwin b/Gem/pix_drum.pd_darwin index aa278fe..0b6deb9 100755 Binary files a/Gem/pix_drum.pd_darwin and b/Gem/pix_drum.pd_darwin differ diff --git a/Gem/pix_fiducialtrack.pd_darwin b/Gem/pix_fiducialtrack.pd_darwin index 565cb19..7e4e233 100755 Binary files a/Gem/pix_fiducialtrack.pd_darwin and b/Gem/pix_fiducialtrack.pd_darwin differ diff --git a/Gem/pix_hit.pd_darwin b/Gem/pix_hit.pd_darwin index 1d5aa37..8fd8140 100755 Binary files a/Gem/pix_hit.pd_darwin and b/Gem/pix_hit.pd_darwin differ diff --git a/Gem/pix_mano.pd_darwin b/Gem/pix_mano.pd_darwin index 4c83115..8faded6 100755 Binary files a/Gem/pix_mano.pd_darwin and b/Gem/pix_mano.pd_darwin differ diff --git a/Gem/rgb2hsv-help.pd b/Gem/rgb2hsv-help.pd index 1d8b9a8..f4f45aa 100644 --- a/Gem/rgb2hsv-help.pd +++ b/Gem/rgb2hsv-help.pd @@ -1,21 +1,21 @@ -#N canvas 172 190 600 500 10; -#X text 124 68 GEM object; -#X text 138 23 rgb2hsv; -#X text 89 388 convert between RGB colorspace and HSV colorspace; -#X text 91 412 RGB is red \, green \, blue; -#X text 91 434 HSV is hue \, saturation \, value (luminance); -#X obj 123 220 rgb2hsv; -#X msg 122 156 1 0 0; -#X msg 357 160 0 1 1; -#X obj 123 299 print hsv; -#X obj 357 303 print rgb; -#X obj 357 226 hsv2rgb; -#X msg 414 159 0.6 1 0.5; -#X msg 185 155 0 0.2 0.5; -#X text 215 21 hsv2rgb; -#X connect 5 0 8 0; -#X connect 6 0 5 0; -#X connect 7 0 10 0; -#X connect 10 0 9 0; -#X connect 11 0 10 0; -#X connect 12 0 5 0; +#N canvas 172 190 600 500 10; +#X text 124 68 GEM object; +#X text 138 23 rgb2hsv; +#X text 89 388 convert between RGB colorspace and HSV colorspace; +#X text 91 412 RGB is red \, green \, blue; +#X text 91 434 HSV is hue \, saturation \, value (luminance); +#X obj 123 220 rgb2hsv; +#X msg 122 156 1 0 0; +#X msg 357 160 0 1 1; +#X obj 123 299 print hsv; +#X obj 357 303 print rgb; +#X obj 357 226 hsv2rgb; +#X msg 414 159 0.6 1 0.5; +#X msg 185 155 0 0.2 0.5; +#X text 215 21 hsv2rgb; +#X connect 5 0 8 0; +#X connect 6 0 5 0; +#X connect 7 0 10 0; +#X connect 10 0 9 0; +#X connect 11 0 10 0; +#X connect 12 0 5 0; -- cgit v1.2.1