# -*- indent-tabs-mode: t -*-
# Soya 3D tutorial
# Copyright (C) 2004 Jean-Baptiste LAMY
#
# 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
# blender-auto-exporter-1: Blender auto-exporter : how to export models automatically
# This lesson is similar to basic-2.py, but it loads a Blender model !
# You NEED Blender to run this lesson.
# The Soya auto-exporter feature currently support the following file formats :
# - Blender model (Both static models, and Cal3D ones)
# - OBJ/MTL model (thanks David PHAM-VAN)
# - .png images
# - .jpeg images
# Imports and inits Soya (see lesson basic-1.py).
import sys, os, os.path, soya
soya.init()
soya.path.append(os.path.join(os.path.dirname(sys.argv[0]), "data"))
# Creates the scene.
scene = soya.World()
# Loads the knife model.
# To use auto-exporter, simply put your Blender models in {soya.path}/blender/ , your
# OBJ/MTL models in {soya.path}/obj/ and your textures in {soya.path}/images/ .
# Soya will automatically exports models to Soya worlds ans models, and textures to
# materials, if the corresponding Soya doesn't exist OR is not up-to-date.
# Here, the knife model doesn't exist as a Soya model yet, but the original Blender model
# is in {soya.path}/blender/knife.blender ; so Soya will find it, export it to
# a world and then compile the world into a model.
# Soya will save the exported world and model, so if you run the lesson again, the model
# won't be exported again. If you want so, just modify the model and/or the texture.
knife_model = soya.Model.get("knife")
# The Blender model has a Text buffer called "soya_params".
# This buffer is analyzed and gives additionnal information ; here it contains
# "cellshading=1" and thus enable cell_shading for the model.
# The list of ATTR=VALUE code usable in the text buffer corresponds to the options
# available at the beginning of the blender2soya.py script (see this script), e.g. :
# scale=1.0
# shadow=1
# cellshading=1
# cellshading_shader=shader_name
# cellshading_outline_width=5.0
# =5.0
# =5.0
#
# The MATERIAL_MAP option has a different syntax. E.g. the following will replace the
# material called "old_material_name" by the one called "new_material_name".
# material_old_material_name=new_material_name
#
# You can also make curent a specific position of an animation (called Action by Blender)
# as following :
# animation=animation_name
# animation_time=1
# If you want to generate SEVERAL different models from a SINGLE Blender file,
# you can use alternative text buffers. For example the following :
knife_model2 = soya.Model.get("knife@with_sword_material")
# will read the Blender text buffer "with_sword_material" in the model in addition to
# "soya_params". Here is contains "material_knife=epee_turyle", which replace the knife
# material by the sword one (In French, epee=sword).
# The rest of the script is the same than lesson-2.
# Creates a rotating body class.
class RotatingBody(soya.Body):
def advance_time(self, proportion):
soya.Body.advance_time(self, proportion)
self.rotate_y(proportion * 5.0)
knife = RotatingBody(scene, knife_model )
knife.x = -1
knife2 = RotatingBody(scene, knife_model2)
knife2.x = 1
# Creates a light.
light = soya.Light(scene)
light.set_xyz(0.5, 0.0, 2.0)
# Creates a camera.
camera = soya.Camera(scene)
camera.z = 3.0
soya.set_root_widget(camera)
soya.MainLoop(scene).main_loop()
Tutorials : basic-1 - basic-2 - basic-3 - basic-4 - basic-5 - basic-6 - basic-loadingfile-1 - basic-savingfile-cerealizer-1 - basic-savingfile-pickle-1 - blender-auto-exporter-1 - bsp-game_skel - character-animation-1 - character-animation-2 - character-animation-shadow-cellshading-1 - deform-1 - facecutter-1 - fullscreen-1 - game_skel-1 - game_skel-2 - game_skel-3 - game_skel-4 - game_skel-5 - gui-1 - gui-2 - gui-background-1 - label3D-1 - modeling-1 - modeling-2 - modeling-3 - modeling-cellshading-1 - modeling-env-mapping-1 - modeling-material-1 - modeling-material-2 - modeling-shadow-1 - modeling-smoothlit-1 - modeling-solid-model-1 - modeling-transparency-1 - mouse-1 - multiple-cameras-1 - nested-world-1 - ode-collision-1-base - ode-collision-2-base - ode-collision-3-mass_influence - ode-collision-4-pushable - ode-collision-5-hit_func - ode-collision-6-hit_func-2-other - ode-collision-7-hit_func-3-contacts - ode-collision-8-terrain - ode-collision-9-box - ode-gravity - ode-join - ode-mass - ode-test - particle-1 - portal-1 - pudding-1 - pudding-2 - pudding-buttonbar-1 - pudding-buttonbar-2 - pudding-console-1 - pudding-console-2 - pudding-game_skel-5 - pudding-image-1 - pudding-image-slicing-1 - pudding-input-1 - pudding-listbox-1 - pudding-menu-1 - pudding-meter-1 - pudding-svgelements-1 - pudding-z-index-1 - ray-1 - raypicking-1 - raypicking-2 - raypicking-3 - sound-1 - soya-with-tk-1 - speed-1 - state-1 - static-shadows-1 - terrain-1 - terrain-2 - test - traveling-camera-1 - widget-1 - widget-background-1