From ada4140d842c88676d3936b97185e72b60ac701a Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Fri, 14 Jan 2011 06:56:19 +0000 Subject: [PATCH] - added glexemel to svn and CMake builds - updated the G3D import script to properly bring in animations into Blender! --- CMakeLists.txt | 12 +- source/tools/glexemel/CMakeLists.txt | 13 + source/tools/glexemel/COPYING | 340 +++++++++++ source/tools/glexemel/INSTALL | 11 + source/tools/glexemel/Makefile.linux | 30 + source/tools/glexemel/README | 13 + source/tools/glexemel/g2xml.c | 362 ++++++++++++ source/tools/glexemel/g3d.dtd | 66 +++ source/tools/glexemel/g3d_logo.png | Bin 0 -> 60665 bytes source/tools/glexemel/g3d_support.py | 507 ++++++++++++++++ source/tools/glexemel/g3d_xml_exporter.py | 535 +++++++++++++++++ source/tools/glexemel/g3dv4.h | 57 ++ source/tools/glexemel/xml2g.c | 670 ++++++++++++++++++++++ 13 files changed, 2613 insertions(+), 3 deletions(-) create mode 100644 source/tools/glexemel/CMakeLists.txt create mode 100644 source/tools/glexemel/COPYING create mode 100644 source/tools/glexemel/INSTALL create mode 100644 source/tools/glexemel/Makefile.linux create mode 100644 source/tools/glexemel/README create mode 100644 source/tools/glexemel/g2xml.c create mode 100644 source/tools/glexemel/g3d.dtd create mode 100755 source/tools/glexemel/g3d_logo.png create mode 100644 source/tools/glexemel/g3d_support.py create mode 100644 source/tools/glexemel/g3d_xml_exporter.py create mode 100644 source/tools/glexemel/g3dv4.h create mode 100644 source/tools/glexemel/xml2g.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 698c1b84c..d8e8bc38b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,9 +130,15 @@ ENDIF() ADD_SUBDIRECTORY( source/shared_lib ) ADD_SUBDIRECTORY( source/glest_game ) -ADD_SUBDIRECTORY( source/glest_map_editor ) -ADD_SUBDIRECTORY( source/g3d_viewer ) -ADD_SUBDIRECTORY( source/configurator ) +#if(wxWidgets_FOUND) + ADD_SUBDIRECTORY( source/glest_map_editor ) + ADD_SUBDIRECTORY( source/g3d_viewer ) + ADD_SUBDIRECTORY( source/configurator ) +#else() +# MESSAGE(STATUS "WARNING... the following game tools will NOT be built since we cannot find wxWidgets on this machine") +# MESSAGE(STATUS "map editor, g3d viewer, configurator") +#endif() +ADD_SUBDIRECTORY( source/tools/glexemel ) IF(APPLE) include(mk/macosx/CMakeLists.txt) diff --git a/source/tools/glexemel/CMakeLists.txt b/source/tools/glexemel/CMakeLists.txt new file mode 100644 index 000000000..0b086c6d4 --- /dev/null +++ b/source/tools/glexemel/CMakeLists.txt @@ -0,0 +1,13 @@ +# glexemel + +SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/source/tools/glexemel) +add_executable(g2xml g2xml.c g3dv4.h) + +find_package(LibXml2) +IF(LIBXML2_FOUND) + include_directories(${LIBXML2_INCLUDE_DIR}) + add_executable(xml2g xml2g.c g3dv4.h) + target_link_libraries(xml2g ${LIBXML2_LIBRARIES}) +ELSE() + MESSAGE(STATUS "WARNING... xml2g will NOT be built since we cannot find libXml2 on this machine") +ENDIF() diff --git a/source/tools/glexemel/COPYING b/source/tools/glexemel/COPYING new file mode 100644 index 000000000..14db8fc79 --- /dev/null +++ b/source/tools/glexemel/COPYING @@ -0,0 +1,340 @@ + 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. + + GNU GENERAL PUBLIC LICENSE + 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 + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/source/tools/glexemel/INSTALL b/source/tools/glexemel/INSTALL new file mode 100644 index 000000000..9d705dde1 --- /dev/null +++ b/source/tools/glexemel/INSTALL @@ -0,0 +1,11 @@ +Sorry - no autotools support (yet!). + +You will need: + 1) GNU Make (or an equivalent). + 2) An ANSI C compiler (eg: gcc). + 3) libxml2 (http://xmlsoft.org) - the XML parser for GNOME. + +Just copy Makefile.linux to Makefile: + $ cp Makefile.linux Makefile +Then edit Makefile to suit your needs (it's *very* simple). + diff --git a/source/tools/glexemel/Makefile.linux b/source/tools/glexemel/Makefile.linux new file mode 100644 index 000000000..8de1f7d28 --- /dev/null +++ b/source/tools/glexemel/Makefile.linux @@ -0,0 +1,30 @@ +# You need to edit this Makefile for your specific platform + +# CC is the name of your C compiler +CC=gcc +# CFLAGS are the flags that you want to pass to the C compiler +CFLAGS=-Wall -ansi -pedantic +# IDIRS specify the include directories to use +IDIRS=-I/usr/include/libxml2 +# LIBS specify the libraries (libxml2) +LIBS=-lxml2 +# INSTALLDIR specifies the directory to which the binaries should be installed +INSTALLDIR=/usr/local/bin +# CP specifies the copy command for the system +CP=cp + +all: g2xml xml2g + +g2xml: + ${CC} ${CFLAGS} ${IDIRS} g2xml.c -o g2xml ${LIBS} + +xml2g: + ${CC} ${CFLAGS} ${IDIRS} xml2g.c -o xml2g ${LIBS} + +install: + ${CP} g2xml ${INSTALLDIR}/. + ${CP} xml2g ${INSTALLDIR}/. + ${CP} g3d.dtd ${INSTALLDIR}/. + +clean: + rm -f g2xml xml2g diff --git a/source/tools/glexemel/README b/source/tools/glexemel/README new file mode 100644 index 000000000..ec077e910 --- /dev/null +++ b/source/tools/glexemel/README @@ -0,0 +1,13 @@ +=== GLEXEMEL === +An XML format for the G3D file format used by the game Glest: + http://www.glest.org + +This XML format allows for exporters to create XML file descriptions that +can then be converted to binary. + +Note: This package is not yet part of Glest, although it is offered for +inclusion should the developers wish. + +Copyright (C) Jonathan Merritt 2005. +This package may be distributed under the terms of the GNU General Public +License (see the file COPYING for more details). diff --git a/source/tools/glexemel/g2xml.c b/source/tools/glexemel/g2xml.c new file mode 100644 index 000000000..504355536 --- /dev/null +++ b/source/tools/glexemel/g2xml.c @@ -0,0 +1,362 @@ +/** + * File: g2xml.c + * Written: Jonathan Merritt + * + * Description: + * Converts G3D format files into an XML representation. + * + * Copyright (C) Jonathan Merritt 2005. + * This file may be distributed under the terms of the GNU General Public + * License. + */ + +#include +#include +#include + +#include "g3dv4.h" + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + + + +/** + * Forward function declarations. + */ +int g3d2xml(FILE *infile, FILE *outfile); +void usage(char *execname); + + + +/** + * Program entry point. + * + * @param argc: Number of arguments passed to the program. + * @param argv: Array of string arguments. + * + * @returns: EXIT_SUCCESS or EXIT_FAILURE depending upon success or failure + * of the conversion to XML. + */ +int main(int argc, char **argv) +{ + char *infilename, *outfilename; + FILE *infile, *outfile; + int successFlag; + + /* parse command line arguments */ + if (argc != 3) + { + usage(argv[0]); + return (EXIT_FAILURE); + } + else + { + infilename = argv[1]; + outfilename = argv[2]; + } + + /* attempt to open the input and output files */ + infile = fopen(infilename, "rb"); + if (infile == NULL) + { + printf("Could not open file \"%s\" for binary reading.\n", + infilename); + return (EXIT_FAILURE); + } + outfile = fopen(outfilename, "w"); + if (outfile == NULL) + { + printf("Could not open file \"%s\" for writing.\n", + outfilename); + fclose(infile); + return (EXIT_FAILURE); + } + + /* perform the XML conversion */ + successFlag = g3d2xml(infile, outfile); + + /* close the two files */ + fclose(infile); + fclose(outfile); + + /* return a success or failure flag */ + if (successFlag) + return (EXIT_SUCCESS); + else + return (EXIT_FAILURE); +} + + + + +/** + * Prints a "Usage:" string for the program. + * + * @param execname: Executable name of the program. + */ +void usage(char *execname) +{ + printf("Usage:\n"); + printf(" %s infile.g3d outfile.xml\n", execname); + + return; +} + + + +/** + * Performs the conversion from the G3D file format to XML. + * + * @param infile: G3D binary file, opened as "rb", for input. + * @param outfile: Text file, opened as "w", for XML output. + * + * @returns: TRUE if conversion to XML was successful, and FALSE otherwise. + */ +int g3d2xml(FILE *infile, FILE *outfile) +{ + struct FileHeader fileHeader; + struct ModelHeader modelHeader; + struct MeshHeader meshHeader; + size_t nBytes; + uint8 textureName[NAMESIZE]; + float32 *fdata; + uint32 *idata; + int ii, jj, kk; + + /* read in the FileHeader */ + nBytes = sizeof(struct FileHeader); + if (fread(&fileHeader, nBytes, 1, infile) != 1) + { + printf("Could not read file header!\n"); + return FALSE; + } + if (strncmp((char*)fileHeader.id, "G3D", 3) != 0) + { + printf("Expected \"G3D\" id was not found!\n"); + return FALSE; + } + if (fileHeader.version != 4) + { + printf("Version 4 expected, but version %d found!\n", + fileHeader.version); + return FALSE; + } + fprintf(outfile, "\n"); + fprintf(outfile, "\n"); + fprintf(outfile, "\n"); + fprintf(outfile, "\n", fileHeader.version); + + /* read in the ModelHeader */ + nBytes = sizeof(struct ModelHeader); + if (fread(&modelHeader, nBytes, 1, infile) != 1) + { + printf("Could not read model header!\n"); + return FALSE; + } + if (modelHeader.type != mtMorphMesh) + { + printf("Unrecognized mesh type!\n"); + return FALSE; + } + + /* read in the meshes */ + for (ii = 0; ii < modelHeader.meshCount; ii++) + { + /* read in the MeshHeader */ + nBytes = sizeof(struct MeshHeader); + if (fread(&meshHeader, nBytes, 1, infile) != 1) + { + printf("Could not read mesh header!\n"); + return FALSE; + } + + /* write out XML mesh header */ + fprintf(outfile, "\t\n"); + + /* write out diffuse and specular colors */ + fprintf(outfile, "\t\t\n"); + fprintf(outfile, "\t\t\t\n", + meshHeader.diffuseColor[0], + meshHeader.diffuseColor[1], + meshHeader.diffuseColor[2]); + fprintf(outfile, "\t\t\n"); + fprintf(outfile, "\t\t\n"); + fprintf(outfile, "\t\t\t\n", + meshHeader.specularColor[0], + meshHeader.specularColor[1], + meshHeader.specularColor[2]); + fprintf(outfile, "\t\t\n"); + + /* read / write the texture name if present */ + if (meshHeader.textures) + { + nBytes = sizeof(textureName); + if (fread(&textureName, nBytes, 1, infile) != 1) + { + printf("Could not read texture name!\n"); + return FALSE; + } + fprintf(outfile, "\t\t\n", + textureName); + } + + /* read / write each set of vertex data */ + for (jj=0; jj < meshHeader.frameCount; jj++) + { + nBytes = sizeof(float32)*meshHeader.vertexCount*3; + fdata = malloc(nBytes); + if (fdata == NULL) + { + printf("Could not allocate buffer!\n"); + return FALSE; + } + if (fread(fdata, nBytes, 1, infile) != 1) + { + printf("Could not read vertex data!\n"); + free(fdata); + return FALSE; + } + fprintf(outfile, "\t\t\n", + jj); + for (kk=0; kk < meshHeader.vertexCount; kk++) + { + fprintf(outfile, "\t\t\t\n", + fdata[3*kk+2]); + } + fprintf(outfile, "\t\t\n"); + free(fdata); + } + + /* read / write each set of normal data */ + for (jj=0; jj < meshHeader.frameCount; jj++) + { + nBytes = sizeof(float32)*meshHeader.vertexCount*3; + fdata = malloc(nBytes); + if (fdata == NULL) + { + printf("Could not allocate buffer!\n"); + return FALSE; + } + if (fread(fdata, nBytes, 1, infile) != 1) + { + printf("Could not read normal data!\n"); + free(fdata); + return FALSE; + } + fprintf(outfile, "\t\t\n", + jj); + for (kk=0; kk < meshHeader.vertexCount; kk++) + { + fprintf(outfile, "\t\t\t\n", + fdata[3*kk+2]); + } + fprintf(outfile, "\t\t\n"); + free(fdata); + } + + /* read / write texture coordinates */ + if (meshHeader.textures) + { + nBytes = sizeof(float32)*meshHeader.vertexCount*2; + fdata = malloc(nBytes); + if (fdata == NULL) + { + printf("Could not allocate buffer!\n"); + return FALSE; + } + if (fread(fdata, nBytes, 1, infile) != 1) + { + printf("Could not read texture coords!\n"); + free(fdata); + return FALSE; + } + fprintf(outfile, "\t\t\n"); + for (kk=0; kk < meshHeader.vertexCount; kk++) + { + fprintf(outfile, "\t\t\t\n", + fdata[2*kk+1]); + } + fprintf(outfile, "\t\t\n"); + free(fdata); + } + + /* read / write face indices */ + nBytes = sizeof(uint32)*meshHeader.indexCount; + idata = malloc(nBytes); + if (idata == NULL) + { + printf("Could not allocate buffer!\n"); + return FALSE; + } + if (fread(idata, nBytes, 1, infile) != 1) + { + printf("Could not read indexes!\n"); + free(idata); + return FALSE; + } + fprintf(outfile, "\t\t\n"); + for (kk=0; kk < meshHeader.indexCount; kk++) + { + fprintf(outfile, "\t\t\t\n", + idata[kk]); + } + fprintf(outfile, "\t\t\n"); + free(idata); + + fprintf(outfile, "\t\n"); + } + + fprintf(outfile, "\n"); + + return TRUE; + +} + diff --git a/source/tools/glexemel/g3d.dtd b/source/tools/glexemel/g3d.dtd new file mode 100644 index 000000000..f1822b6a4 --- /dev/null +++ b/source/tools/glexemel/g3d.dtd @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/tools/glexemel/g3d_logo.png b/source/tools/glexemel/g3d_logo.png new file mode 100755 index 0000000000000000000000000000000000000000..fdf474f3460a31cdd15dfc61bfed7b16366e17be GIT binary patch literal 60665 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