Joining |
Joining.cutAfterDelimiter() |
Returns a Collector which behaves like this collector, but cuts
the resulting string after the delimiter when limit is reached.
|
Joining |
Joining.cutAnywhere() |
Returns a Collector which behaves like this collector, but cuts
the resulting string at any point when limit is reached.
|
Joining |
Joining.cutAtCodePoint() |
Returns a Collector which behaves like this collector, but cuts
the resulting string between any code points when limit is reached.
|
Joining |
Joining.cutAtGrapheme() |
Returns a Collector which behaves like this collector, but cuts
the resulting string at grapheme cluster boundary when limit is reached.
|
Joining |
Joining.cutAtWord() |
Returns a Collector which behaves like this collector, but cuts
the resulting string at word boundary when limit is reached.
|
Joining |
Joining.cutBeforeDelimiter() |
Returns a Collector which behaves like this collector, but cuts
the resulting string before the delimiter when limit is reached.
|
Joining |
Joining.ellipsis(CharSequence ellipsis) |
Returns a Collector which behaves like this collector, but uses
the specified ellipsis CharSequence instead of default
"..." when the string limit (if specified) is reached.
|
Joining |
Joining.maxChars(int limit) |
Returns a Collector which behaves like this collector, but sets
the maximal length of the resulting string to the specified number of
UTF-16 characters (or Unicode code units).
|
Joining |
Joining.maxCodePoints(int limit) |
Returns a Collector which behaves like this collector, but sets
the maximal number of Unicode code points of the resulting string.
|
Joining |
Joining.maxElements(int limit) |
Returns a Collector which behaves like this collector, but sets
the maximal number of elements to join.
|
Joining |
Joining.maxGraphemes(int limit) |
Returns a Collector which behaves like this collector, but sets
the maximal number of grapheme clusters.
|
static Joining |
Joining.with(CharSequence delimiter) |
Returns a Collector that concatenates the input elements,
separated by the specified delimiter, in encounter order.
|
Joining |
Joining.wrap(CharSequence prefix,
CharSequence suffix) |
Returns a Collector which behaves like this collector, but
additionally wraps the result with the specified prefix and suffix.
|


{% extends "marketplace/proj.html" %} {% block tabcontents %} {% load markdown_deux_tags %}
This project has been completed. Below you can find links to all the public results, documentation, data, code, etc. that has been generated as part of the project.
{% endif %} {% if project.deliverable_management_url %} {% endif %} {% if project.deliverable_github_url %} {% endif %} {% if project.deliverable_reports_url %} {% endif %} {% if project.deliverable_documentation_url %} {% endif %} {% else %}This project is still in progress, so no public deliverables are available.
{% endif %} {% endblock %}


VertsKebap
Full Review: "Their Kebaps are really good and healthy. This place has changed a lot since I first started UT. Still my go to place when I need something fast, but have been a little disappointed in the prices increases. In particular, I really enjoy their beef and gyro wrap. Having lived a majority of my life in Germany where Doner Kebaps are a staple food, I can attest that the meat is fresh and pleasingly authentic. I would recommend anyone who wants to try some quick and tasty German food to come here!" - 2/1/2017
Service: 5/5
Atmosphere: 4/5
Value: 4/5
Food Quality: 5/5
Dress: Casual
Would Recommend: Yes


Spring Cloud Gateway - Part 1
API Gateway is the entry point to the application, through which the client (Web/Mobile/Desktop) can make REST API calls. API Gateway will allow us to secure the endpoints, throttle, and monitor the traffic.
Many open-source libraries are available for creating an API Gateway, like Netflix Zuul and Amazon API Gateway. In this article, we will look at creating a project using Spring Cloud Gateway.
Spring cloud gateway simplifies the creation of API Gateway service. We should have a separate API gateway service in the production environment without any business logic; this will allow us to deploy or change the API gateway without impacting other services.
We only need to make changes in the application.yml file to configure the routes, and we can create a Spring cloud gateway project by simply going to start.spring.io and selecting gateway dependency.
You can click this link to see my preconfigured spring cloud gateway project. Download and import into your editor.
We need to understand three concepts to work on the Spring cloud gateway project.
- Route: Route is the combination of destination URL, predicate, and filter.
- Predicate: These are like ‘if’ conditions. If the predicate is true, then the request is directed to the configured Route.
- Filter: To modify the request and responses.
I used HttpBin to configure gateway endpoints. Httpbin is the free HTTP request and response service.
Configure Routes
Open application.yml and modify it with the below content;
- API gateway will listen on port 9091.
- Configure routes under ‘spring.cloud.gateway.routes’ property. In this file, we configured one Route.
- Route will have a unique id, destination URL, and a list of predicates or filters. In this case, we have one predicate.
- Spring cloud gateway provides many predicates. For example, some of them are Path, Header, Cookie, and Query. In our example, we used the Path predicate. Predicates are recognized by the predicate type (Path, Cookie, Header), followed by an equal sign (=), followed by argument values separated by commas (,).
Run the application and execute a CURL command to make a get request on ‘http://localhost:9091/get.’
We made a GET request on /get endpoint, and this request will match with the Path ‘/get’ which we mentioned in the Predicate, so the request directs to https://httpbin.org/.
In the next section, we will see an example of Header Predicate.
Header Predicate
Matches with a header in the HTTP request. To make it simple, I am showing only the predicates section instead of the whole configuration file.
Matches only if the request contains a header ‘App-Context-Id’ with any alphanumeric value.
Go through this link to see all available Predicate’s in Spring Cloud Gateway
Conclusion
We went through the basics of Sping API gateway components and worked on a sample project to configure a route using Path and Header predicates.


There's moderate amounts of fun to be had!
Welcome!
Trivia Crossroads is a meeting-place for people who love good beer, good company, and crushing the spirits of their opponents with dazzling displays of erudition. Here you can find events in the Seattle area, look for just the right member to round out your team and increase your odds of trivia triumph, and make your own profile! When our minds meet, there's no one we can't beat!


-
Build software better, together
github.com
GitHub is the best place to build software together. Over 4 million people use GitHub to share code.
-
How animated gif selfies fixed our team’s morale | Three Chords
www.threechords.org
Lately I’ve been thinking a lot about software team morale. I’ve switched teams a couple of times so far this year at work and have had a fairly ...
-
Welcome to Public Beta; introducing our DNA Player!
blog.splice.com
Since announcing Splice private beta, we’ve engineered a platform that connects musicians and their tools to the cloud, modernizing the way music is ...
-
Heroku App.Json Manifest and Button Maker
www.expeditedssl.com
We love Heroku's new one click deploy button and the app.json schema is great, so we built a tool to help developers make better use of it.
-
New Package Roundup
blog.atom.io
At GitHub, we’re building the text editor we’ve always wanted: hackable to the core, but approachable on the first day without ever touching a config ...
-
Creating a 'Deploy to Heroku' Button | Heroku Dev Center
devcenter.heroku.com
The 'Deploy to Heroku' button is a simple mechanism that enables people to deploy apps to Heroku without leaving the web browser, and with little or ...
-
Hello Windows
blog.atom.io
At GitHub, we’re building the text editor we’ve always wanted: hackable to the core, but approachable on the first day without ever touching a config ...
-
The Last Survivors of Meridian 59 - The New Yorker
www.newyorker.com
The royal city of Barloque was once a bustling virtual place. Its streets were filled with a babble of voices: residents visiting Joguer’s Herbs and ...
-
This White House GitHub Experiment Could Help Fix Government | WIRED
www.wired.com
The White House has taken a small but remarkable step toward bringing greater transparency to the legislative process.
-
Anatomy of Cartoon Characters - by Michael Paulus
imgur.com
The most viral images on the internet, curated in real time by a dedicated community through commenting, voting and sharing.
-
GitHub Training
training.github.com
Core skills for day-to-day use of Git on the command line and GitHub workflows
-
Startup Grind San Francisco Presents Chris Wanstrath (GitHub)
startupgrind.com
Chris Wanstrath is a software developer and entrepreneur who co-founded GitHub in 2008 to make it easier to share software code and collaborate on ...
-
The Future of Unreal Tournament Begins Today
www.unrealengine.com
The Future of Unreal Tournament Begins Today
-
Atom Is Now Open Source
blog.atom.io
At GitHub, we’re building the text editor we’ve always wanted: hackable to the core, but approachable on the first day without ever touching a config ...
-
Hello World Guide
github.com
We just shipped our latest GitHub Guide: Hello-World. The "Hello World" project is a time-honored tradition in computer programming and now there is ...
-
TTA Press - Interzone: Science Fiction & Fantasy - Crystal Nights by Greg ...
ttapress.com
TTA Press: Interzone - Crystal Nights by Greg Egan
-
NSA Said to Exploit Heartbleed Bug for Intelligence for Years - Bloomberg
www.bloomberg.com
NSA Said to Exploit Heartbleed Bug for Intelligence for Years
-
GitHub for Poets
www.kickstarter.com
po·et ˈpōət,ˈpōit noun 1. You're not a programmer (yet). But you want to have a hand in crafting the code that runs our site. That's awesome and ...
-
We Launched
github.com
GitHub is officially live. Thanks for the awesome beta everyone. While you can sign up or upgrade your account now, it’ll be one week (April 17th) ...


The natural life cycle of a honey bee colony is dictated by the seasons. During the
winter honey bees will remain in their hive and cluster together for warmth. The drones (males)
will be killed off generally by being kicked out of the hive by the worker bees in order to
conserve honey. During the first half of winter no eggs will be laid.
The second half of winter is when eggs will begin to be laid again. Remember that drones come from unfertilized eggs
and so this is when they are replaced. This is also the time where
consumption of honey is increased to help the bees survive. In general a colony needs 50 to 100 pounds of honey
to survive the winter. Starvation and death by freezing is normal in the winter so do not be alarmed by
reduced population size during this time.
Once spring comes around the queen will begin laying eggs in earnest to revive the population. Nectar gathering
will begin again in order to replace the stores of honey that were used over the winter. The middle of spring is
when workers will begin constructing queen cell's in order to raise new queens. If the hive is large enough, before
the next queen is born, the current, or parent, queen will lose some weight so she can fly and then take half of the
colony with her to start a hive, this is called swarming. If the hive is still too large the first queen born will
also take a portion of the colony and leave to find a new home. The rest of the time until winter is spent building
the hive and making honey.


| Contact name | Phone number | Email address | Company name | Last contacted |
|---|---|---|---|---|
| Isaac Ogunfolaju | +2348069478351 |<EMAIL_ADDRESS>| ACME Industries |
These are my notes
|
| Vladmir Black | +2347011654300 |<EMAIL_ADDRESS>| ABC Corp |
These are my notes
|
| 2 contacts displayed |


Parsa Mivehchi
Web designer and Front End Developer from Vancouver
Focused on making the web fast, readable, and usable. I love exploring new technologies and have a passion for building web applications with great user experiences.


setDensityReturnValueShift
Description
TODO
Definition
setDensityReturnValueShift(integer transformId,integer shift)
Arguments
| integer |
transformId |
id of transform object |
| integer |
shift |
shift value |
setDensityCompareParams
Description
Sets density compare parameters
Definition
setDensityCompareParams(integer transformId,string comparator,integer a,void b,void b,void b)
Arguments
| integer |
transformId |
id of transform object |
| string |
comparator |
greater, between |
| integer |
a |
? |
| void |
b |
? |
| void |
b |
? |
| void |
b |
? |
setDensityMaskParams
Description
Sets density mask
Definition
setDensityMaskParams(integer transformId,string comparator,integer a,void b,void b,void b)
Arguments
| integer |
transformId |
id of transform object |
| string |
comparator |
greater, between |
| integer |
a |
? |
| void |
b |
? |
| void |
b |
? |
| void |
b |
? |
getDensityAtWorldPos
Description
Get density at world position
Definition
getDensityAtWorldPos(integer transformId,float x,float z)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
Return Values
getDensityParallelogramArea
Description
Get density parallelogram area
Definition
getDensityParallelogramArea(integer transformId,float x,float z,float dX1,float dZ1,float dX2,float dZ2)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
dX1 |
x value of 1st direction |
| float |
dZ1 |
z value of 1st direction |
| float |
dX2 |
x value of 2nd direction |
| float |
dZ2 |
z value of 2nd direction |
Return Values
getDensityParallelogram
Description
Get density parallelogram
Definition
getDensityParallelogram(integer transformId,float x,float
z,float dX1,float dZ1,float dX2,float dZ2,integer firstChannel,integer
numChannels)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
dX1 |
x value of 1st direction |
| float |
dZ1 |
z value of 1st direction |
| float |
dX2 |
x value of 2nd direction |
| float |
dZ2 |
z value of 2nd direction |
| integer |
firstChannel |
first channel |
| integer |
numChannels |
number of channels |
Return Values
| integer |
density |
density |
| integer |
numPixels |
number of pixels |
| integer |
totalNumPixels |
total number of pixels |
setDensityParallelogram
Description
Set density parallelogram
Definition
setDensityParallelogram(integer transformId,float x,float
z,float dX1,float dZ1,float dX2,float dZ2,integer firstChannel,integer
numChannels,integer value)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
dX1 |
x value of 1st direction |
| float |
dZ1 |
z value of 1st direction |
| float |
dX2 |
x value of 2nd direction |
| float |
dZ2 |
z value of 2nd direction |
| integer |
firstChannel |
first channel |
| integer |
numChannels |
number of channels |
| integer |
value |
value |
Return Values
| integer |
density |
density |
| integer |
numPixels |
number of pixels |
| integer |
totalNumPixels |
total number of pixels |
getDensityMaskedParallelogram
Description
Get density masked parallelogram
Definition
getDensityMaskedParallelogram(integer transformId,float
x,float z,float dX1,float dZ1,float dX2,float dZ2,integer
firstChannel,integer numChannels,integer id,integer
maskFirstChannel,integer maskNumChannels)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
dX1 |
x value of 1st direction |
| float |
dZ1 |
z value of 1st direction |
| float |
dX2 |
x value of 2nd direction |
| float |
dZ2 |
z value of 2nd direction |
| integer |
firstChannel |
first channel |
| integer |
numChannels |
number of channels |
| integer |
id |
id |
| integer |
maskFirstChannel |
mark first channel |
| integer |
maskNumChannels |
mask number of channels |
Return Values
| integer |
density |
density |
| integer |
numPixels |
number of pixels |
| integer |
totalNumPixels |
total number of pixels |
setDensityMaskedParallelogram
Description
Set density masked parallelogram
Definition
setDensityMaskedParallelogram(integer transformId,float
x,float z,float dX1,float dZ1,float dX2,float dZ2,integer
firstChannel,integer numChannels,integer id,integer
maskFirstChannel,integer maskNumChannels,integer mask id)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
dX1 |
x value of 1st direction |
| float |
dZ1 |
z value of 1st direction |
| float |
dX2 |
x value of 2nd direction |
| float |
dZ2 |
z value of 2nd direction |
| integer |
firstChannel |
first channel |
| integer |
numChannels |
number of channels |
| integer |
id |
id |
| integer |
maskFirstChannel |
mark first channel |
| integer |
maskNumChannels |
mask number of channels |
| integer |
mask id |
mask id |
Return Values
| integer |
density |
density |
| integer |
numPixels |
number of pixels |
| integer |
totalNumPixels |
total number of pixels |
addDensityParallelogram
Description
Set density masked parallelogram
Definition
addDensityParallelogram(integer transformId,float x,float
z,float dX1,float dZ1,float dX2,float dZ2,integer firstChannel,integer
numChannels,integer value)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
dX1 |
x value of 1st direction |
| float |
dZ1 |
z value of 1st direction |
| float |
dX2 |
x value of 2nd direction |
| float |
dZ2 |
z value of 2nd direction |
| integer |
firstChannel |
first channel |
| integer |
numChannels |
number of channels |
| integer |
value |
value |
Return Values
| integer |
density |
density |
| integer |
numChangedPixels |
number of changed pixels |
| integer |
totalDelta |
total number of changed pixels |
| integer |
totalNumPixels |
total number of pixels |
addDensityMaskedParallelogram
Description
Add density masked parallelogram
Definition
addDensityMaskedParallelogram(integer transformId,float
x,float z,float dX1,float dZ1,float dX2,float dZ2,integer
firstChannel,integer numChannels,integer id,integer
maskFirstChannel,integer maskNumChannels,integer mask id)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
dX1 |
x value of 1st direction |
| float |
dZ1 |
z value of 1st direction |
| float |
dX2 |
x value of 2nd direction |
| float |
dZ2 |
z value of 2nd direction |
| integer |
firstChannel |
first channel |
| integer |
numChannels |
number of channels |
| integer |
id |
id |
| integer |
maskFirstChannel |
mark first channel |
| integer |
maskNumChannels |
mask number of channels |
| integer |
mask id |
mask id |
Return Values
| integer |
density |
density |
| integer |
numChangedPixels |
number of changed pixels |
| integer |
totalDelta |
total number of changed pixels |
| integer |
totalNumPixels |
total number of pixels |
setTypeIndexMaskedParallelogram
Description
Set indexed mask parallelogram type
Definition
setTypeIndexMaskedParallelogram(integer transformId,float
x,float z,float dX1,float dZ1,float dX2,float dZ2,integer mask
id,integer firstChannel,integer numChannels)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
dX1 |
x value of 1st direction |
| float |
dZ1 |
z value of 1st direction |
| float |
dX2 |
x value of 2nd direction |
| float |
dZ2 |
z value of 2nd direction |
| integer |
mask id |
mask id |
| integer |
firstChannel |
first channel |
| integer |
numChannels |
number of channels |
Return Values
| integer |
numChangedPixels |
number of changed pixels |
| integer |
totalNumPixels |
total number of pixels |
getDensityRegion
Description
Get density region
Definition
getDensityRegion(integer transformId,float x,float z,float width,float height,integer firstChannel,integer numChannels)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
width |
width |
| float |
height |
height |
| integer |
firstChannel |
first channel |
| integer |
numChannels |
number of channels |
Return Values
| integer |
density sum |
density sum |
getDensityRegionWorld
Description
Get density region world
Definition
getDensityRegionWorld(integer transformId,float x,float z,float width,float height,integer firstChannel,integer numChannels)
Arguments
| integer |
transformId |
id of transform object |
| float |
x |
x position |
| float |
z |
z position |
| float |
width |
width |
| float |
height |
height |
| integer |
firstChannel |
first channel |
| integer |
numChannels |
number of channels |
Return Values
getDensityMapFileName
Description
Get density map file name
Definition
getDensityMapFileName(integer transformId)
Arguments
| integer |
transformId |
id of transform object |
Return Values
| string |
fileName |
file name |
getDensityMapSize
Description
Get density map file name
Definition
getDensityMapSize(integer transformId)
Arguments
| integer |
transformId |
id of transform object |
Return Values
getTerrainDetailNumChannels
Description
Get number of terrain detail channels
Definition
getTerrainDetailNumChannels(integer transformId)
Arguments
| integer |
transformId |
id of transform object |
Return Values
| integer |
numChannels |
number of channels |
getTerrainDetailViewDistance
Description
Get terrain detail view distance
Definition
getTerrainDetailViewDistance(integer transformId)
Arguments
| integer |
transformId |
id of transform object |
Return Values
| float |
viewDistance |
view distance |
getTerrainDetailName
Description
Get terrain detail name
Definition
getTerrainDetailName(integer transformId)
Arguments
| integer |
transformId |
id of transform object |
Return Values
| string |
viewDistance |
view distance |
Tyre Track Reference
createTrack
Description
Creates a tyre track system
Definition
createTrack(integer systemId,float width,integer atlasIndex)
Arguments
| integer |
systemId |
id of tyre track object |
| float |
width |
Tyre track width |
| integer |
atlasIndex |
Index of Atlas |
Return Values
| integer |
trackid |
id of tyre track |
destroyTrack
Description
Destroys a tyre track system
Definition
destroyTrack(integer systemid,integer trackid)
Arguments
| integer |
systemid |
id of tyre track object |
| integer |
trackid |
id of tyre track |
addTrackPoint
Description
Adds a tyre track position
Definition
addTrackPoint(integer systemid,integer trackid,float
x,float y,float z,float x,float y,float z,float r,float g,float b,float
a,float uw,float dTheta)
Arguments
| integer |
systemid |
id of tyre track object |
| integer |
trackid |
id of tyre track |
| float |
x |
x position of track object |
| float |
y |
y position of tyre track object |
| float |
z |
z position of tyre track object |
| float |
x |
x part of up vector |
| float |
y |
y part of up vector |
| float |
z |
z part of up vector |
| float |
r |
red color component [0, 1] |
| float |
g |
green color component [0, 1] |
| float |
b |
blue color component [0, 1] |
| float |
a |
alpha (used to determine the amount of dirt) [0, 1] |
| float |
uw |
Bumpiness [0 1] |
| float |
dTheta |
Wheel dtheta/dt (used to determine forward/backward motion of wheel) |
cutTrack
Description
Relinquish Track Segments
Definition
cutTrack(integer systemid,integer trackid)
Arguments
| integer |
systemid |
id of tyre track object |
| integer |
trackid |
id of tyre track |
eraseParallelogram
Description
Erase Segments Inside Parallelogram
Definition
eraseParallelogram(integer systemid,float
startWorldX,float startWorldZ,float widthWorldX,float widthWorldZ,float
heightWorldX,float heightWorldZ)
Arguments
| integer |
systemid |
id of tyre track object |
| float |
startWorldX |
Parallelogram x start position in world space |
| float |
startWorldZ |
Parallelogram y start position in world space |
| float |
widthWorldX |
Parallelogram x width in world space |
| float |
widthWorldZ |
Parallelogram z width in world space |
| float |
heightWorldX |
Parallelogram x height in world space |
| float |
heightWorldZ |
Parallelogram z height in world space |
Foundation Reference
Scenegraph
translate
Description
Translate object (transform)
Definition
function translate(integer objectId, float dx, float dy, float dz)
Arguments
| integer |
objectId |
object id (transform) |
| float |
dx |
x relative translation value |
| float |
dy |
y relative translation value |
| float |
dz |
z relative translation value |
Source file
shared/foundation/scenegraph.lua
rotate
Description
Rotate object (transform)
Definition
function rotate(integer objectId, float dx, float dy, float dz)
Arguments
| integer |
objectId |
object id (transform) |
| float |
dx |
x relative rotation value |
| float |
dy |
y relative rotation value |
| float |
dz |
z relative rotation value |
Source file
shared/foundation/scenegraph.lua
toggleVisibility
Description
Toggle visibility of a scenegraph object
Definition
function toggleVisibility(integer objectId)
Arguments
| integer |
objectId |
id of scenegraph object |
Source file
shared/foundation/scenegraph.lua
printScenegraph
Description
Prints scenegraph object
Definition
function printScenegraph(integer objectId)
Arguments
| integer |
objectId |
id of scenegraph object |
Source file
shared/foundation/scenegraph.lua
Input
Key values
Description
Key values used by keyEvent function
Definition
| Variable |
Value |
Description |
| Input.KEY_a |
97 |
Value of key a |
| Input.KEY_b |
98 |
Value of key b |
| ... |
... |
.. |
| Input.KEY_z |
122 |
Value of key z |
| Input.KEY_esc |
27 |
Value of escape key |
Source file
shared/foundation/input.lua
Mouse values
Description
Mouse values used by mouseEvent function
Definition
| Variable |
Value |
Description |
| Input.MOUSE_BUTTON_NONE |
0 |
none mouse button |
| Input.MOUSE_BUTTON_LEFT |
1 |
left mouse button |
| Input.MOUSE_BUTTON_MIDDLE |
2 |
middle mouse button |
| Input.MOUSE_BUTTON_RIGHT |
3 |
right mouse button |
Source file
shared/foundation/input.lua
Gamepad/Joystick values
Description
Gamepad/Joystick axis values used by getInputAxis function
Definition
| Variable |
Value |
Description |
| Input.AXIS_X |
0 |
x axis |
| Input.AXIS_Y |
1 |
y axis |
| Input.AXIS_Z |
2 |
z axis |
| Input.AXIS_W |
3 |
w axis |
Source file
shared/foundation/input.lua
Exporter
Autodesk Maya i3d exporter
To generate i3d files of your 3d-models you can use the exporter plugin for Autodesk Maya.
The GIANTS Editor and the GIANTS Engine can only load i3d files. This section of the documentation will show you,
how to export i3d files with the I3D exporter plugins in Autodesk Maya.
The first thing you probably want to do is to install the exporter plugins in Autodesk Maya.
Installing I3D exporter plugin
Step 1
Place the files I3DExportUI.mel and I3DExporter2014-x64.mll into the folder
"C:/Documents and Settings/<USERNAME>/My Documents/maya/scripts".
Step 2
Start Maya and open the Script Editor window.
Step 3
Select custom shelf tab
Step 4
Type the following commands in the lower portion of the Script Editor:
loadPlugin -qt "C:/Documents and Settings/<USERNAME>/My Documents/maya/scripts/I3DExporter2014-x64.mll";
source I3DExportUI;
I3DExport;
Highlight the commands, then use the middle mouse button, to drag the highlighted MEL commands to the shelf.
Note:
- Maya don't like backslashes so replace them with slashes.
- Replace <USERNAME> with your username.
- The file path can be different depending on the language of your operating system
(eg. C:/Documents and Settings/<USERNAME>/My Documents/maya/scripts/I3DExporter2014-x64.mll)
Step 5
Copy the I3D_icon.bmp into the folder "C:/Documents and Settings/<USERNAME>/My Documents/maya/2014/prefs/icons".
Edit shelf to replace the default icon with the one enclosed.
Preparing your 3d-model for export
Before you can actually use the exporter, it’s wise to check certain things with your 3d-model in Maya
which can cause issues later in the editor or the engine.
In the Channel-Box you see the transformations of your selected object.
The ScaleX, ScaleY and ScaleZ of your object should be 1 1 1.
If you just plan to use this object as a static mesh or with no physics at all
you could export it with any scale you want, but if you want to simulate your
object in the engine (as a dynamic or kinematic rigid body object) the scale must
be 1 1 1 otherwise the physics simulation will produce incorrect results.
If you have an object with scale, you can easily get rid of the scale. Go to the
Modify-Panel, and select the option box right of the Freeze Transformations.
The Freeze Transformations dialog window opens. You can select the checkbox scale
and hit apply.
Note: Please refer to the artwork guide for further information about asset conditioning for the engine.
I3D exporter usage
Start the exporter dialog with a click on the I3D exporter icon you have
created on your custom shelf (see Installing I3D exporter plugins)
Export Panel
The export panel is quite self-explanatory. In the export options part you can include
and exclude parts from exporting (IK, Animation, Shapes, Nurbs Curves, Lights,
Cameras, Particle Systems and/or Default Cameras). The Shape Export Subparts
section allows you to control which subshape attributes are exported (Normals,
vertex Colors, Texture Coordinates and/or Skin Weights).
The miscellaneous section has this options:
- Verbose, display verbose information in output window during the export
- Relative Paths, generate relative paths for texture files
- Float Epsilon, truncate values within epsilon range to zero. Epsilon: [-1e-5, 1e-5]
Buttons
- Preview, exports whole scene to a temporary file and starts the editor
- Export All, exports the whole scene
- Export, exports only currently selected objects
Attributes Panel
In the attributes panel you can load and save attributes of your objects those
attributes will be saved into the Maya file and are translated into the correct
i3d attributes when you export to a i3d file.
The first thing you have to do here is, that you must press the "Load Current"
button at the bottom in order to load the attibutes of your object. Otherwise
everything is unchecked and is not showing the attributes that are currently active
on you object. So be sure, to hit this button first.
Current Node
Here you can see the name of your current working object.
Rigid Body
This section handles all the attributes regarding to physics rigid bodies.
Joint
Here you can define your joint-attributes in detail. One thing you might miss
here are the joint limits, they must be defined within Maya, since your object
can have many joints with different limits. You can define the limit of a joint
angle by the limit informations of your transform-object.
Rendering
- Occlusion Culling, Objects that are entirely covered by other objects
may be culled and thus not rendered at all. This option can increase
the rendering performace in the engine if you have big objects
containing much smaller objects, for instance a house. If you activate
the occlusion culling on the root-node of the house all its childs are also
not rendered, if the house is complete covered behind other objects. However,
you should not apply this attribute on too many small objects because it is
one more task for the engine.
- Non Renderable, With this option a objects will not be rendered at any time.
Use this option for collision geometry. If you have
complex objects with sub-objects attached, be careful with this checkbox since
this attribute is also going to affect all the attached children.
- Clip Distance, This value defines how far the object is still going to be
rendered. If you have a large scene and tons of objects this is a powerful
method to keep your framerate high.
After you have defined all your attributes, you have to hit the "Save Current"
button to save your attributes. If you have lots of objects with the same
attributes, you can select them all, and then use apply selected to apply the
current settings to all the selected objects. Remove current resets the
attributes to the default values and if you want do reset multiple objects,
you can select them all and hit "Remove Selected"
Validate Panel
With this panel you can validate if one of your objects have an incorrect
pivot. In Maya your pivot can have a local and a world space attribute which
you can find in the attribute editor on the right side. The x y and z values of
both, local and world-space have to be 0 0 0 otherwise you will get a warning.
You can fix incorrect pivots with the FreeezeToPivot option in the tools panel.
Tools
If you have validated your objects and a local pivot was not set to 0 0 0, you can
quickly fix affected objects with the FreeezeToPivot button.
Material export options
Mapping between Maya and i3d material attributes
Material Attributes
- Custom Shader: Use the attribute name 'customShader' with a string type to add a custom shader to the material.
The value specifies the path of the custom shader xml file relative to the maya file.
- Custom Shader Parameter: Use the attribute name
'customParameter_<parameterName>' with a string type to specify
the value of a custom shader parameter. The values should be space
separated.
<parameterName> is the name of the parameter as specified in the custom shader.
- Custom Shader Texture:: Use the attribute 'customTexture_<textureName>' with a string type to specify the texture of a custom shader texture.
The value specifies the path of the texture file relative to the maya file.
<textureName> is the name of the texture as specified in the custom shader.
Autodesk 3ds MAX i3d exporter
Installing I3D exporter plugin
Copy the plugin file into this directory:
%3DSMAX installation path%/plugins/
On a Windows 7 (english version) this would be the path C:\Program Files\Autodesk\3ds Max 2014\plugins for example.
How to export your 3ds MAX documents as I3D
Simply select "Export" from the file menu within 3DS max and select
"GIANTS I3D (*.i3d)" as the file type. After selecting the output file,
you'll be prompted with the export options dialog.
Export options dialog
The export options dialog will present you with important options. These control how your scene file is exported:
These options are available:
- Will export scene geometry
- Will export point, spot and directional lights
- By default, empty transform groups (without meaningful childs)
are ignored. Check this to disable omission of empty transform groups
during export
- Will export camera nodes
- Will export animations
- Check this to add per-vertex normal to the exported scene geometry
- Check this to add per-vertex texture U/V coordinates to the exported scene geometry
- Check this to add per-vertex colors to the exported scene geometry
- If checked, the resulting I3D file will be opened (usually the
GIANTS editor will open it, but if it is not installed you'll be
prompted to select a program to open the file with)
- Enables relative paths for texture references. If enabled, all
texture paths are relative from the I3D target path. Of course, all
textures should reside on the same drive or you'll get absolute paths
anyways.
- Forces small values near zero to be rounded to zero.
- The timeline is samples each frame instead just at keyframe positions. Use this if you have extremely sparse curve keys (bezier, etc.), as the engine won't make use of the keyframe tangents
- Will remove keyframes which are not relevant (e.g. when three equal positions occur in a row, the middle one could be omitted)
- Will load an animation definition from a text file (you'll be prompted with a file selector)
- Enter animation clip definitions here (see below for format explanation). Used only when animation export is actually enabled
- Hit this button to actually export the I3D
- Cancels export process
Animation export
To export animations, the 3ds MAX timeline has to be split into
individual clips. This is accomplished by entering textual information
into the "Animation Definition" text field or load this information from
a text file. The textual information defines one clip per line.
Comments can be inserted by prefixing the line with a hash. Example:
# The line format is:
# clipname firstframe lastframe
# Frame numbers are inclusive: [firstframe, lastframe]
# Walking animation
walk 0 30
# jumping animation
jump 31 60
# running
run 61 120
This animation definition will divide the 3ds MAX timeline into three
clips named "walk", "jump" and "run" which can be accessed individually
in the I3D.
Unit setup
The I3D exporter will act unit-agnostic and react to the unit
settings in your 3ds MAX scene file. If configured properly, the output
file will always have the right scaling.
I3D custom attributes
The export plugin also exposes custom attributes to configure special
I3D flags for nodes in the scenegraph. To change flags and options for a
specific nodes, the I3D attributes have to be attached to the node. To
do this, enable the "I3D Utilities" panel, which will present you with a
big "Add I3D attributes" button. All you have to do then is to select a
node and hit the button. There is a separate set of attributes for
lights, as they have other options than the normal nodes.
Supported node attributes
Here, all supported attributes of 3ds MAX nodes are depicted. Values
from the I3D rollouts are always supported, values from the stock
attributes are marked with a number and explained below.
To find out more about the actual meaning of the attributes in the I3D please consider the I3D documentation.
Generic
Generic I3D attributes
Cameras
Camera attributes
- FOV angle
- Near clip plane
- Far clip plane
Lights
Light attributes
- Light type
- Light color
- Inner cone angle
- Outer cone angle
- Attenuation distance
- I3D specific attributes
Material mapping
- Ambient color
- Diffuse color
- Specular color
- Specular level
- Glossiness / specular power
- Albedo map
- Glossmap
- Bumpmap
- Bumpmap opacity controls bump depth for I3D material
- Opacity maps to the alpha channel of the I3D material diffuse color
The I3D exporter will automatically fetch material information from
the 3ds MAX standard material. The ambient, diffuse and specular colors
as well as the specular power (glossiness) and specular level are
directly transferred into the I3D material. The opacity level will be
exported as the alpha channel of the diffuse color. From the texture map
channels, the diffuse channel defines the albedo map, either the
specula, shininess or shininess strength channel is used as the gloss
map and the bumpmap channel is uses as the normalmap. The bumpDepth
parameter of the bumpmap is derived from the opacity of the bump map
channel and is calculated as bumpDepth = opacity * 3.3333
Node export order
As 3ds MAX does not allow strict ordering of nodes on the same
hierarchy level, the I3D exporter will sort the nodes by their names.
Because it's not always wanted that nodes are named awkwardly, the I3D
exporter allows for prefixes in the form "prefix.name" (.e.g "A.house",
"B.house", "C.house", ...). The part before the dot and the dot itself
will be removed from the node name in the exported I3D (so the examples
will all be named "house" in the I3D file). That way, you can choose the
export order by changing the prefix without being worried that you have
to mangle the names in the I3D.
LOD export
To define LODs for a specific node, you'll have to attach the I3D
attributes to it. The LOD view distances can be defined there. The
actual geometry nodes must be directly parented under the LOD node and
sorted descendent by their LOD level. So, if "LODHouse" is the node with
the LOD attributes configured to have 1 additional LOD, you'll need
"A.house" and "B.house" parented to the "LODHouse" node. A.house will
become the first LOD and B.house the second LOD level.
Blender i3d exporter
Installing I3D exporter plugin (Windows)
- Install Blender 2.6.2 32 or 64bit or higher here: http://www.blender.org/download/get-blender/
- Extract the io_scene_i3d folder from the exporter zip archive and place it in your Blender addons folder.
Example addons folder path: C:\Program Files\Blender Foundation\Blender\2.62\scripts\addons
- Launch Blender and go to "File -> User Preferences...".
- Click on "Install Addon..." in the "Addons" section.
- Browse to the io_scene_i3d folder previously extracted.
Example path: C:\Program Files\Blender Foundation\Blender\2.62\scripts\addons\io_scene_i3d
- Select the file __init__.py and click "Install Addon...".
- Select and enable the "Import-Export: I3D format" addon in the right list.
Hint: Apply the "Community" and "Import-Export" filters on the left for less items to browse.
- Click on the "Save as Default" button to automatically load the addon each time you launch Blender.
- Now, you can export with "File -> Export" to "GIANTS (.i3d)".
Autodesk 3ds MAX and Autodesk Maya are registered trademarks of the Autodesk Corp.
Content Creation - Artwork Guide
Autodesk Maya
Set correct normals
Adjust normals to match topology. Use hard edges for cubic and soft edges for curved surfaces.
Disable double sided option
Remove zero area polygons
Eliminate T-Injunction
Autodesk 3DS MAX
Remove useless polygons
Generate normalmaps for details
Generate Normalmaps for appropriate details in the geometry.
Flip edges
Flip/turn edges to match topology of the polygon mesh.
Retriangulation of the polygon mesh is a good starting point. This works only with Editable Polys
Convert to a Editable Mesh
Flip/Turn individual edges manually
Disable two sided material option
Two sided materials are not supported in the engine and have to be replaced by an inverted copy of the affected polygons.
Used operations
- Disable 2-Sided checkbox material property
- Select Mesh
- Clone
- Select clone
- Modifier: Polygon mode, select affected polygons and flip normals
- Delete unused faces from cloned mesh
- Attach cloned mesh to original mesh
- Modifier: Vertex mode and weld vertices
Set correct normals
Adjust normals to match topology. Use hard edges for cubic and soft edges for curved surfaces.
Used operations
- Select Mesh
- Normal Modifier
- Select affected normals and break them
- Fine tune normals manually (optional)
Merge to single polygon mesh
Merge groups of objects to a single mesh for optimal in-game performance.
Used operations
- Select one object
- Modifier: Object mode and attach list
- Select objects to merge
Texturing
JPEG compression artifacts
Never use the JPG format to store textures. Each time a jpg file is
stored the quality of the image decreases. Even if the compression
quality is set to 100%.
Saved once as png from orignal texture (left), saved multiple times as jpg (right)
Non-Power-of-Two textures
Use power-of-two textures but you can use non-squared textures. As a general
rule you should make your textures as big as they are in pixels when beeing
projected onto the screen in the game.
Eg. if you want to texture a fullscreen squad, you probably want to use a 1024x1024px to 2048x1024px sized texture.
Normalmap textures should be at least as big as the diffuse textures or even twice as big.
Texture size
Texture size must be 2048x2048 pixels or smaller. Bigger textures are not
supported on older graphics cards (eg. GeforceFX, Radeon9xxx, Radeon8xx and Intel onboard graphic chips).
Generate maps for parallaxmapping
Requirements
The Nvidia Photoshop Normal Map Filter plug-in from Nvidia. This plug-in can be downloaded from
developer.nvidia.com
Description
- First, you need a greyscale image or a bump map as the base for the Parallax Map. Please note that
most of the time, you will have to convert this greyscale image to a RGB image. You can do this with
select Image > Mode > RGB Color (menu bar).
- Go to the "Window" tab and select "Show Channels". In the channel window, click the
'Create New Channel' icon on the bottom right, just left of the Trash Icon. A new channel "Alpha 1" will appear.
- Click one of the Color channels, press CTRL-A then CTRL-C to copy the channel informations to the clipboard for later use.
- In the channel window select the RGB channel with shift and the
left mouse button. All channel tabs should now be marked or accordingly
selected.
- Go now to the "Filter" menu and select "nvTools/NormalMapFilter...". In the Height Generation section, select InvertY.
To create a Parallax Map you also have to select Height in the Alpha Field Section.
With the "Scale" setting you can alter the intensity (depth) of the normal map. The "Filter Type" setting,
defines how precise the normal map has to be. "4 sample" means precise, whereas 9x9 means rough. Click "OK" to proceed.
- You should now have a normal map, combined with a bump map in the Alpha Channel.
- Now you have to insert the previous saved channel information to the "Alpha 1" channel.
Select the alpha channel with your left mouse button and then press CTRL-V to paste the Heightmap image into the channel.
- To increase the quality of your Parallax Map you can try also to apply a low
gaussian filter to the alpha channel. Further you can reduce the contrast to get better results.
- Save the Image as png with transparency (RGBA 32 bit).
I3D Format
Introduction
I3D is an eXtensible Markup Language (XML) file format.
A vaild I3D file has up to seven parts: Textures, Materials, Shapes, Dynamics, Scene graph, Animation and Userdata.
Dependent on application each part can be omitted.
The XML Schema language is used to describe the I3D feature set. Download: I3D 1.6 Schema
Features
- Scenegraph hierarchy with
- TransformGroups/Bones: translation, rotation, scale and visibility
- Lights: ambient, point, directional and spot lights
- Cameras: field of view, near and far clipping plane
- Shapes: meshes and nurbs curves (supports geometry instancing)
- Particle Systems
- Animation
- Animation sets
- Clips
- Keyframes: translation, rotation, scale and visibility
- Morph Targets
- User Attributes
- Dynamics
- Particle Systems (Sprite based)
- Surface Emitter
- Gravity Fields
- Air Fields
- Meshes
- Vertices
- Normals
- Vertex colors
- Skin weights
- Texture coordinates (including multiple uv sets)
- Faces (vertex color, normals and texture coordinates per face)
- Curves
- Shader/Materials
- Multitextures (arbitrary layered textures)
- Lightmaps
- Bumpmaps/Normalmaps
- Environmentmaps
- Specularmaps
Overview
Specification
General Layout
<?xml version="1.0" encoding="iso-8859-1"?>
<i3D name="MyScene" version="1.6" xsi:noNamespaceSchemaLocation="http://i3d.giants.ch/schema/i3d-1.6.xsd">
<Files>..</Files>
<Materials>..</Materials>
<Shapes>..</Shapes>
<Dynamics>..</Dynamics>
<Scene>..</Scene>
<Animation>..</Animation>
<UserAttributes>..</UserAttributes>
</i3D>
Coordinate Systems
I3D uses a right-handed coordinate system.
Files
All used file references are defined here. File handles are mapped to the corresponding filenames.
<Files>
<File fileId="1" filename="myTexture1.png" relativePath="true"/>
...
</Files>
Materials
Materials used in the materials attribute of Shape nodes within the scenegraph section are defined in this section.
<Materials>
<Material name="myShader_001" materialId="12">
<Texture fileId="1"/>
</Material>
...
</Materials>
Shapes
Shapes are defined here and referenced from the scene graph section.
This mechanism allows multiple instancing of shapes.
Dynamics
Dynamic objects are defined in this part and referenced from the Scene graph section.
<Dynamics>
<ParticleSystem name="emitter1" dynamicId="1" type="sprite" rate="0.004" lifespanInfinite="false"
speed="0.01" speedRandom="0" tangentSpeed="0" normalSpeed="1" lifespan="10000" maxCount="1000"
spriteScaleX="50" spriteScaleY="50"
depthSort="false" emitterShape="pCubeShape1" shader="lambert2">
<Gravity force="0 -3 0"/>
<Air velocity="2 0 0"/>
</ParticleSystem>
</Dynamics>
Scenegraph
The Scene graph hierarchy (transformations, bones, joints, shapes, lights, cameras and particle systems) are stored in this
section. Shapes, materials and particle systems are stored as references.
<Scene>
<TransformGroup name="myGroup1" translation="1.25 0 -9" nodeId="47">
<Shape name="mySphere" materialIds="1" shapeId="1" nodeId="48"/>
<TransformGroup name="myGroup2" rotation="90 0 270" nodeId="49">
<Shape name="mySphere2" materialIds="1" shapeId="2" nodeId="50"/>
</TransformGroup>
...
</TransformGroup>
...
</Scene>
Scene graph node types
TransformGroup
| Attribute |
Description |
Type |
Optional |
| name |
Name of TransformGroup |
string |
no |
| translation |
Translation |
complex |
yes |
| rotation |
Rotation, euler order ZY'X'' |
complex |
yes |
| scale |
Scale |
complex |
yes |
| visibility |
Visibility |
boolean |
yes |
| kinematic |
Kinematic object |
boolean |
yes |
| dynamic |
Dynamic object |
boolean |
yes |
| static |
Static object |
boolean |
yes |
| compound |
Compound parent |
boolean |
yes |
| compoundChild |
Compound child |
boolean |
yes |
| collision |
Enable collision |
boolean |
yes |
| ccd |
Continuous collision detection |
boolean |
yes |
| trigger |
Trigger |
boolean |
yes |
| cloth |
Cloth |
boolean |
yes |
| restitution |
Restitution |
float |
yes |
| staticFriction |
Static friction |
float |
yes |
| dynamicFriction |
Dynamic friction |
float |
yes |
| skinWidth |
Skin width |
float |
yes |
| density |
Density |
float |
yes |
| collisionMask |
Collision mask |
integer |
yes |
| joint |
Joint |
boolean |
yes |
| breakableJoint |
Breakable joint |
boolean |
yes |
| jointBreakForce |
Joint break force |
double |
yes |
| jointBreakTorque |
Joint break torque |
double |
yes |
| projection |
Enable joint projection |
boolean |
yes |
| xAxisDrive |
Enable x axis drive |
boolean |
yes |
| yAxisDrive |
Enable y axis drive |
boolean |
yes |
| zAxisDrive |
Enable z axis drive |
boolean |
yes |
| drivePos |
Enable drive position |
boolean |
yes |
| projDistance |
Projection distance |
double |
yes |
| driveForceLimit |
Drive force limit |
double |
yes |
| driveSpring |
Drive spring |
double |
yes |
| driveSpring |
Drive spring |
double |
yes |
| solverIterationCount |
Solver iteration count |
integer |
yes |
| rotMinX |
Rotation minimum x |
double |
yes |
| rotMinY |
Rotation minimum y |
double |
yes |
| rotMinZ |
Rotation minimum z |
double |
yes |
| rotMaxX |
Rotation maximum x |
double |
yes |
| rotMaxY |
Rotation maximum y |
double |
yes |
| rotMaxZ |
Rotation maximum z |
double |
yes |
| transMinX |
Translation minimum x |
double |
yes |
| transMinY |
Translation minimum y |
double |
yes |
| transMinZ |
Translation minimum z |
double |
yes |
| transMaxX |
Translation maximum x |
double |
yes |
| transMaxY |
Translation maximum y |
double |
yes |
| transMaxZ |
Translation maximum z |
double |
yes |
| objectMask |
Object mask |
integer |
yes |
| nodeId |
Node reference id, used for Animation and UserAttributes section |
integer |
no |
| Element |
Description |
Type |
Cardinality |
| TransformGroup |
Transform group node |
complex |
0..N |
| Shape |
Shape node |
complex |
0..N |
| Camera |
Camera node |
complex |
0..N |
| Light |
Light node |
complex |
0..N |
| Dynamic |
Dynamic node (eg. particle system) |
complex |
0..N |
Shape
| Attribute |
Description |
Type |
Optional |
| shapeId |
Shape reference id (reference to shapes section) |
string |
no |
| materialIds |
List of used material ids (reference to materials section) |
string |
no |
| skinBindNodeIds |
Skin bind node ids |
string |
yes |
| castsShadows |
Casts shadows |
boolean |
yes |
| receiveShadows |
Receive shadows |
boolean |
yes |
| clipDistance |
Clip distance |
double |
yes |
| nonRenderable |
Non renderable |
boolean |
yes |
Camera
| Attribute |
Description |
Type |
Optional |
| fov |
Field of view |
double |
no |
| nearClip |
Near clipping plane |
double |
no |
| farClip |
Far clipping plane |
double |
no |
Light
| Attribute |
Description |
Type |
Optional |
| type |
Light type |
string |
no |
| diffuseColor |
Diffuse color |
complex |
yes |
| emitDiffuse |
Emit diffuse |
string |
yes |
| specularColor |
Specular color |
complex |
yes |
| emitSpecular |
Emit specular |
string |
yes |
| castShadowMap |
Cast shadow Map |
boolean |
yes |
| depthMapBias |
Depth map bias |
double |
yes |
| depthMapResolution |
Depth map resolution |
integer |
yes |
| shadowFarDistance |
Shadow far fistance |
double |
yes |
| shadowTextureOffset |
Shadow texture offset |
double |
yes |
| shadowExtrusionDistance |
Shadow extrusion distance |
double |
yes |
| decayRate |
Decay rate |
integer |
yes |
| coneAngle |
coneAngle |
double |
yes |
| dropOff |
dropOff |
integer |
yes |
| projTexture |
Projective texture name |
string |
yes |
| range |
Range |
double |
no |
5 Dynamic
| Attribute |
Description |
Type |
Optional |
| dynamicId |
Dynamic id (reference to dynamics section) |
string |
no |
Example
<Scene>
<Camera name="camera1" translation="0 2.00 6.47"
rotation="-13.07 0 0" fov="54.43" nearClip="0.01" farClip="1000"
nodeId="34"/>
<Light name="pointLight1" translation="6.56 5.76
4.04" type="point" diffuseColor="1 1 1" range="10" nodeId="35"/>
<TransformGroup name="group1" translation="1.35 0.96 0.81" nodeId="36">
<Shape name="pCubeShape1"
rotation="-23.94 6.49 14.29" materialIds="1 2" shapeId="1"
nodeId="37"/>
</TransformGroup>
</Scene>
Animation
Motions are defined in this part. Clips are the basic building block and allow Non-Linear Animation by composing multiple clips.
<Animation>
<AnimationSets>
<AnimationSet name="walk_crouched">
<Clip name="walk_crouched1Source" duration="1000">
<Keyframes nodeId="Hips">
<Keyframe time="0" translation="-0.467 13.504 39.842"/>
<Keyframe time="333" translation="-0.559 12.915 39.370"/>
<Keyframe time="1000" translation="-2.610 11.917 35.462"/>
</Keyframes>
<Keyframes node="Chest">
<Keyframe time="0" rotation="-1.013 -4.465 0.890"/>
<Keyframe time="666" rotation="10.009 -6.667 4.381"/>
<Keyframe time="1000" rotation="11.638 -3.906 4.115"/>
</Keyframes>
</Clip>
</AnimationSet>
</AnimationSets>
</Animation>