|
|
pedig a (T)v alakú cast pont olyan, mint a static_cast<T>(v), próbáljátok csak ki
|
|
|
Idézet gaborlabor :
azokat az "xxx_sating"-okat énsem használtam még. amig nem vagyok biztos a használatukban addig nem is nagyon fogom.
maximum ilyeneket csináltam pl:
Kód: float a = 2.0;
int b = (int)a;
például egy 2d-s játékban térképészítésnél jól jön a pozicionáláshoz. 
Én is csak ilyenek használtam eddig
|
|
|
azokat az "xxx_sating"-okat énsem használtam még. amig nem vagyok biztos a használatukban addig nem is nagyon fogom.
maximum ilyeneket csináltam pl:
Kód: float a = 2.0;
int b = (int)a;
például egy 2d-s játékban térképészítésnél jól jön a pozicionáláshoz.
|
|
|
Én ritkán castingolok, talán pont azért, mert nem igazán értem, mikor kellene használni (pl. ezeket a xxx_cast-eket eddig sosem használtam), általában amikor a fordító sikít  .
|
|
|
na ezt már nevezem tanulságos kiselőadásnak! 
az első néhány bekezdést még értem is!  a többi meg ismerősen cseng Nyisztor Károly könyvéből, hasonlóképp figyelmeztet ott is a hibalehetőségekre stb. fontos dolog a casting, csak ésszel kell használni.
|
|
|
oké, konverziók kicsit okosabban:
Amikor két típus halmazai között átfedés van, és a reprezentáció különbözik, mint például a float és az int típusok, ahol a 3 avagy 3.0 mindkét típus halmazában bennevan, és egész másképp néz ki a 3 bitmintája int-ben (00..00011) mint float-ban (ezt most hagyjuk  ).
Ha tehát egy int típusú változónkat adjuk értékül egy float-nak, akkor típuskonverzió hajtódik végre a háttérben. Több fordítóprogram ilyenkor figyelmeztet, hogy vigyázzál, itt bizony számolni kell, és előfordulhat, hogy kifutsz a halmazból. (pl int-nek adsz értéket float-ból, ami nagyobb mint 4milliárd)
De nem csak ilyen típuskonverzió létezik.
Előfordul, hogy nem akarod átalakítani a bitmintát, sőt, épphogy azt akarod megőrizni, csak másféle típussal értelmezni. Ez igen jól jön alacsonyszintű, assembly rutinokkal való kommunikálásban, ahol előfordulhat, hogy egy short-ot jobban esik két char-ként kezelni, vagy egy int-et egy short és két char-ral (persze erre struct-okat lehet építeni) Ilyenkor a reinterpret_cast<T>(v) használható, ahol T az a típus, amire kényszerítünk. Re-interpretáció, vagyis újraértelmezés a lényeg: a bitminta marad, a reprezentált érték változhat.
Ez elég veszélyes, mert bármiről bármire lehet reinterpret_cast-olni, feltéve, hogy a céltípus memóriamérete kisebb, mint a forrástípusé (még csak meg se kell egyezzen!)
A const:_cast a legkevésbé érdekes, ha egy darabig nem akarod hogy const legyen, vagy épp úgy jön jobban, hogy legyen egy darabig const, akkor ezzel meg lehet csinálni. Ez a kulcsszó remek indikátora a rosszul tervezett programnak.
A dynamic_cast<T*>( v ) pedig egy nagyon érdekes dologra való:
Kód: class A {
public:
A() {}
virtual void f() {}
};
class B : public A{
public:
virtual void f() {}
void g() {}
};
int main()
{
A *a=new B;
a->g(); /// Paccs : nincs A-nak g() metódusa!
}
ilyenkor dinamikus típuskényszeríthetünk:
Kód: class A {
public:
A() {}
virtual void f() {}
};
class B : public A{
public:
virtual void f() {}
void g() {}
};
int main()
{
A *a=new B;
dynamic_cast<B*>(a)->g();
}
Ami már működik. Ha az első sorban new A van, akkor ez fagy, de így már teljesen biztonságos:
Kód: class A {
public:
A() {}
virtual void f() {}
};
class B : public A{
public:
virtual void f() {}
void g() {}
};
int main()
{
A *a=new B;
//..
B * ba = dynamic_cast<B*>(a);
if (ba) {
ba->g();
}
}
Mert a dynamic_cast nullmutatót ad, ha nem B*-ra konvertálható a változó, tehát a dinamikus típusa nem B vagy B örökös.
|
|
|
hát nekem sem valami hello world! 
szerencsére a problémámat már megoldottam.
|
|
|
Idézet flugi :
Hm, típuskonverziók:
Kód: (T) v // értéktartó típuskonverzió
static_cast<T>(v) //ugyanúgy, értékek átszámítása, pl int 3 - double 3.0
reinterpret_cast<T>(v) // bitek újraértelmezése. Elég veszélyes
const_cast<T>(v) // const módosító változtatása
dynamic_cast<T>(v) // dinamikus típusra kényszerítés. Csak mutatóval használható, nullmutató az eredmény, ha nem kényszeríthető
Huh, nekem ez így első ránézésre nem valami bizalomgerjesztő, vagy csak keveset tudtam aludni ma
|
|
|
Hm, típuskonverziók:
Kód: (T) v // értéktartó típuskonverzió
static_cast<T>(v) //ugyanúgy, értékek átszámítása, pl int 3 - double 3.0
reinterpret_cast<T>(v) // bitek újraértelmezése. Elég veszélyes
const_cast<T>(v) // const módosító változtatása
dynamic_cast<T>(v) // dinamikus típusra kényszerítés. Csak mutatóval használható, nullmutató az eredmény, ha nem kényszeríthető
|
|
|
szerintem működne, de már nincs lehetőségem kipróbálni, mert azt a kódot már ki is dobtam. 
azért párszor még bizos szükségem lesz a típuskonverzióra.
|
|
|
Idézet gaborlabor :
na, már meg is van. 
csak így kellett deklarálni, és már jó is lett:
Kód: signed char hang1[] = "sound1.wav";
Típuskonevrzió itt nem működne? Igaz csak egy enyhe ötlet:
Kód: (signed char)"sound1.wav"
vagy csak
Kód: (signed)"sound1.wav"
No [img] !
Programozz ne háborúzz!!!!
|
|
|
|
na, már meg is van. 
csak így kellett deklarálni, és már jó is lett:
Kód: signed char hang1[] = "sound1.wav";
|
|
|
ok, köszi, mindjárt kipróbálom amit mondtál.
az előbb ezt is kipróbáltam:
Kód: string hang1 = "sound1.wav";
alutLoadWAVFile(hang1.c_str(),&format,&data,&size,&freq, &al_bool);
de ezt sem eszi meg:
Kód: error C2664: 'alutLoadWAVFile' : cannot convert parameter 1 from 'const char *' to 'signed char *'
|
|
|
probald meg *"sound1.wav", vagy &"sound1.wav" ha egyik sem megy, vezess be 1 valtozot..
csak ennyi a tippem, de majd az okosabbak megmondjak
|
|
|
Helo mindenkinek!
Ma belekezdtem az OpenAL-be. Egy tutorial alapjá próbálok összedobni egy kis progit.
Viszont problémám akadt a hangfájl betöltésével.
Így próbálom betölteni:
Kód: alutLoadWAVFile("sound1.wav",&format,&data,&size,&freq, &al_bool);
És fordításnál ezt a hibaüzenetet kapom:
Kód: error C2664: 'alutLoadWAVFile' : cannot convert parameter 1 from 'char [11]' to 'signed char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Addig ok, hogy castolnom kell a "sound1.wav" stringet, de hogyan adjam meg itt?
|
|
|
igen, nagyon koszi!
amugy az volt a hiba, hogy a forgatasnal is volt pozicionalva, meg a kirajzolasnal is. tehat a kepen kivulre rakta
de amugy sokminden van abba, amit kuldtel, szal nagyon koszi!
|
|
|
Akkor jó, remélem, minden meg lett oldva, és hasznos volt az a kis szösszenet, amit feltettem!
|
|
|
heh? 
kamera??  
na mind1, ehhez meg keves vok  "meg sokat kell tanulnom..."
de, egyenlore meg lett oldva
Kód: D3DXMATRIX mat;
D3DXVECTOR2 scaling(-1.0f,1.0f);
D3DXMatrixTransformation2D(&mat,&spriteCentre,0.0,&scaling,&spriteCentre,0.0f,&trans);
ezzel ugyanezt erem el
|
|
|
Állítsd úgy be a kamerát  .
|
|
|
na, ugy nez ki ez jo lesz.  marmint forgatja
csak meg arra kell rajonnom, hogy hogyan forgathatom a masik tengelyen
|
|
|
Csaba42:Thx, megnezem
Shade: huhh, milyen view/projection?  mind1, amikor nem forgatom, megjelenik, forgatom, eltunik. lehet emiatt?
|
|
|
B@z: biztos h a Sprite forgatással, egyéltalán a sprite-tal van a baj? Nemlehet h véletlenül rosszat állítottál be view/ projection-höz?
|
|
|
Idézet B@z :
meg mindig nem muxik, nemtud vki vmit?? plssss 
Szia! Olvasd el ezt, hátha segít. Nemrég állítottam össze, van benne a sprite forgtaásáról is egy kis szösszenet. Remélem, hasznát tudod majd venni! Sok sikert
|
|
|
meg mindig nem muxik, nemtud vki vmit?? plssss
|
|
|
persze-persze, csak hülyén fogalmaztam! 
köd paraméterket már énis adtam meg vektorból. 
tényleg nem ugy gondoltam hogy csak a szinekhez jó....
ugy jött elő ez az egész hogy olvastam, hogy általában valamivel gyorsabb ha vektorokat adunk meg közvetlen számok helyett, és akkor akartam az eltoláshoz is vektort használni.
most már legalább ezt is tudom
|
|
|
Meg a textúrakoordinátákat, meg texture env adatokat, meg textura paraméreket, meg normálokat, meg materialokat, meg light + fog adatokat, meg meg meg...  Van itt azért, nem csak a szineket.
|
|
|
aha értem már! köszi a felvilágosítást!
viszont gondolom ha ilyen nincs benne,
akkor glRotatefv, meg glScalefv sincs?
csak a színeket lehet megadni vektorból az eredeti OpenGL-ben?
|
|
|
Idézet gaborlabor :
Helo mindenkinek. Akadt egy kis gondom...
Sehogy nem bírok rájönni, hogy miért nem fordul le az a program, amiben
glTranslatefv van glTranslatef helyett.
Nekem úgy tűnik, hogy egy olyan példaprogramot nézhettél, ami nem tisztán OpenGL.
Ebben azért vagyok biztos, mert itt, egy OpenGL-t kiegészítő könyvtárban használják ezt a nevet, ergo ilyen az originál OpenGL-ben biztos nincs.
|
|
|
Mert nincs ilyen fv. Igen, én is láttam a neten pár kódot, ami használja (vagy csak próbálja használni  ), de tényleg nincs ilyen fv. "gl.h"-ban is utánanézhetsz, nincs.
|
|
|
Helo mindenkinek. Akadt egy kis gondom...
Sehogy nem bírok rájönni, hogy miért nem fordul le az a program, amiben
glTranslatefv van glTranslatef helyett.
Megfelelően van használva:
Kód: GLfloat points[3] = {2.0, 0.0, 4.0};
glTranslatefv(points);
és mégis ezt a hibaüzenetet kapom:
Kód: error C2065: 'glTranslatefv' : undeclared identifier
van valami tippetek?
köszi előre is
|
|
|
Idézet MaNiAc :
Idézet ShAdeVampirE :
Az esetleges hibák log-olásához kell a pontos driver (nálam volt már olyan, h csak frissíteni kellett/ egyel régebbit feltenni).
Simán. Ezt én is fontosnak tartottam... Sőt, én bekapcsolt debug mód esetén a logba íratom a támogatott extension-öket is, etc, mert azok is driverfüggőek... (Azért kell a debug mód, mert a 6600GT-nél kb. 300 sort nyom a logba csak ez a funkció )
Ezt jó tudni, de te az jobban érdekelne, h te h tudtad meg a pontos driver-t? (1ébként nálunk is ez lesz valószínűleg, bár a log úgysem a felhasználónak szól... ja és persze extension-öket is kiírja, de driver-t akkor sem tudtam még sehogy  )
|
|
|
hmm megprobalom
nem jott be...
|
|
|
Nem Z koordináta körül kell forgatnod? Az mutat a "képernyőből kifelé", ha jól tudom.
|
|
|
Kód: D3DXMATRIX traslationMatrix;
D3DXMatrixIdentity(&traslationMatrix);
D3DXMatrixRotationX(&traslationMatrix, -1.0f);
player[i].Sprite->SetTransform(&traslationMatrix);
most megint mi a baj?
igy nem jelenit meg semmit
barmi ertek, nem jelenit meg semmit... csak ha alaperteken van, akkor hozza be
|
|
|
|
Idézet B@z :
oo.... akkor mivel??
D3DXMatrixRotationX/D3DXMatrixRotationY/D3DXMatrixRotationZ
Reality is almost always wrong. - House
|
|
|
pedig nekem forgatott rendesen
|
|
|
|
Idézet B@z :
ezt probaltam
Kód: D3DXMATRIX traslationMatrix;
D3DXMatrixIdentity(&traslationMatrix);
D3DXMatrixScaling(&traslationMatrix, 1.0f, 1.0f, 0.0f);
player[i].Sprite->SetTransform(&traslationMatrix);
ott a scalingba modositgatni az ertekeket, de ha 0 ala meek, akkor mar nem jeleniti meg... miert?
mert azt hallottam, hogy ahhoz, hogy tukrozzek, -1,1 es forgatast kell csinalnom... dehat...
A tükzözéshez forgatás kell de a D3DXMatrixScaling soha nem fog neked forgatni mivel méretezésre való.
Reality is almost always wrong. - House
|
|
|
ezt probaltam
Kód: D3DXMATRIX traslationMatrix;
D3DXMatrixIdentity(&traslationMatrix);
D3DXMatrixScaling(&traslationMatrix, 1.0f, 1.0f, 0.0f);
player[i].Sprite->SetTransform(&traslationMatrix);
ott a scalingba modositgatni az ertekeket, de ha 0 ala meek, akkor mar nem jeleniti meg... miert?
mert azt hallottam, hogy ahhoz, hogy tukrozzek, -1,1 es forgatast kell csinalnom... dehat...
|
|
|
jah, de ott a hatterben levo izet. az 1 plane. de magat a sprite-ot nem forgatja
|
|
|
melyikben?  van 1 par...
|
|
|
A Codesampler-es példaprogbian lehet forgatni a sprite-ot. Nézd meg a forrását.
___________
A lelkesedés az, ami a tudásnak ízt ad...
|
|
|
plllls help
hogy kell forgatni a Sprite-ket?? marmint D3D-ben. amivel eddig probalkoztam, annal mindig eltunt az emberke...
pls
|
|
|
|
Idézet B@z :
hello
tudnatok adni vmi jo Direct3D - Sprite kezeles leirast? vagy van itt az oldalon?
Itt akad.
|
|
|
hello
tudnatok adni vmi jo Direct3D - Sprite kezeles leirast? vagy van itt az oldalon?
|
|
|
Idézet ShAdeVampirE :
Az esetleges hibák log-olásához kell a pontos driver (nálam volt már olyan, h csak frissíteni kellett/ egyel régebbit feltenni).
Simán. Ezt én is fontosnak tartottam... Sőt, én bekapcsolt debug mód esetén a logba íratom a támogatott extension-öket is, etc, mert azok is driverfüggőek... (Azért kell a debug mód, mert a 6600GT-nél kb. 300 sort nyom a logba csak ez a funkció  )
|
|
|
Az esetleges hibák log-olásához kell a pontos driver (nálam volt már olyan, h csak frissíteni kellett/ egyel régebbit feltenni).
|
|
|
Legújabb project:
Szókirakó 3
Legutóbb frissített project:
Szókirakó 3
Friss kép a galériából:
|