Eksport z Blendera - moliwoci i zaoenia
================================================================================

SIATKA
======

- JEST wsparcie dla wielu obiektw. Pozostaj osobnymi obiektami, nazwy obiektw
(nie siatek "ME") zostaj zachowane.

- JEST wsparcie dla materiaw. Zachowane zostaj wycznie nazwy materiaw.
Obiekt moe nie mie materiau - wwczas nazwa jego materiau bdzie acuchem
pustym.

- JEST wsparcie dla wielu materiaw w jednym obiekcie. Jeli siatka uywa wielu
materiaw, zostaje rozdzielona na osobne obiekty, ktrych nazwy budowane s
jako: "<Nazwa_obiektu>.<Nazwa_materiau>".

- JEST wsparcie dla transformacji caych obiektw - ich translacji, rotacji i
skalowania.

- JEST eksport wsprzdnych (koordynatw) tekstur. Siatka moe nie mie
wsprzdnych tekstur - wtedy wszystkie s zerowe (0,0). Jeli siatka ma wiele
zestaww wsprzdnych tekstur, eksportowane s te z zestawu ustawionego jako
aktywny (nie tego ustawionego jako renderowany).

- Kwestia normalnych i wygadzania jest zoona. Blender w ogle nie udostpnia
dla skryptu prawidowych normalnych, a wektorw stycznych w ogle nie wspiera.
Tote eksporowane i respektowane JEST JEDYNIE ustawienie kta "Degr" dla funkcji
"AutoSmooth". Sam stan wczenia funkcji "AutoSmooth" NIE JEST eksportowany, bo
w ogle nie jest dostpny dla skryptu. NIE JEST respektowane rwnie ustawienie
Smooth (Set Smooth / Set Solid) dla poszczeglnych cianek. Wektory normalne i
styczne s zawsze wygadzane na podstawie kta i wyliczane w programie Tools
przez NVMeshMender. Nie naley uywa w Tools generowania wektorw Tangent i
Binormal kiedy jakie obiekty nie posiadaj poprawnych wsprzdnych tekstury -
program moe si wysypa albo oblicza bdne wektory.

- NIE ma wsparcia dla obiektw typu krzywa (Curve), kratownica (Lattice), meta
(MBall) czy powierzchni (Surf). Jeli s obecne, wywietlaj ostrzeenie. Aby je
wyeksportowa, zamie je na siatki.

- NIE ma wsparcia dla wiate (Lamp) i kamer (Camera) - te obiekty s
ignorowane.

- NIE wolno parentowa obiektw do poszczeglnych wierzchokw innych obiektw,
aczkolwiek nie sprawdzam tego bo nie wiem jak to sprawdza w Python API.

- NIE wolno parentowa jednych obiektw do drugich. Wyjtkiem s kamery, wiata
itp. (ktre i tak s ignorowane) oraz parentowanie siatek do obiektu Armature
(lub jednej z jego koci) celem skinningu.


KOCI
=====

- Co najwyej JEDEN obiekt Armature moe znajdowa si na scenie.

TODO... | tylko e teraz ju nie pamitam co tu napisa wicej...


ANIMACJA
========

- Dziaaj TYLKO krzywe IPO dla koci w Pose Mode.

- NIE dziaaj krzywe IPO modyfikujce prdko czasu.

- Jeli pierwszy klucz zaczyna si w IPO wczeniej lub pniej ni w klatce
zerowej, animacja zostaje przesunita tak, e pierwszy klucz to pocztek
animacji.

- Podczas konwersji miary czasu w klatkach (Blender) na miar w sekundach (QMSH)
respektowane jest ustawienie liczby klatek na sekund (Frs/sec) znajdujce si
pord ustawie sceny (F10).

TODO... | tylko e teraz ju nie pamitam co tu napisa wicej...


Format .qmsh.tmp
================================================================================

Format poredni eksportu modeli z Blendera.
Plik tekstowy. Kodowanie ANSI. Koniec wiersza dowolny. Format jak w module
Tokenizer z CommonLib.

Skadnia:

QMSH TMP 10
objects {
	mesh <Nazwa_obiektu(string)> {
		<Pozycja_obiektu>
		<Orientacja_obiektu>
		<Rozmiar_obiektu>
		<Parent_armataure(string)> <Parent_bone(string)>
		<Auto_smooth_angle(float)>
		materials <Liczba_materiaw> {
			<Nazwa_materiau>
			<Nazwa_materiau>
			...
		}
		vertices <Liczba_wierzchokw> {
			<Pozycja_wierzchoka>
			<Pozycja_wierzchoka>
			...
		}
		faces <Liczba_cianek> {
			<Liczba_wierzchokw> <Nr_materiau> <Czy_smooth> <Indeks_wierzchoka> <Wsp_tekstury> <Indeks_wierzchoka> <Wsp_tekstury> ...
			<Liczba_wierzchokw> <Nr_materiau> <Czy_smooth> <Indeks_wierzchoka> <Wsp_tekstury> <Indeks_wierzchoka> <Wsp_tekstury> ...
			...
		}
		vertex_groups {
			<Nazwa(string)> { <Indeks(int)> <Waga(float)> <Indeks> <Waga> <Indeks> <Waga> ... }
			<Nazwa(string)> { <Indeks(int)> <Waga(float)> <Indeks> <Waga> <Indeks> <Waga> ... }
			...
		}
	}
	armature <Nazwa_obiektu(string)> {
		<Pozycja_obiektu>
		<Orientacja_obiektu>
		<Rozmiar_obiektu>                
		<Vertex_groups(0|1)> <Envelopes(0|1)>
		bone <Nazwa(string)> {
			<Parent(string)>
			head <Head_BONESPACE> <Head_ARMATURESPACE> <Head_radius>
			tail <Tail_BONESPACE> <Tail_ARMATURESPACE> <Tail_radius>
			<Roll_BONESPACE(float)> <Roll_ARMATURESPACE(float)>
			<Length(float)> <Weight(float)>
			
			<Matrix_BONESPACE(matrix3x3)>
			
			<Matrix_ARMATURESPACE(matrix4x4)>
		}
		...
	}
}
actions {
	<Nazwa_Action(string)> {
		<Nazwa_Channel(string)> {
			<Nazwa_Curve(string)> <Interpolation_method(identifikator)> <Extend_method(identyfikator)> { <X(float)>,<Y(float)> <X>,<Y> ... }
			<Nazwa_Curve(string)> <Interpolation_method(identifikator)> <Extend_method(identyfikator)> { <X(float)>,<Y(float)> <X>,<Y> ... }
			...
		}
		...
	}
	...
}
params {
	fps = <Frames_per_second(int)>
}

Gdzie:
- Pozycja_obiektu - pozycja rodka danego obiektu:
  <x>,<y>,<z>
- Orientacja_obiektu - kty Eulera:
  <x>,<y>,<z>
- Rozmiar_obiektu - wspczynniki skalowania:
  <x>,<y>,<z>
- Parent_armature (string) - nazwa obiektu Armature do ktrego ta siatka jest
  przyczepiona lub "", jeli do adnego
- Parent_bone (string) - nazwa koci, do ktrej caa ta siatka jest
  przyczepiona. acuch niepusty tylko, jeli jest Parent_armature i caa siatka
  jest do jednej koci, a nie skinning.
- Nazwa_materiau - (acuch)
- Pozycja_wierzchoka:
  <x>,<y>,<z>
- Indeks_wierzchoka (uint) - odnosi si do tablicy wierzchokw, zawsze w odpowiednim zakresie
- Wsp_tekstury:
  <x>,<y>
- Nr_materiau:
  Liczba cakowita bez znaku, 0..15
  Moe wykracza poza rozmiar listy materiaw.
- Czy_smooth: 0 lub 1

- Parent - nazwa koci nadrzdnej.
  Jeli to jest ko gwnego poziomu, acuch pusty.
- Head_BONESPACE, Head_ARMATURESPACE
  Tail_BONESPACE, Tail_ARMATURESPACE
  To wektory trzech floatw: <x>,<y>,<z>
- Head_radius, Tail_radius (float)
- Matrix_BONESPACE, Matrix_ARMATURESPACE
  Macierz, w formacie (zalenie od wymiaru):
  <a11>, <a12>, <a13>, <a14>;
  <a21>, <a22>, <a23>, <a24>;
  <a31>, <a32>, <a33>, <a34>;
  <a41>, <a42>, <a43>, <a44>;

- Interpolation_method (identyfikator): moe by jedna z wartoci:
  CONST, LINEAR, BEZIER
- Extend_method (identyfikator): moe by jedna z wartoci:
  CONST, EXTRAP, CYCLIC, CYCLIC_EXTRAP

Obiektw mesh moe pojawi si kilka. Obiekt armature zero lub jeden. Kolejno
obiektw jest dowolna.

Materiaw jest midzy 0..16.
Wierzchokw w cianie jest midzy 3..4.


