Zdravím, s kamarádem děláme hru v openGL. Narazili jsme ovšem na malý, ale podstatný problém.
Pokoušíme se udělat průhlednost pomocí 32-bit bitmap, ale neúspěšně. Při vykreslení se průhlednost projevuje, ale ne zrovna tak, jak bysme očekávali.
Zde je naše vykreslovací fce:
Kdyby jste přišli na způsob, jak funkci urychlit, budeme jenom rádi :]
void SC_OBJ::sDrawOBJ()
{
glTranslatef(0,0,-1.0f);
glEnable(GL_TEXTURE_2D);
//glDisable(GL_COLOR_MATERIAL);
glColor3f(1,1,1);
for(int drawed = 0; drawed < facenum; drawed++)
{
if(triangle[drawed].busemtl == true)
{
if(material[triangle[drawed].materialindex].bmap_d == true)
{
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
}
usetex = material[triangle[drawed].materialindex].map_Kd_index;
stexture[usetex].sUseTexture();
glEnable(GL_DEPTH_TEST);
}
glBegin(GL_TRIANGLES);
if(normalnum > 0)glNormal3f(triangle[drawed].nx[0], triangle[drawed].ny[0], triangle[drawed].nz[0]);if(texcoordnum > 0)glTexCoord2f(triangle[drawed].s[0],triangle[drawed].t[0]);glVertex3f(triangle[drawed].vx[0], triangle[drawed].vy[0], triangle[drawed].vz[0]);
if(normalnum > 0)glNormal3f(triangle[drawed].nx[1], triangle[drawed].ny[1], triangle[drawed].nz[1]);if(texcoordnum > 0)glTexCoord2f(triangle[drawed].s[1],triangle[drawed].t[1]);glVertex3f(triangle[drawed].vx[1], triangle[drawed].vy[1], triangle[drawed].vz[1]);
if(normalnum > 0)glNormal3f(triangle[drawed].nx[2], triangle[drawed].ny[2], triangle[drawed].nz[2]);if(texcoordnum > 0)glTexCoord2f(triangle[drawed].s[2],triangle[drawed].t[2]);glVertex3f(triangle[drawed].vx[2], triangle[drawed].vy[2], triangle[drawed].vz[2]);
glEnd();
}
glDisable(GL_BLEND);
}
A zde je část zdrojáku na generování textur:
glGenTextures(1, &uTEXTURE[0]);
glBindTexture(GL_TEXTURE_2D, uTEXTURE[0]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 4, texturedata.width, texturedata.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texturedata.imageData);
Zde je pár screenshotů... Nejprve jak to vypadá v našem programu:
A zde je jak by to mělo doopravdy vypadat... (Renderováno v Cinema 4D)
Za každou radu budeme vděční :]
Předem děkujeme za vaše odpovědi...