From: <da...@us...> - 2006-10-04 20:31:09
|
Revision: 52 http://svn.sourceforge.net/freepv/?rev=52&view=rev Author: dangelo Date: 2006-10-04 13:31:04 -0700 (Wed, 04 Oct 2006) Log Message: ----------- use partial textures instead of rescaling textures that do not have 2^n width Modified Paths: -------------- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-04 12:57:02 UTC (rev 51) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-04 20:31:04 UTC (rev 52) @@ -94,22 +94,30 @@ break; } } - // TODO: remove this hack + // TODO: remove this hack, but 6 4096 by 4096 textures are a bit large.. if (m_tex_size > 2048) m_tex_size = 2048; if (m_tex_size < pano->m_size.w) { fprintf(stderr, "Warning: reducing cube size. Your graphics card only supports %d by %d pixels textures\n", m_tex_size, m_tex_size); } + + m_srcSize = pano->m_size.w; m_enabledCubefaces = 0; update(pano, doMipMap); } void update(CubicPano * pano, bool doMipMap) { - unsigned char * scaled=0; + Image * scaled = 0; if (m_tex_size != pano->m_size.w) { // allocate memory for rescaled image - scaled = new unsigned char[m_tex_size*m_tex_size*3]; + scaled = new Image(Size2D(m_tex_size, m_tex_size)); + if (m_tex_size > pano->m_size.w) { + memset(scaled->getData(),0, 3*m_tex_size*m_tex_size); + DEBUG_DEBUG("using partial face texture, " << m_srcSize << " to " << m_tex_size); + } else { + DEBUG_DEBUG("downsizing face image, " << m_srcSize << " to " << m_tex_size); + } } for (int i=0; i < 6; i++) { if (pano->m_images[i] == 0 || m_enabledCubefaces & (1 << i) ) { @@ -119,17 +127,22 @@ m_enabledCubefaces |= (1<<i); glBindTexture(GL_TEXTURE_2D, m_textures[i]); if (m_tex_size != pano->m_images[i]->size().w) { - gluScaleImage(GL_RGB, pano->m_size.w, pano->m_size.w, - GL_UNSIGNED_BYTE, pano->m_images[i]->getData(), - m_tex_size, m_tex_size, GL_UNSIGNED_BYTE, scaled); + if (m_tex_size > pano->m_images[i]->size().w) { + copyImgToTexImg(scaled, Point2D(0,0), pano->m_images[i]); + scaled->writePPM( "/tmp/test.ppm"); + } else { + gluScaleImage(GL_RGB, pano->m_size.w, pano->m_size.w, + GL_UNSIGNED_BYTE, pano->m_images[i]->getData(), + m_tex_size, m_tex_size, GL_UNSIGNED_BYTE, scaled->getData()); + } if (doMipMap) { gluBuild2DMipmaps(GL_TEXTURE_2D, 3, m_tex_size, m_tex_size, - GL_RGB, GL_UNSIGNED_BYTE, scaled); + GL_RGB, GL_UNSIGNED_BYTE, scaled->getData()); } else { glTexImage2D(GL_TEXTURE_2D, 0, 3, m_tex_size, m_tex_size, 0, - GL_RGB, GL_UNSIGNED_BYTE, scaled); + GL_RGB, GL_UNSIGNED_BYTE, scaled->getData()); } } else { if (doMipMap) { @@ -154,7 +167,7 @@ } } if (scaled) { - delete[] scaled; + delete scaled; } m_init = true; } @@ -226,6 +239,10 @@ GLfloat u,v; u = uvs[i][j].u; v = uvs[i][j].v; + if (m_srcSize < m_tex_size) { + u *= (m_srcSize-1.0f)/(float)m_tex_size; + v *= (m_srcSize-1.0f)/(float)m_tex_size; + } glTexCoord2f(u, v); glVertex3fv((GLfloat *)&coords[i][j]); } @@ -239,6 +256,7 @@ GLuint m_textures[6]; int m_enabledCubefaces; int m_tex_size; + int m_srcSize; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-08 18:39:29
|
Revision: 65 http://svn.sourceforge.net/freepv/?rev=65&view=rev Author: dangelo Date: 2006-10-08 11:39:23 -0700 (Sun, 08 Oct 2006) Log Message: ----------- use smaller font, with the old one, not all error messages fitted into most small web page panos Modified Paths: -------------- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-08 10:54:23 UTC (rev 64) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-08 18:39:23 UTC (rev 65) @@ -68,7 +68,7 @@ glColor3f(1.0f, 1.0f, 1.0f); const unsigned char * str = (const unsigned char *) m_text->m_text.c_str(); //DEBUG_DEBUG("string output: " << str << ", " << m_text->m_text.c_str()); - FPVglutBitmapString(FPVGLUT_BITMAP_HELVETICA_18, str); + FPVglutBitmapString(FPVGLUT_BITMAP_8_BY_13 , str); //glutBitmapString(GLUT_BITMAP_HELVETICA_18, (const unsigned char *)"Hello World"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-14 14:10:17
|
Revision: 83 http://svn.sourceforge.net/freepv/?rev=83&view=rev Author: dangelo Date: 2006-10-14 07:10:12 -0700 (Sat, 14 Oct 2006) Log Message: ----------- fixed tiled cylindricals with multiple rows Modified Paths: -------------- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-14 13:42:15 UTC (rev 82) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-14 14:10:12 UTC (rev 83) @@ -67,12 +67,12 @@ // calculate number of tiles xTiles = (int)ceil(maxWidth / (float)tileSize); yTiles = (int)ceil(maxHeight / (float)tileSize); - if (std::max(xTiles, yTiles) <=6) { + if (std::min(xTiles, yTiles) <=3) { break; } } // make sure this fits into the texture memory - while(xTiles > 0 && xTiles*yTiles*tileSize*tileSize > maxFaceMem) { + while(xTiles > 0 && xTiles*yTiles*tileSize*tileSize*3 > maxFaceMem) { xTiles--; // calculate new number of y tiles. maxWidth = xTiles * tileSize; @@ -122,11 +122,13 @@ { copyImgToTexImg(&tile, img, Point2D(0,0), Point2D(x*effTexSize.w, y*effTexSize.h), Size2D(effTexSize.w, effTexSize.h), true); + /* { std::string fn; FPV_S2S(fn, "/tmp/tile_" << "_y" << y << "_x" << x << ".pnm"); tile.writePPM(fn); } + */ glBindTexture(GL_TEXTURE_2D, texIds[texId]); texId++; @@ -270,7 +272,7 @@ // circumfence of cylinder float c = (float)(2*M_PI*r); // half height of cylinder - float h = m_srcSize.h*c/m_srcSize.w/2; + float height2 = m_srcSize.h*c/m_srcSize.w/2.0; //float m_segments = 128; @@ -289,6 +291,9 @@ { for (int y=0; y < m_texture.yTiles; y++) { + float hBeg = height2 - 2.0f*height2*((y+1.0f)/m_texture.yTiles); + float hEnd = height2 - 2.0f*height2*(y/(float)m_texture.yTiles); + glBindTexture(GL_TEXTURE_2D, m_texture.getTile(x,y)); /* select right texture */ glBegin(GL_QUADS); //double phi = (x+1) * phiinterval - M_PI_2; @@ -305,13 +310,13 @@ float z0 = (float)(r*cos(2.0*M_PI*(x*nSegmentsPerTile+ii+1)/nSegments)); glTexCoord2f(u0, v0); - glVertex3f(x0, h, z0); + glVertex3f(x0, hEnd, z0); glTexCoord2f(u0, v1); - glVertex3f(x0, -h, z0); + glVertex3f(x0, hBeg, z0); glTexCoord2f(u1, v1); - glVertex3f(x1, -h, z1); + glVertex3f(x1, hBeg, z1); glTexCoord2f(u1, v0); - glVertex3f(x1, h, z1); + glVertex3f(x1, hEnd, z1); } glEnd(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2006-10-24 07:46:12
|
Revision: 95 http://svn.sourceforge.net/freepv/?rev=95&view=rev Author: dangelo Date: 2006-10-24 00:46:08 -0700 (Tue, 24 Oct 2006) Log Message: ----------- bugfix: display all faces of a cubic panorama when loading single cube faces. Modified Paths: -------------- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp Modified: freepv/trunk/src/libfreepv/OpenGLRenderer.cpp =================================================================== --- freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-21 21:12:08 UTC (rev 94) +++ freepv/trunk/src/libfreepv/OpenGLRenderer.cpp 2006-10-24 07:46:08 UTC (rev 95) @@ -525,7 +525,7 @@ } Image * tile = new Image(Size2D(m_tileSize, m_tileSize)); - int texId=0; +// int texId=0; for (int i=0; i < 6; i++) { if (pano->m_images[i] == 0 || m_enabledCubefaces & (1 << i) ) { continue; @@ -550,6 +550,7 @@ // enable cubeface m_enabledCubefaces |= (1<<i); + int texId=i*m_nTileDim*m_nTileDim; for (int k=0; k < m_nTileDim; k++) // y { @@ -651,10 +652,10 @@ 0, 2, 1, 1, 1, -1 // bottom }; - int texId=0; for (int i=0; i < 6; i++) { if (m_enabledCubefaces & (1 << i)) { + int texId=i*m_nTileDim*m_nTileDim; // loop over y for (int k=0; k < m_nTileDim; k++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |