.[ ČeskéHry.cz ].
Renderovací funkce přímo ve třídách?

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 19. listopad 2009, 04:01:49    Předmět: Renderovací funkce přímo ve třídách? Odpovědět s citátem

Zdravím ve spolek Laughing

Mám malý dotaz, ale nejprve intro, ve hře na které ted pracuji, má každá třída která je nějak viditelná, vlastní renderovací funkci, a programátor který se přidal a s kterým na té hře pracuji je hodně proti, navrhuje raději jednu třídu která bude schopná renderovat všechny objekty.

No jenže některé třídy jsou hodně komplexní, mají proměnné které ovlivnůjí to jak bude ten objekt vyrenderován, plus obsahují jiné třídy které je nutno taky renderovat, takže by ta třída na renderování musela znát struktůru a logiku všech objektů které bude možno renderovat.

A protože mi to připadalo pěkně trhlé, a myslím si že by to bylo porušení zapouzdření, raději jsem přidal do každé třídy vlatní renderovací funkci, a vytvořil singleton Renderer, který ty třídy používají, jenže ted nemůžeme pokračovat v práci, dokud se neshodneme a nebo neuděláme kompromis.


Takže otázka, jsem pako já a nebo je pako on? Laughing

PS: Těmi třídami myslím třeba, gui, svět, mapu, herní objekty... každá má vlastní renderovací funkci render(), které jsou volané při engine.render()
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 19. listopad 2009, 05:22:11    Předmět: Odpovědět s citátem

Myslím, že ten programátor má pravdu. Nemusíš nutně hrát na zapouzdření. Cpát všechno do jedné třídy taky není dobrý a vlastně to nic nezapouzdřuje, když je uvnitř jednoho objektu úplně všechno. Základ je rozdělit velké třídy na menší ale obecnější entity, tj. třeba oddělit ostatní data (herní, fyzikální, ...) od grafických dat, nemít to všechno v jedné třídě. Tzn. budeš mít třeba obecný grafický objekt, který bude mít svoji geometrii a parametry materiálů a bude umět sám sebe vyrenderovat. Nepotřebuje znát nic víc. Jiný objekt, co načítá grafická data, ho může inicializovat. Herní objekt může občas během hry změnit jeho parametry (především jeho pozici, občas i materiály, pokud je to třeba) a může tak maximálně zavolat jeho metodu render.

Ber na vědomí, že v některých enginech to může být rozděleno na mnohem více objektů a ten řetěz může být celkem dlouhý, třeba:
Herní objekt -> Grafický objekt -> State tracker -> Vlastní grafické API -> OpenGL.

Asi bych se také vyvaroval použití singletonu a předával bych ten globální objekt do všech objektů přes parametry funkcí (konstruktory, ...).
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 19. listopad 2009, 09:20:32    Předmět: Odpovědět s citátem

Určitě bych oddělil data podle způsobu užití (grafická, herní, fyzika, ...). Zastřešující třída (Game, Car, Weapon, GUI, ...) by se pak měla starat o synchronizaci těch dat, která jsou sdílená mezi komponentami (např. pozice objektu získaná z fyziky by se měla zpropagovat do grafických dat).

Každá třída, která by byla schopná renderingu, by implementovala rozhraní IRenderable (to je na Tobě, co tam vše bude). Pak bych měl jednu třídu Renderer, do které by se nasypaly všechny potenciálně viditelné objekty implemetující rozhraní IRenderable, a Renderer by se postaral o jejich efektivní vykreslení.

Ještě to zkusím z jiného pohledu (možná to tak bude srozumitelnější): Představ si, že vyvíjíš úplně separátně (nezávisle na sobě) grafický engine (má třídy pro uložení geometrie, textur apod. a jejich vykreslování), fyzikální engine (také má svoje specifické třídy), sound engine (opět nějaké specifické třídy) a herní logiku (zase specifické třídy).
Každý herní objekt pak bude jen třída, která bude obsahovat objekty z výše popsaných enginů a bude se starat o synchronizaci dat mezi nimi (tedy jednotlivými enginy).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
sulthan



Založen: 24. 10. 2007
Příspěvky: 104

PříspěvekZaslal: 22. listopad 2009, 02:13:54    Předmět: Odpovědět s citátem

Mozna me oznacite za vola, ale ja bych se spis zeptal jinak... kdo je vedouci projektu? Proc se odvolavas na nase rozhodnuti a ne na rozhodnuti v ramci tymu.
Podle toho, jak je otazka polozena, tak jses si jisty tim, co je spravne, ne?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 22. listopad 2009, 10:13:18    Předmět: Odpovědět s citátem

sulthan napsal:
Mozna me oznacite za vola, ale ja bych se spis zeptal jinak... kdo je vedouci projektu? Proc se odvolavas na nase rozhodnuti a ne na rozhodnuti v ramci tymu.
Podle toho, jak je otazka polozena, tak jses si jisty tim, co je spravne, ne?


Very Happy LOL - tak na takovej projekt bych se vysral, kde by vedouci rekl bude to tak jak jsem rekl a pritom to bylo jako treba v tomhle pripade reseni ktere neni 2x idealni

presne proto je valna cast programatoru ve firmach nespokojena - protoze jejich sefove jsou presne takovi jako se tu stavis ty - vyzaduji svoje reseni ktere jim nekde vykvetlo v mozku a basta
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Yossarian



Založen: 28. 07. 2007
Příspěvky: 274
Bydliště: Šalingrad

PříspěvekZaslal: 22. listopad 2009, 11:20:27    Předmět: Odpovědět s citátem

rezna napsal:
presne proto je valna cast programatoru ve firmach nespokojena - protoze jejich sefove jsou presne takovi jako se tu stavis ty - vyzaduji svoje reseni ktere jim nekde vykvetlo v mozku a basta

no, a ted si vem, jak by to vypadalo, kdyby si kazdy programator vyvijel podle toho, jak se to zrovna jemu libi Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 22. listopad 2009, 11:22:47    Předmět: Odpovědět s citátem

Yossarian napsal:
rezna napsal:
presne proto je valna cast programatoru ve firmach nespokojena - protoze jejich sefove jsou presne takovi jako se tu stavis ty - vyzaduji svoje reseni ktere jim nekde vykvetlo v mozku a basta

no, a ted si vem, jak by to vypadalo, kdyby si kazdy programator vyvijel podle toho, jak se to zrovna jemu libi Smile


to jsem ale nikde nerekl - ale musi byt obe strany ochotne diskuze a prizpusobeni a zjevne kraviny se nesmi dit

proto taky delam ve firme o par lidech - a i tak narazim na totalni idiocii lidi s titulem z informatiky

velkym firmam se vyhybam obloukem - tam jsou duleziti manageri kteri vi vsechno nejlip a projekty potapi jeden za druhym - akorat ze, ten pruser si vzdycky odserou jejich podrizeni a tenhle manager jde proste jenom k jinymu projektu

tzn. tady vic nez ocenuju snahu autora vlakna o to zjistit si nazor i jinde nez u sebe
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 22. listopad 2009, 17:34:00    Předmět: Odpovědět s citátem

sulthan napsal:
Mozna me oznacite za vola, ale ja bych se spis zeptal jinak... kdo je vedouci projektu? Proc se odvolavas na nase rozhodnuti a ne na rozhodnuti v ramci tymu.
Podle toho, jak je otazka polozena, tak jses si jisty tim, co je spravne, ne?


Nikdo není vedoucí, já jsem sice ten projekt založil, a většinu výzkumu a kódu jsem dělal taky já, ale za vedoucího se nepovažuji, bereme to jako týmovou práci bez vedoucího kde není nikdo kdo by komu poroučel.

Jinak pracujeme na tom tři, ten poslední co se přidal je právě proti, proto jsem se šel poradit tady, chtěl jsem věděl nározy ostatních abych věděl jestli je jeho návrh správný a realný, chci to totiž brzy vydat veřejně jako open source, takže jsem proti nějakým drastickým úpravám, když všechno už funguje.

Ted koukám že jsem to asi špatně popsal protože se mi zdá že mi navrhujete to co mám už navrhnuté.

Tak ted jinak a podrobněji, mám třídu Engine, ta obsahuje funkci render(), která volá renderovací funkce render() pro třídu World a GUI, třída World volá renderovací fukce pro třídu Sektor, která zase volá funkci render pro herní objekty, které vlastní objekt třídy Sprite, která má taky funkci render, a která volá funkci Renderer::RenderSprite().

Ta třída Sprite je zase komplexní objekt, obsahuje objekty třídy SpriteFrame, které jsou vlastně obrázky, má v sobě funkce pro načítání rámů ze souboru, animování a renderování.

Tato třída není ale vlastníkem grafických dat, obsahuje jen odkazy, vlastníkem je SpriteCache, která je volána třídou Sprite při načítání dat.

Jinak, jak jde vidět, tak to renderování vypadá nějak takhle Engine->World->Sektor->Objekt->Sprite->Renderer->OpenGL.

Když se na to podívám, tak funkce Engine::render() je vlastně tím renderovacím podsystémem jak tu navrhujete.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna