[英]Cube mapping in OpenGL using DDS compressed images?
使用DDS多維數據集映射時遇到麻煩多維數據集映射,我剛得到一個黑色多維數據集,這使我相信自己缺少一些簡單的東西,到目前為止,代碼如下:
DDS_IMAGE_DATA *pDDSImageData = LoadDDSFile(filename);
//compressedTexture = -1;
if(pDDSImageData != NULL)
{
int height = pDDSImageData->height;
int width = pDDSImageData->width;
int numMipMaps = pDDSImageData->numMipMaps;
int blockSize;
GLenum cubefaces[6] = {
GL_TEXTURE_CUBE_MAP_POSITIVE_X,
GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
};
if( pDDSImageData->format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT )
blockSize = 8;
else
blockSize = 16;
glGenTextures( 1, &textureId ); int nSize;
int nOffset = 0;
glEnable(GL_TEXTURE_CUBE_MAP);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
for(int face = 0; face < 6; face++)
{
for( int i = 0; i < numMipMaps; i++ )
{
if( width == 0 ) width = 1;
if( height == 0 ) height = 1;
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_GENERATE_MIPMAP, GL_TRUE);
nSize = ((width+3)>>2) * ((height+3)>>2) * blockSize;
glCompressedTexImage2D(cubefaces[face] ,
i,
pDDSImageData->format,
width,
height,
0,
nSize,
pDDSImageData->pixels + nOffset );
nOffset += nSize;
// Half the image size for the next mip-map level...
width = (width / 2);
height = (height / 2);
}
}
}
調用此代碼后,我將使用glBindTexture綁定紋理,並使用GL_QUADS和glTexCoord3f繪制一個立方體。
我正在使用多維數據集運行壓縮的dds文件。 您的代碼是正確的,但是您是否以正確的方向從多維數據集中布置了平面? 記住,您在多維數據集中。
在顯示例程中嘗試此操作(在Java中):
gl.glEnable(GL2.GL_TEXTURE_CUBE_MAP);
gl.glBindTexture( GL2.GL_TEXTURE_CUBE_MAP, textureObjects[0] );
gl.glCullFace(GL2.GL_FRONT);
gl.glBegin(GL2.GL_QUADS);
// Negative-X Quad with map from Positive-X
// the veritices clockwise and the
// map counterclockwise
gl.glTexCoord3f( 1.0f, -1.0f, 1.0f );
gl.glVertex3f( -size, -size, size );
gl.glTexCoord3f( 1.0f, 1.0f, 1.0f );
gl.glVertex3f( -size, size, size );
gl.glTexCoord3f( 1.0f, 1.0f, -1.0f );
gl.glVertex3f( -size, size, -size );
gl.glTexCoord3f( 1.0f, -1.0f, -1.0f );
gl.glVertex3f( -size, -size, -size );
/* ... */
gl.glEnd();
gl.glCullFace(GL2.GL_BACK);
gl.glDisable(GL2.GL_TEXTURE_CUBE_MAP);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.