C++ -kysymykset
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: C++ -kysymykset
Re: C++ -kysymykset
Aah... Kiitos. En ihan tajunnut push ja pop -juttujen tarkoitusta, mutta esimerkeissä tuntui aina olevan niitä...koodaaja wrote:glLoadIdentity -> glPushMatrix -> piirto, tämähän tarkoittaa samaa kuin "nollaa matriisi, kopioi se ja piirrä viimeisellä". Unohda tuosta glPushMatrix-glPopMatrix-kikkailu ja siirrä glLoadIdentity ennen camer->pushMatrix();ia, niin pitäisi toimia.
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: C++ -kysymykset
Re: C++ -kysymykset
Siis pystyisinkö jotenkin "kopioimaan" jonkun kuvion, niin että samaa kuviota ei tarvitsisi uudestaan tehdä glBeginillä?
Miten olisi nopeinta ja kätevintä piirtää paljon samanlaisia kuvioita (tekstuurilla)?
Niin ja sitten miten käytännössä OpenGL:n tekstuurit toimivat? Että kun glBeginin jälkeen
laitetaan vuoron perään verteksejä ja tekstuurin koordinaatteja, niin ovatko tekstuurin koordinaatit bittikartalta pikseleiden kohtia.
Ja sitten muutamissa esimerkeissä ole törmännyt glNormal3f:ää, mitä se tekee?
Mikä olisi sopiva formaatti 3D malleille? Ja mistä sille löytyisi jonkunlainen parsija/lataaja?
Vai olisiko kuitenkin kannattavinta tehdä oma formaatti?
Re: C++ -kysymykset
Ug deprekoitua. Immediate modea ei pitäisi käyttää, etsi jostain vaikka VBO-tutoriaali.Latexi95 wrote:Mitenkä voisin piirtää OpenGL:llä saman kuvion useaan kertaan niin, että sitä ei tarvitsisi uudelleen "tehdä".
Siis pystyisinkö jotenkin "kopioimaan" jonkun kuvion, niin että samaa kuviota ei tarvitsisi uudestaan tehdä glBeginillä?
Miten olisi nopeinta ja kätevintä piirtää paljon samanlaisia kuvioita (tekstuurilla)?
Niin ja sitten miten käytännössä OpenGL:n tekstuurit toimivat? Että kun glBeginin jälkeen
laitetaan vuoron perään verteksejä ja tekstuurin koordinaatteja, niin ovatko tekstuurin koordinaatit bittikartalta pikseleiden kohtia.
Ja sitten muutamissa esimerkeissä ole törmännyt glNormal3f:ää, mitä se tekee?
Mikä olisi sopiva formaatti 3D malleille? Ja mistä sille löytyisi jonkunlainen parsija/lataaja?
Vai olisiko kuitenkin kannattavinta tehdä oma formaatti?
glNormal3f määrittää pinnan normaalin.
Re: C++ -kysymykset
Normaalin tajusin, mutta muut voisit selittää vähän tarkemmin...esa94 wrote: Ug deprekoitua. Immediate modea ei pitäisi käyttää, etsi jostain vaikka VBO-tutoriaali.
glNormal3f määrittää pinnan normaalin.
Mutta mitä normaaleilla tekee?
Edit2: Ahaa.... Niitä tarvitaan ainakin valaistuksen laskemiseen...
Edit3: VBOt siis ovat jonkinlaisia 3D malleja, jotka ovat näytönohjaimen muistissa?
Mitenkäs sitten sellainen tehtäisiin?
Ja miten tekstuurien koordinaatit menevät?
-
- Active Member
- Posts: 163
- Joined: Fri Aug 31, 2007 7:07 pm
- Location: Helsinki
- Contact:
Re: C++ -kysymykset
Google auttaa: http://www.google.fi/search?q=opengl+vbo+tutorialLatexi95 wrote: Edit3: VBOt siis ovat jonkinlaisia 3D malleja, jotka ovat näytönohjaimen muistissa?
Mitenkäs sitten sellainen tehtäisiin?
Vikkelin tapa piirtää paljon samoja objekteja on instantiointi (engl. instancing), joka taisi tulla pakolliseksi OpenGL speksissä version 3 tienoilla.
Re: C++ -kysymykset
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: C++ -kysymykset
Re: C++ -kysymykset
Juuri tuota tietoa kaipasinkin. Kiitoskoodaaja wrote:Ne ovat kuvan koordinaatteja, akselit kulkevat väliltä 0-1, siis kuvan vasen yläkulma on 0,0 ja oikea alakulma 1,1, en tosin muista kummin päin akselit kulkivat, kokeilemallahan tuo selviää. Alueen ulkopuolisiakin arvoja voi toki käyttää, silloin tekstuuri oletuksena toistuu. Sen voi vaihtaa glTexParameterf-funktiolla esimerkiksi clamppaamaan arvot laitoihin, jolloin tekstuurista toistetaan vain viimeistä riviä.
Re: C++ -kysymykset
Käytän Qt:ta tässäkin projektissa. Olen lisännyt .pro tiedostoon .lib tiedostojen sijainnit ja .h tiedostot,
mutta kun kääntäjä pääsee "NxCreatePhysicsSDK":n ja "NxReleasePhysicsSDK":n kohdalle, niin se heittää "unresolved external symbol":ia.
Code: Select all
INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\Physics\include"
INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\Cooking\include"
INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\Foundation\include"
INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\NxCharacter\include"
INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\PhysXLoader\include"
LIBS += -L"D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\lib\win64" -lPhysXLoader64
LIBS += -L"D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\lib\win64" -lNxCharacter64
LIBS += -L"D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\lib\win64" -lPhysXCooking64
Re: C++ -kysymykset
Valitan, ja pahoittelen, että avaudun nyt: Linkkeri huutaa.Latexi95 wrote:Yritän linkittää PhysX:ää projektiini, mutta heikolla menestyksellä...
Käytän Qt:ta tässäkin projektissa. Olen lisännyt .pro tiedostoon .lib tiedostojen sijainnit ja .h tiedostot,
mutta kun kääntäjä pääsee "NxCreatePhysicsSDK":n ja "NxReleasePhysicsSDK":n kohdalle, niin se heittää "unresolved external symbol":ia.Kellään vinkkejä miten saisin tämän toimimaan?Code: Select all
INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\Physics\include" INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\Cooking\include" INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\Foundation\include" INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\NxCharacter\include" INCLUDEPATH += "D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\PhysXLoader\include" LIBS += -L"D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\lib\win64" -lPhysXLoader64 LIBS += -L"D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\lib\win64" -lNxCharacter64 LIBS += -L"D:\Program Files (x86)\NVIDIA Corporation\NVIDIA PhysX SDK\v2.8.4_win\SDKs\lib\win64" -lPhysXCooking64
Varsinainen kääntäjäsi ei sano mitään. Kaikki Ok.
Linkeri huutaa yhä, koska se ei onnistu pakkeloimaan kaikkia riippuvuuksia sileiksi... eli:
--> jotain puuttuu silti yhä. (uuppuva symboli kertoo tämän itse hyvällä tuurilla: mihin libiin se viittaa?)
--> jotain linkataan väärässä järjestyksessä. (ja jokin linkitys ei tee mitään hyödyllistä)
Missä tiedostossa tuo [c ode]..[/co de] myhäilee? Tuo ei luultavasti ole .c tai .h tiedosto?
Mitä kehitysympäristoä käytät? (vaikutaisi olevan mikkisoftaa libien perusteella?)
Re: C++ -kysymykset
Heh, Latexihan käyttä Qt:tä joten tuo code-pätkä on selkeästi projektin määrittelytiedostosta peräisin, eli .pro päätteisestä tiedostosta.JATothrim wrote:Missä tiedostossa tuo [c ode]..[/co de] myhäilee? Tuo ei luultavasti ole .c tai .h tiedosto?
Mitä kehitysympäristoä käytät? (vaikutaisi olevan mikkisoftaa libien perusteella?)
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Nuo mainitsemani funktiot pitäisivät löytyä juuri tuosta "PhysXLoader" osasta. Käytän Qt Creatoria + Qt:tä ja Visual Studion link.exe on linkerinä ja nmake.exe kääntäjänä.JATothrim wrote: Valitan, ja pahoittelen, että avaudun nyt: Linkkeri huutaa.
Varsinainen kääntäjäsi ei sano mitään. Kaikki Ok.
Linkeri huutaa yhä, koska se ei onnistu pakkeloimaan kaikkia riippuvuuksia sileiksi... eli:
--> jotain puuttuu silti yhä. (uuppuva symboli kertoo tämän itse hyvällä tuurilla: mihin libiin se viittaa?)
--> jotain linkataan väärässä järjestyksessä. (ja jokin linkitys ei tee mitään hyödyllistä)
Missä tiedostossa tuo [c ode]..[/co de] myhäilee? Tuo ei luultavasti ole .c tai .h tiedosto?
Mitä kehitysympäristoä käytät? (vaikutaisi olevan mikkisoftaa libien perusteella?)
Ahaa... Jostain syystä 64 bittiset versiot aiheuttivat ongelmat, kun linkkasin 32 bittiset niin alkoi toimia.
Re: C++ -kysymykset
Code: Select all
const int tilenw = 50;
class breakfree //käytetään ohjelman väkivaltaiseen sammumiseen, main()ssa ohjelma sijaitsee yhden try{}catchin sisällä ja se on ainoa kohta jossa tarkkaillaan tämän luokan heiteltyjä jäseniä
{
public: int lol;
};
SDL_Surface* ANIMAATIO::getFrame(int i, SDL_Surface* animaatio)
{
/*mitä pitäisi tehdä?
*Palauttaa kokonaisanimaatiosta, param animaatio, iinnes freimi
/*miten pitäisi tehdä?
*lasketaan kokonaisanimaatiosta kohta joka on äxelilla kohdassa i*tilenw, ja yxelillä kohdassa 0, ja kopioidaan siitä uudelle framelle (kokoa tilenw*tilenw) tilenw*tilenw - kokoinen pala
animaation korkeus on aina 50
/*muuttujat
animaatio = SDL_Surface, joka sisältää 50*50 kokoisia frameja animaatio->w/50 kappaletta. Ulottuvuuksien 50 jaettavuus tarkistetaan kutsuvassa metodissa
to_return = sisältää palautettavan framen
*/
SDL_Surface* to_return = SDL_CreateRGBSurface(NULL,tilenw,tilenw,0,0,0,0,0);
SDL_Rect srcrect;
srcrect.x = i*tilenw;
srcrect.y = 0;
srcrect.h = tilenw;
srcrect.w = tilenw;
if(animaatio==NULL || to_return==NULL) MessageBox(NULL,L"Nulleja kohdattu",L"NULLLLLL",NULL);
if(SDL_BlitSurface(animaatio,&srcrect,to_return,NULL)==-1)
{
//Jos tänne tullaan, on SDL_BlitSurfacessa tapahtunut jokin virhe, ja tänne tullaan aina jostain syystä. Mikä aiheuttaa virheen?
MessageBox(NULL,L"Framen leikkaus epäonnistui",L"Ei oo freimeillä helppoo",NULL);
throw breakfree();
}
return to_return;
}
Blogi - Peräpohjola - MERPG
Re: C++ -kysymykset
Näyttää siltä, että et osaa käyttää "SDL_BlitSurface + throw" -komboa. Suosittelen käyttämään std::runtime_exceptionia tjsp. ensisijaisena heitettävänä. Jos pakko, erittäin huolella laadittut omat oliot käyvät kyllä myös..Feuer wrote:Ohjelma huutaa "Framen leikkaus epäonnistui" - virsettä, ja tappaa itsensä aina väkivaltaisesti. SDL_BlitSurface()ssa siis tapahtuu jotain häröä, näkeekö kukaan tuossa mitään huonoja parametreja jotka sotkisivat sen toimintaa vai liekö ongelma jossain syvemmällä projektissa?Code: Select all
const int tilenw = 50; class breakfree //käytetään ohjelman väkivaltaiseen sammumiseen, main()ssa ohjelma sijaitsee yhden try{}catchin sisällä ja se on ainoa kohta jossa tarkkaillaan tämän luokan heiteltyjä jäseniä { public: int lol; }; SDL_Surface* ANIMAATIO::getFrame(int i, SDL_Surface* animaatio) { /*mitä pitäisi tehdä? *Palauttaa kokonaisanimaatiosta, param animaatio, iinnes freimi /*miten pitäisi tehdä? *lasketaan kokonaisanimaatiosta kohta joka on äxelilla kohdassa i*tilenw, ja yxelillä kohdassa 0, ja kopioidaan siitä uudelle framelle (kokoa tilenw*tilenw) tilenw*tilenw - kokoinen pala animaation korkeus on aina 50 /*muuttujat animaatio = SDL_Surface, joka sisältää 50*50 kokoisia frameja animaatio->w/50 kappaletta. Ulottuvuuksien 50 jaettavuus tarkistetaan kutsuvassa metodissa to_return = sisältää palautettavan framen */ SDL_Surface* to_return = SDL_CreateRGBSurface(NULL,tilenw,tilenw,0,0,0,0,0); SDL_Rect srcrect; srcrect.x = i*tilenw; srcrect.y = 0; srcrect.h = tilenw; srcrect.w = tilenw; if(animaatio==NULL || to_return==NULL) MessageBox(NULL,L"Nulleja kohdattu",L"NULLLLLL",NULL); if(SDL_BlitSurface(animaatio,&srcrect,to_return,NULL)==-1) { //Jos tänne tullaan, on SDL_BlitSurfacessa tapahtunut jokin virhe, ja tänne tullaan aina jostain syystä. Mikä aiheuttaa virheen? MessageBox(NULL,L"Framen leikkaus epäonnistui",L"Ei oo freimeillä helppoo",NULL); throw breakfree(); } return to_return; }
Kait SDL_CreateRGBSurfacen parametrit on oikein? SDL:n pintojen/kuvien tulisi olla samaa tyyppiä (eli yhteensopivia keskenään), kun niitä blittaillaan toisiinsa.
Re: C++ -kysymykset
Tai vaikka long int. Tyypillä ei ole väliä kunhan käsittelet sitä oikein ja kunhan se ei mitenkään aiheuta ongelmia. Esimerkiksi tässä breakfree voisi olla vaikka tyhjä datatyyppi, itse ehkä typedeffaisin sen chariin.JATothrim wrote:Jos pakko, erittäin huolella laadittut omat oliot käyvät kyllä myös..
Re: C++ -kysymykset
Blogi - Peräpohjola - MERPG
Re: C++ -kysymykset
Code: Select all
Querying dumpers for 'local.this.unloadBuffer'/'local.this.unloadBuffer' (QList<Frame *>)
Thread is set up for call, 'g' will execute.
WARNING: This can have serious side-effects,
including deadlocks and corruption of the debuggee.
System 0: 1 of 2 threads are frozen
System 0: 1 of 2 threads were frozen
wUnable to dump 'local.this.unloadBuffer' (QList<Frame *>): ReadVirtual failed: E_UNEXPECTED
Querying dumpers for 'local.this.reloadBuffer'/'local.this.reloadBuffer' (QList<Frame *>)
wUnable to dump 'local.this.reloadBuffer' (QList<Frame *>): WriteVirtual failed: E_UNEXPECTED
Querying dumpers for 'local.this.layerList'/'local.this.layerList' (QList<Layer *>)
wUnable to dump 'local.this.layerList' (QList<Layer *>): WriteVirtual failed: E_UNEXPECTED
Code: Select all
Exception at 0x759bb727, code: 0x406d1388: Startup complete, flags=0x0
Kellään ideoita mistä voisi olla kysymys?
Ahaa... Näköjään ohjelman kaatava ongelma ei olekkaan tuossa kohdassa, vaan jossain muualla. Mutta olisi silti kiva tietää mitähän nuo tarkoittavat ja onko niistä syytä huolestua.
Edit2: No niin. Löytyihän se ongelma. -> QReadWriteLockin tupla lukitus + avaus ilman, että Recursion mode on "recursive". Lukitsin sen ensiksi, kun tarkistin tarvitaanko uutta piirtoa ja sitten kutsuin toista funktiota, jossa QReadWriteLock myös lukittiin.