openBVE objektumpéldák
Leírás az objektumkészítéshez használható parancsokról
A leírás a BVE / openBVE-hez készíthető B3D kiterjesztésű objektumok
készítéséhez néhány példát ír le.
Utolsó frissítés 2009.07.29.
Tartalomjegyzék
Általános
tudnivalók, fogalmak
Alappélda
egy szemből készített textúra felhasználására
Példa egy
szemből készített textúra több felületben történő felhasználására
A koordinátatengelyek metszéspontját origónak nevezzük. Az openBVE-ben az objektumokat gyakorlatilag egy koordináta-rendszer szerint kell elhelyezni. A BVE-ben az origó a 0. vágány vágánytengelyének (X tengely), a sín koronaszintjének (Y tengely), és az aktuális szelvényszámnak (Z tengely) a metszéspontja. Az objektumok elhelyezését ennek megfelelően kell meghatározni.
A vasúti pálya helyének meghatározása a kezdőponttól mért távolságokkal történik, ez a szelvényezés.
Az openBVE-ben alapértelmezésben méterben kell megadni a szelvényszámokat.
A sín felső érintősíkjának abszolút magassága (íves pályán a belső sínszálon mérve).
A nyomtávolság felezőpontjainak vonala. (Ívben nyombővítés esetén a külső sínszáltól mért fél nyomtávolságra fekszik.)
A leírás bővebb megértéséhez javasolt a következő leírások tanulmányozása:
|
Leírás |
Írta |
Link |
|
BVE objektumkészítés |
Krisz |
|
|
Primitívek textúrázása |
Alex |
http://www.bveklub.hu/informaciok/primitivek-texturazasa.pdf |
Az objektumok készítése során sokszor fordul elő, hogy egy szemből készített fényképet szeretnénk felhasználni.
Példa egy felület elkészítésre, amely egy szemből készített fényképből készíthető:
Képzeletben álljunk szembe a felülettel (mint amikor fényképeztük).
A felület 4 sarkának koordinátáit határozzuk meg, és a bal alsó saroktól kiindulva az óramutató járásával megegyező irányban haladva sorrendben írjuk le azokat.
A példában szereplő kép, szélessége 0,5 méter, magassága 0,55 méter, hosszúsága nincs.
|
[MeshBuilder] Vertex 0.0,0.0,0 ; 0. vertex = bal alsó sarok Vertex 0.0,0.55,0 ; 1. vertex = bal felső sarok Vertex 0.5,0.55,0 ; 2. vertex = jobb felső sarok Vertex 0.5,0.0,0 ; 3. vertex = jobb alsó sarok |
A Face 0,1,2,3 használatával a pontokat az óramutató járásával megegyező irányban összekötjük:

|
Face 0,1,2,3 |
Beírjuk a fájlba a kívánt textúrát
|
[Texture] Load fekezes.bmp |
Ezután beírjuk a következő parancsokat, pontosan ugyanígy:
|
Coordinates 0,0,1 Coordinates 1,0,0 Coordinates 2,1,0 Coordinates 3,1,1 |
Ekkor a következő található a fájlban:
|
[MeshBuilder] Vertex 0.0,0.0,0 ; bal alsó sarok Vertex 0.0,0.5,0 ; bal felső sarok Vertex 0.5,0.5,0 ;jobb felső sarok Vertex 0.5,0.0,0 ;jobb alsó sarok Face 0,1,2,3 [Texture] Load fekezes.bmp Coordinates 0,0,1 Coordinates 1,0,0 Coordinates 2,1,0 Coordinates 3,1,1 |
Ez a fájl a képet szemből jeleníti meg.
Amennyiben hosszanti irányú objektumot akarunk készíteni (például a vágánnyal párhuzamosan futó falat), akkor a koordinátákat értelemszerűen úgy határozzuk meg, hogy képzeletben forduljunk a felülettel szembe.
A Coordinates parancsok
változtatása a fenti példára:
A változtatások az eredeti példára vonatkoznak. Az 1. oszlopban lévő számok nem változnak!
|
Változtatás |
Hatás |
|
A 2. oszlopban az 1 értékek helyett írjunk 2-t: Coordinates 0,0,1 Coordinates 1,0,0 Coordinates 2,2,0 Coordinates 3,2,1 |
A kép vízszintesen többszöröződik a megadott arányban (jelen esetben 2, azaz 2x jelenik meg), a megadott méreten belül, azaz a kép összezsugorodva jelenik meg:
|
|
A 2. oszlopban az 1 értékek helyett írjunk 0.5-t: Coordinates 0,0,1 Coordinates 1,0,0 Coordinates 2,0.5,0 Coordinates 3,0.5,1 |
A kép textúrája vízszintesen csak a megadott arányban jelenik meg. A kép a vízszintesen megadott aránytól kezdődően (jelen esetben 0, azaz a pontosan a bal szélétől) jelenik meg a kép jobb oldalán megadott arányig (jelen esetben 0.5, azaz a feléig) a megadott méreten belül, azaz a kép vízszintesen nyújtott lesz.
|
|
A 2. oszlopban a 0 értékeket módosítsuk 0.5-re: Coordinates 0,0.5,1 Coordinates 1,0.5,0 Coordinates 2,1,0 Coordinates 3,1,1 |
A kép textúrája vízszintesen csak a megadott arányban jelenik meg. A kép a vízszintesen megadott aránytól kezdődően (jelen esetben 0.5, azaz a felétől) jelenik meg a kép jobb oldalán megadott arányig (jelen esetben 1, azaz pontosan a kép jobb széléig) a megadott méreten belül, azaz a kép vízszintesen nyújtott lesz.
|
|
A 3. oszlopban az 1 értékek helyett írjunk 2-t: Coordinates 0,0,2 Coordinates 1,0,0 Coordinates 2,1,0 Coordinates 3,1,2 |
A kép függőlegesen többszöröződik a megadott arányban (jelen esetben 2, azaz 2x jelenik meg), a megadott méreten belül, azaz a kép összezsugorodva jelenik meg:
|
|
A 3. oszlopban az 1 értékek helyett írjunk 0.5-t: Coordinates 0,0,0.5 Coordinates 1,0,0 Coordinates 2,1,0 Coordinates 3,1,0.5 |
A kép textúrája függőlegesen csak a megadott arányban jelenik meg. A kép a függőlegesen megadott aránytól kezdődően (jelen esetben 0, azaz a pontosan a tetejétől) jelenik meg a kép alján megadott arányig (jelen esetben 0.5, azaz a feléig) a megadott méreten belül, azaz a kép függőlegesen nyújtott lesz.
|
|
A 3. oszlopban az 0 értékek helyett írjunk 0.5-t: Coordinates 0,0,1 Coordinates 1,0,0.5 Coordinates 2,1,0.5 Coordinates 3,1,1 |
A kép textúrája függőlegesen csak a megadott arányban jelenik meg. A kép a függőlegesen megadott aránytól kezdődően (jelen esetben 0.5, azaz a felétől) jelenik meg a kép alján megadott arányig (jelen esetben 1, azaz pontosan az aljáig) a megadott méreten belül, azaz a kép függőlegesen nyújtott lesz.
|
|
A 2. oszlopban a 0 és 1 értékeket cseréljük fel: Coordinates 0,1,1 Coordinates 1,1,0 Coordinates 2,0,0 Coordinates 3,0,1 |
A kép vízszintesen tükröződik:
|
|
A 3. oszlopban a 0 és 1 értékeket cseréljük fel: Coordinates 0,0,0 Coordinates 1,0,1 Coordinates 2,1,1 Coordinates 3,1,0 |
A kép függőlegesen tükröződik:
|
Ez a példa egy olyan felület készítését írja le, amikor egyetlen textúrát több felületben szeretnénk létrehozni, például egy nem egyenes fal készítéséhez.
A textúrát el kell osztani annyi felé, ahány felületből szeretnénk az objektumot elkészíteni. A példában 4 darabra kerül felosztásra a textúra.
Az eredeti példát követve így 4 felületünk lesz (piros számokkal jelzettek).

Ehhez az eredeti példa szerint a koordináták meghatározása után írjuk meg a felületeket, és a felületekhez a bal alsó sarkokból kiindulva számozzuk be a pontokat. Az objektum magasságilag (Y-tengelyen) 0.0-4.0 méterek között legyen a példa szerint:

|
;1 felület [MeshBuilder] Vertex 0.0,3.0,0 ; 1.felület bal alsó
sarok Vertex 0.0,4.0,0 ; 1.felület bal
felső sarok Vertex 0.5,4.0,0 ; 1.felület jobb
felső sarok Vertex 0.5,3.0,0 ; 1.felület jobb alsó
sarok ;2 felület [MeshBuilder] Vertex 0.0,2.0,0 ; 2.felület bal
alsó sarok Vertex 0.0,3.0,0 ; 2.felület bal felső
sarok Vertex 0.5,3.0,0 ; 2.felület jobb
felső sarok Vertex 0.5,2.0,0 ; 2.felület jobb
alsó sarok ;3 felület [MeshBuilder] Vertex 0.0,1.0,0 ; 3.felület bal alsó
sarok Vertex 0.0,2.0,0 ; 3.felület bal
felső sarok Vertex 0.5,2.0,0 ; 3.felület jobb
felső sarok Vertex 0.5,1.0,0 ; 3.felület jobb alsó
sarok ;4 felület [MeshBuilder] Vertex 0.0,0.0,0 ; 4.felület bal
alsó sarok Vertex 0.0,1.0,0 ; 4.felület bal felső
sarok Vertex 0.5,1.0,0 ; 4.felület jobb
felső sarok Vertex 0.5,0.0,0 ; 4.felület jobb
alsó sarok |
Észrevehetjük, hogy az 1. felület bal alsó sarka egyezik a 2. felület bal felső sarkával, illetve az 1. felület jobb alsó sarka egyezik a 2. felület jobb felső sarkával. Ezekből az egyiket vegyük ki, mert feleslegesek, és egy Meshbuilder szakaszba tegyük a pontokat:
|
[MeshBuilder] ;1 felület Vertex 0.0,3.0,0 ; 1.felület bal alsó
sarok; 2. felület bal felső sarok Vertex 0.0,4.0,0 ; 1.felület bal
felső sarok Vertex 0.5,4.0,0 ; 1.felület jobb
felső sarok Vertex 0.5,3.0,0 ; 1.felület jobb alsó
sarok; 2. felület jobb felső sarok ;2 felület Vertex 0.0,2.0,0 ; 2.felület bal
alsó sarok; 3. felület bal felső sarok Vertex 0.5,2.0,0 ; 2.felület jobb
alsó sarok; 3. felület jobb felső sarok ;3 felület Vertex 0.0,1.0,0 ; 3.felület bal alsó
sarok; 4. felület bal felső sarok Vertex 0.5,1.0,0 ; 3.felület jobb alsó
sarok; 4. felület jobb felső sarok ;4 felület Vertex 0.0,0.0,0 ; 4.felület bal
alsó sarok Vertex 0.5,0.0,0 ; 4.felület jobb
alsó sarok |
A pontok indexszámai (sorrendisége) eszerint változott:

Észrevehetjük, hogy valamiféle rendszerbe kerültek a számozások, kivéve a felső részt. Az 1. felületben módosítsuk a sorrendet úgy, hogy fentről lefelé és balról jobbra sorrendben 0-1, majd 2-3, és tovább változatlanul 4-5, 6-7, 8-9 legyen. Ezeket nevezzük el vertex-párosoknak.
|
[MeshBuilder] ;1 felület Vertex 0.0,4.0,0 ; 1.felület bal
felső sarok Vertex 0.5,4.0,0 ; 1.felület jobb
felső sarok Vertex 0.0,3.0,0 ; 1.felület bal alsó
sarok; 2. felület bal felső sarok Vertex 0.5,3.0,0 ; 1.felület jobb alsó
sarok; 2. felület jobb felső sarok ;2 felület Vertex 0.0,2.0,0 ; 2.felület bal
alsó sarok; 3. felület bal felső sarok Vertex 0.5,2.0,0 ; 2.felület jobb
alsó sarok; 3. felület jobb felső sarok ;3 felület Vertex 0.0,1.0,0 ; 3.felület bal alsó
sarok; 4. felület bal felső sarok Vertex 0.5,1.0,0 ; 3.felület jobb alsó
sarok; 4. felület jobb felső sarok ;4 felület Vertex 0.0,0.0,0 ; 4.felület bal
alsó sarok Vertex 0.5,0.0,0 ; 4.felület jobb
alsó sarok |

Ezután az egyes felületek pontjait az óramutató járásával megegyező irányban kössük össze, és ne felejtsük beírni a textúra nevét sem:
|
face 2,0,1,3 ; 1. felület face 4,2,3,5 ; 2. felület face 6,4,5,7 ; 3. felület face 8,6,7,9 ; 4. felület [Texture] Load fal.bmp |
Ezután az 1. felülethez a Coordinates parancsokat az eredeti példát követve írjuk be:
|
Coordinates 0,0,0 ; 1.
felület bal felső sarok Coordinates 1,1,0 ; 1.
felület jobb felső sarok Coordinates 2,0,1 ; 1.
felület bal alsó sarok Coordinates 3,1,1 ; 1.
felület jobb alsó sarok |
A 2. felületben a 2. és 3. Coordinates már adott, így
azokat nem változtathatjuk hiszen akkor az 1. felületben változna a textúra
megjelenése. Azonban függőlegesen a textúrának egy egységnyit kell megjelennie,
így a Coordinates 3. számjegyéhez írjunk 2-t. Így ez NEM többszörözést jelent, hiszen a felső és alsó sarok között
pontosan 1 egység van!
|
Coordinates 2,0,1 ; 2.
felület bal alsó sarok Coordinates 3,1,1 ; 2.
felület jobb alsó sarok Coordinates 4,0,2 ; 3. felület bal alsó
sarok Coordinates 5,1,2 ; 3. felület jobb
alsó sarok |
Ezt követve folytassuk lefelé:
|
Coordinates 6,0,3 Coordinates 7,1,3 Coordinates 8,0,4 Coordinates 9,1,4 |
Ezzel az objektum úgy fog kinézni, hogy a textúránk 4x jelenik meg függőlegesen. Azonban a vertex-párosokhoz tartozó a Coordinates parancs 3. számjegyének módosításával tetszőlegesen változtathatjuk a textúra arányait függőlegesen. A példa szerint az 1 egységnyi textúrát 4 egyenlő részre kell osztani:
|
Coordinates 0,0,0 Coordinates 1,1,0 Coordinates 2,0,0.25 Coordinates 3,1,0.25 Coordinates 4,0,0.50 Coordinates 5,1,0.50 Coordinates 6,0,0.75 Coordinates 7,1,0.75 Coordinates 8,0,1 Coordinates 9,1,1 |
Így az objektum az eredetileg elképzeltek szerint fog megjelenni: A teljes textúra egyszer, de négy darabban. Ha a vertex-párosokban (vertex 0-1, 2-3, 4-5, 6-7, 8-9) a koordináta-pontokat változtatjuk, akkor a textúra a térben „megtörhető”, így hozhatóak létre olyan objektumok, amik nem egyenesek, de egy textúrát kell hozzá alkalmazni (pl egy kör keresztmetszetű fal).
Megjegyzések:
§ A textúra vízszintes irányában (X-irányban) is hasonló módon lehet az arányokat változtatni. Ehhez az objektum/felület elkészítése szerinti Coordinates parancsokban kell a megfelelő számot (általában a 2. számjegy) változtatni.
§ Természetesen tetszőleges számú darabban is készíthető objektum egy textúrából. A példa szerinti 4 darab esetén 4x2 + 2 = 10 pont és 10 Coordinates parancsra van szükség (0-9-ig számozva). 10 darab esetén például 10x2 + 2 = 22 pontra van szükség.

© 2009