00001
00002 /*
00003 TEDDY - General graphics application library
00004 Copyright (C) 1999-2002 Timo Suoranta
00005 tksuoran@cc.helsinki.fi
00006
00007 This library is free software{} you can redistribute it and/or
00008 modify it under the terms of the GNU Lesser General Public
00009 License as published by the Free Software Foundation{} either
00010 version 2.1 of the License, or (at your option) any later version.
00011
00012 This library is distributed in the hope that it will be useful,
00013 but WITHOUT ANY WARRANTY{} without even the implied warranty of
00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00015 Lesser General Public License for more details.
00016
00017 You should have received a copy of the GNU Lesser General Public
00018 License along with this library{} if not, write to the Free Software
00019 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
00020
00021 $Id: LWScene.cpp,v 1.1 2002/02/16 12:41:39 tksuoran Exp $
00022 */
00023
00024
00025 #include "Teddy/TeddyConfig.h"
00026 #if defined( TEDDY_INCLUDE_LW_SCENE )
00027
00028
00029 #include "Teddy/Imports/LWSceneParser.h"
00030 #include "Teddy/Imports/LWSceneFile.h"
00031
00032
00033 namespace Teddy {
00034 namespace Imports {
00035
00036
00037 void LWSceneParser::LWSC(){
00038 lws_version = file->read_int();
00039 }
00040
00041
00042 /*
00043 FirstFrame <frame number>
00044
00045 example: FirstFrame 1
00046
00047 The FirstFrame function provides the starting frame for the rendering process.
00048 This is a global function for all LightWave functions that use frame
00049 information
00050 */
00051 void LWSceneParser::FirstFrame(){
00052 first_frame = file->read_int();
00053 }
00054
00055
00056 /*
00057 LastFrame <frame number>
00058
00059 example: LastFrame 30
00060
00061 The LastFrame function provides the last frame to be rendered. This also
00062 supplies the defaults for the MakePreview function and the current frame
00063 slider from Layout with the last frame information. This is a global
00064 function for all LightWave functions that use frame information.
00065 */
00066 void LWSceneParser::LastFrame(){
00067 last_frame = file->read_int();
00068 }
00069
00070
00071 /*
00072 FrameStep <int>
00073
00074 example: FrameStep 1
00075
00076 The FrameStep function provides the number of frames to increment between
00077 rendered frames during the rendering process.
00078 */
00079 void LWSceneParser::FrameStep(){
00080 frame_step = file->read_int();
00081 }
00082
00083
00084 /*
00085 FramesPerSecond <float>
00086
00087 example: FramesPerSecond 30.000000
00088
00089 The FramesPerSecond function provides the number of frames per second.
00090 This controls the duration of each frame.
00091 */
00092 void LWSceneParser::FramesPerSecond(){
00093 frames_per_second = file->read_int();
00094 }
00095
00096
00097 /*
00098 PreviewFirstFrame nfirst
00099 PreviewLastFrame nlast
00100 PreviewFrameStep nstep
00101
00102 The frame range and step size for previewing. These may be unrelated
00103 to the values for rendering. They also control the visible ranges of
00104 certain interface elements, for example the frame slider in the main
00105 window.
00106 */
00107 void LWSceneParser::PreviewFirstFrame(){
00108 this->preview_first_frame = file->read_int();
00109 }
00110 void LWSceneParser::PreviewLastFrame(){
00111 this->preview_last_frame = file->read_int();
00112 }
00113 void LWSceneParser::PreviewFrameStep(){
00114 this->preview_frame_step = file->read_int();
00115 }
00116
00117
00118 /*
00119 CurrentFrame nframe
00120
00121 The frame displayed in the interface when the scene is loaded.
00122 */
00123 void LWSceneParser::CurrentFrame(){
00124 this->current_frame = file->read_int();
00125 }
00126
00127
00128 void LWSceneParser::Plugin(){
00129 LwsToken tmp;
00130 do{
00131 tmp = file->read_token();
00132 }while(
00133 (tmp != LWS_END_PLUGIN) &&
00134 (tmp != LWS_ERROR ) &&
00135 (tmp != LWS_EOF )
00136 );
00137 }
00138
00139
00140 void LWSceneParser::EndPlugin(){}
00141
00142
00143 }; // namespace Imports
00144 }; // namespace Teddy
00145
00146
00147 #endif // TEDDY_INCLUDE_LW_SCENE
00148
00149
00150 /*
00151 The LightWave scene file is a standard ASCII text file that contains the
00152 information necessary to reconstruct a LightWave Scene.
00153
00154 In addition to the objects, lights and camera, the scene file contains
00155 standard Layout settings that are set on a per scene basis. Layout
00156 information that is more "permanent" is saved in the LightWave config
00157 file. (For LightWave Config File information see Chapter 10.)
00158
00159 The object geometry is not included in the scene file. For each object
00160 instance the objects path and filename are listed along with other scene
00161 specific attributes. The objects are stored as seperate binary files
00162 that contain the object geometry along with the objects surface attributes.
00163
00164 Objects are not saved when the Save Scene function is selected from the
00165 Scene Menu. The user is required to save these by going to the Objects Menu
00166 and selecting either the Save Object or Save All Objects function. This
00167 saves each object as an individual file and sets the path and filename that
00168 will be saved for that object instance in the scene file.
00169
00170 Values are listed to 6 decimal places.
00171 Position values are given in meters.
00172 Rotation values are given in degrees.
00173 Scaling values are given as a multiplier.
00174 Frame numbers are given as a value greater than or equal to 0.
00175
00176 Color values are given as an Red, Green, and Blue triple, each with a range
00177 of 0 to 255.
00178
00179 TIS: Appears to be floats in range 0..1 in LWSC 3
00180
00181 The scene files basic structure is divided into separate logical sections.
00182 Each section relates to a group of LightWave's functions. These sections
00183 are arranged in an order similar to the menu structure in LightWave's Layout.
00184
00185 Scene
00186 Objects
00187 Lights
00188 Camera
00189 Effects
00190 Render
00191 Layout Options
00192
00193 The Scene Section consists of the LightWave scene file header and frame
00194 information. The functions in this section always produce a listing
00195 and have no optional functions.
00196
00197 The following scene functions are listed in the order in which they appear
00198 in the scene file.
00199
00200 Italicized entries denote function labels and are not true function names.
00201
00202 LWSC
00203 Scene File Version
00204
00205 FirstFrame
00206 LastFrame
00207 FrameStep
00208 FramesPerSecond
00209
00210 Item Numbers
00211
00212 When a scene file needs to refer to specific items to establish item
00213 relationships (parenting, for example), it uses item numbers. Items
00214 are numbered in the order in which they appear in the file, starting
00215 with 0.
00216
00217 Item numbers can be written in one of two ways, depending on which
00218 keyword they're used with. In general, if the type of the item
00219 (object, bone, light, camera) can be determined from the keyword
00220 alone, the item number will simply be the ordinal, written as a
00221 decimal integer. When the keyword can be used with items of more
00222 than one type, the item number is an unsigned integer written as
00223 an 8-digit hexadecimal string, the format produced by the C-language
00224 "%8X" print format specifier, and the high bits identify the item type.
00225
00226 The first hex digit (most significant 4 bits) of the hex item number
00227 string identifies the item type.
00228
00229 1 - Object
00230 2 - Light
00231 3 - Camera
00232 4 - Bone
00233
00234 The other digits make up the item number, except in the case of
00235 bones. For bones, the next 3 digits (bits 16-27) are the bone
00236 number and the last 4 digits (bits 0-15) are the object number
00237 for the object the bone belongs to. Some examples:
00238
00239 10000000 - the first object
00240 20000000 - the first light
00241 4024000A - the 37th bone (24 hex) in the 11th object (0A hex)
00242
00243 Blocks
00244
00245 Information in a scene file is organized into blocks, the ASCII
00246 text analog of the chunks described in the IFF specification.
00247 Each block consists of an identifier or name followed by some
00248 data. The format of the data is determined by the block name.
00249 Block names resemble C-style identifiers. In particular, they
00250 never contain spaces or other non-alphanumeric characters.
00251
00252 A single-line block is delimited by the newline that terminates
00253 the line. Multiline blocks are delimited by curly braces (the { and }
00254 characters, ASCII codes 123 and 125). The name of a multiline block
00255 follows the opening curly brace on the same line. The curly brace
00256 and the name are separated by a single space. The data follows
00257 on one or more subsequent lines. Each line of data is indented
00258 using two spaces. The closing brace is on a line by itself and
00259 is not indented.
00260
00261 Individual data elements are separated from each other by a
00262 single space. String data elements are enclosed in double
00263 quotes and may contain spaces.
00264
00265 Blocks can be nested. In other words, the data of a block
00266 can include other blocks. A block that contains nested
00267 blocks is always a multiline block. At each nesting level,
00268 the indention of the data is incremented by two additional
00269 spaces.
00270
00271 SingleLineBlock data
00272 { MultiLineBlock
00273 data
00274 { NestedMultiLineBlock
00275 data
00276 }
00277 }
00278 */
00279