Forum » Programiranje » 3D struktura za faces in VC++ tutorial (in malo tezacenja o standardih)
3D struktura za faces in VC++ tutorial (in malo tezacenja o standardih)
d-mon ::
Hello!
Evo, spet mi je dolgcas.
Ker mi je dolgcas sem se odlocil napisati en kratek tutorial o 3d strukturah, ce bo ravno koga kdaj prijelo programirati kaksen spil ali pa kaj podobnega.
Je pa se ena stran tega tutoriala.
Da se fantje (in dekle ) naucite izkoriscati stvari, ki so vam dane in se ne osredotocati prevec na ansi C.
Ker resno...mislite, da bo vasa aplikacija portana po vec operacijskih sistemih?
Kaj ne delajo najboljse igre tudi pod linuxom v nekem windows emulatorju?
Kaj nebi naredili nekaj ze sedaj produktivnega in pustili tezke (ansi C) frike v svojih vodah?
Enostavno vprasanje za gospodice ansi c pa standardi pa to...
Zakaj si sami doma ne pecete kruha? Zakaj ne posadite psenice in jo potem predelate v moko in to moko potem uporabite za kruh, greste na morje in pridelate z vode sol? Zakaj greste v trgovino po kruh, programirate pa vedno od zacetka).
Kaj ni isto ce prvih 5 let delate svoje knjiznice, da si olajsate delo in morajo potem vedno 'z vami okoli skakat', da bo delal vas program se na Linuxu? Isti poop ali smorn (kar vam je ljubse).
MFC, ATL, WTL in ostala sara je zakon :)
Gremo na tutorial:
Kot veste je 3d objekt v igrah ponavadi narejen iz facov. To so ploscate 'plosce'. Te ploscate plosce tvorijo vertexi (to so ogljisca). Za en face potrebujete najmanj 3 vertexe, tako da dobimo dimenzijo - ploskev.
Seveda je teh vertexov lahko tudi vec. Recimo 100 ali vec.
Za primer vzemimo lepo kroznico. Da kroznica zgleda okrogla lahko uporabimo krivulje (mislim, da jih je do sedaj uporabil sele Quake...pa se to nisem ziher) ali pa povecamo stevilo vertexev. Najlepsi krog bi bil, ce bi bil vertex pri vertexu po celotni kroznici (samo jih zaradi vektorske grafike moramo se vedno povezati med sabo).
Pozorni bralec (ta mi je najboljsa pri knjigah iz faxa ) je verjetno ze zasledil, da pri gradnji crte med vertexi, moramo vedeti pravo zaporedje njih. Pri 3 tockovnih facih tega problema ni, zato se v spilih vecinoma uporabljajo 3 tocke (ampak zaradi prikaza moci uporabe knjiznic bom strukture napisal se vseeno tako, da je lahko tock vec).
Preidimo na strukture:
typedef struct tagPOINT3D{
double x;
double y;
double z;
} POINT3D;
typedef struct tagFACE{
CArray<POINT3D, POINT3D>points;
} FACE;
CArray<FACE, FACE>faces;
In dostop do vrednosti v teh strukturah. Najlepse se pokaze vse skupaj z iteracijo.
FACE tmpf;
POINT3D tmpp;
long i, j;
for(i=0;i<faces.GetSize();i++)
{
tmpf = faces.GetAt(i);
for(j=0;j<tmpf.points.GetSize();j++)
{
tmpp = tmpf.points.GetAt(j);
//evo vam tocke
tmpp.x;
tmpp.y;
tmpp.z;
}
}
MMMMMMmmmmmmmmmm....kako lep je ta template class CArray, kajneda?
Evo, spet mi je dolgcas.
Ker mi je dolgcas sem se odlocil napisati en kratek tutorial o 3d strukturah, ce bo ravno koga kdaj prijelo programirati kaksen spil ali pa kaj podobnega.
Je pa se ena stran tega tutoriala.
Da se fantje (in dekle ) naucite izkoriscati stvari, ki so vam dane in se ne osredotocati prevec na ansi C.
Ker resno...mislite, da bo vasa aplikacija portana po vec operacijskih sistemih?
Kaj ne delajo najboljse igre tudi pod linuxom v nekem windows emulatorju?
Kaj nebi naredili nekaj ze sedaj produktivnega in pustili tezke (ansi C) frike v svojih vodah?
Enostavno vprasanje za gospodice ansi c pa standardi pa to...
Zakaj si sami doma ne pecete kruha? Zakaj ne posadite psenice in jo potem predelate v moko in to moko potem uporabite za kruh, greste na morje in pridelate z vode sol? Zakaj greste v trgovino po kruh, programirate pa vedno od zacetka).
Kaj ni isto ce prvih 5 let delate svoje knjiznice, da si olajsate delo in morajo potem vedno 'z vami okoli skakat', da bo delal vas program se na Linuxu? Isti poop ali smorn (kar vam je ljubse).
MFC, ATL, WTL in ostala sara je zakon :)
Gremo na tutorial:
Kot veste je 3d objekt v igrah ponavadi narejen iz facov. To so ploscate 'plosce'. Te ploscate plosce tvorijo vertexi (to so ogljisca). Za en face potrebujete najmanj 3 vertexe, tako da dobimo dimenzijo - ploskev.
Seveda je teh vertexov lahko tudi vec. Recimo 100 ali vec.
Za primer vzemimo lepo kroznico. Da kroznica zgleda okrogla lahko uporabimo krivulje (mislim, da jih je do sedaj uporabil sele Quake...pa se to nisem ziher) ali pa povecamo stevilo vertexev. Najlepsi krog bi bil, ce bi bil vertex pri vertexu po celotni kroznici (samo jih zaradi vektorske grafike moramo se vedno povezati med sabo).
Pozorni bralec (ta mi je najboljsa pri knjigah iz faxa ) je verjetno ze zasledil, da pri gradnji crte med vertexi, moramo vedeti pravo zaporedje njih. Pri 3 tockovnih facih tega problema ni, zato se v spilih vecinoma uporabljajo 3 tocke (ampak zaradi prikaza moci uporabe knjiznic bom strukture napisal se vseeno tako, da je lahko tock vec).
Preidimo na strukture:
typedef struct tagPOINT3D{
double x;
double y;
double z;
} POINT3D;
typedef struct tagFACE{
CArray<POINT3D, POINT3D>points;
} FACE;
CArray<FACE, FACE>faces;
In dostop do vrednosti v teh strukturah. Najlepse se pokaze vse skupaj z iteracijo.
FACE tmpf;
POINT3D tmpp;
long i, j;
for(i=0;i<faces.GetSize();i++)
{
tmpf = faces.GetAt(i);
for(j=0;j<tmpf.points.GetSize();j++)
{
tmpp = tmpf.points.GetAt(j);
//evo vam tocke
tmpp.x;
tmpp.y;
tmpp.z;
}
}
MMMMMMmmmmmmmmmm....kako lep je ta template class CArray, kajneda?
[D-mon]
OwcA ::
STL podatkovne strukture v dobri implementaciji (Dinkumware) tudi niso ravno za odmet.
Otroška radovednost - gonilo napredka.
OwcA ::
V čem je poanta struct tagFACE? V kolikor nisem kaj spregledal, bi lahko CArray<POINT3D, POINT3D> enostavno s typedef-om dodelil ime.
Otroška radovednost - gonilo napredka.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | WPF 3d prostor - Spotlight, ne znam uporabljatOddelek: Programiranje | 1736 (1496) | Tutankhamun |
» | [c++] dvosmerno povezan seznamOddelek: Programiranje | 2567 (2403) | upirna |
» | [C++] prevajalnik hoce konstruktor za strukturoOddelek: Programiranje | 2642 (2346) | Tr0n |
» | [C#] unmanaged->managed codeOddelek: Programiranje | 2144 (2019) | Zzzzzzz |
» | Problem s structurami v c++!!!Oddelek: Programiranje | 922 (820) | BigWhale |