Fórumok
Sziasztok! A következő (elvileg egyszerű) feladat fogott ki rajtam: egy kép (bitmap), illetve a rajta egérrel kijelölt, fekete téglalapok kirajzolása. A gondom pedig az, hogy az alábbi kód egyik gépen helyesen működött, egy másikon viszont a bitmap mögé rajzolta a téglalapokat. Arra tippelek, hogy a glDrawPixels függvényel, illetve a proci (vagy videokártya) sebességével van valamilyen összefüggés (fura, hogy a két gépben, ahol rosszul működött, GeForce6-os kártya volt)
//draw image (as bitmap)
int ww = image_orig_m->Width();
int hh = image_orig_m->Height();
unsigned char* pixels = image_orig_m->ImageData();
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glRasterPos2i(0,hh);
GLenum format = GL_RGB;
glDrawPixels(ww,hh,format,GL_UNSIGNED_BYTE,pixels);
//draw mask
glBegin(GL_QUADS);
for(int ii=0; ii<mask_m.size(); ii++)
{
glColor4f(0.0f,0.0f,0.0f,1.0f);
glVertex3i(mask_m[ii].x1, mask_m[ii].y1, 0);
glVertex3i(mask_m[ii].x2, mask_m[ii].y1, 0);
glVertex3i(mask_m[ii].x2, mask_m[ii].y2, 0);
glVertex3i(mask_m[ii].x1, mask_m[ii].y2, 0);
}
glEnd();
Lehet, hogy a glDrawPixels még "nem végzett", amikor a glBegin-nel rajzolgatok? (Ez mondjuk elég hülyén hangzik). Ha bárkinek bármilyen tippje lenne, hogy merre induljak tovább, azt nagyon megköszönném.
Üdv.: Deacon
Hozzászólások
Rakd a bitmapet egy texturaba, egy fullscreen quadra, es akkor a melyseggel tudod egyertelmuen, hogy melyik hol lesz, es akkor nem kell a sorrend miatt aggodni, hogy melyikkel vegzett mar a pipeline es melyikkel nem.
Arra figyelj, hogy a texturakoordinatak stimmeljenek, mert kulonben a bitmap szele csunya lesz.
Köszi a villámgyors választ! :) Reméltem, hogy megúszom textúrázás nélkül, de akkor mégis nekiesem (és remélem kiderül, hogy nem is lesz az olyan bonyolult - egyelőre csak az homályos, hogy a quad-ot hogy tudom a megfelelő helyen és méretben megjeleníteni; gondolom az orthografikus nézet ebben segíteni fog...) Ha jutottam valamire, bekopizom (és köszi még egyszer!)
DoubleBuffert hasznalsz esetleg ? Kikapcsolva megszunik a jelenseg ?
Igen, azt használok - ha kikapcsolom, akkor a kép villog (mást is át kéne írnom?), illetve ugyanúgy csak a kép mögé tudok rajzolni.
glDrawBuffer(GL_BACK); Kell talan Double bufferezekor, az initcilizalskor.
Elvileg a rajzolasnak szekvencialisan kene megtortennie, es nem fordulhat elo ilyen.
Ezert arra gondoltam, hogy mi van, ha nem ugyan abba bufferbe rajzol a glDrawPixels.
Egy probat amugy meger egy flush-t nyomni mielott a quadot rajzolod ki, hatha az is megoldja a dolgot.
Ha DEPTH teszt engedelyezve van, meg amit tehetsz, hogy kep terulten, a DEPTH buffert is atirod nagyon tavolira.
Egyebkent mibol gondolod, hogy moge rajzolja ?
glClear -t hasznalsz ? DEPTH buffert is torlod ? Mas anomalia nincs ?
Z fight. Ne ugyanazon a Z koordinatan legyen a ketto.
---
pontscho / fresh!mindworkz
ÁÁÁh...:) Ez a megoldás! Köszi a választ (a többieknek is)!!!