opengl 球体 纹理映射 非环境映射
本帖最后由 gmdfs682 于 2013-04-24 14:27:33 编辑 opengl 画球体 环境映射很正常 但纹理映射贴不上去 用的是直接画球函数glutsolidphere(1,100,100);
茶壶的环境映射,纹理映射都可以正常画出;长方体给了纹理坐标也正常。
球体的是不是也要给纹理坐标啊? 请问下咋弄?
代码不需要全贴吧?
AUX_RGBImageRec* CMyView::LoadBMP(char *Filename) //读图
{
FILE*File=NULL;// 定义文件指针
if((File=fopen(Filename,"r"))!=NULL)
{
fclose(File);
return auxDIBImageLoad(Filename);//读入BMP文件,并返回相应数据块指针
}
return NULL;//如果文件读入失败返回空指针
}
int CMyView::LoadGLTextures() //创建并绑定纹理对象
{
char *a;
a=new char[m_picture.GetLength()+1];
for(int i=0;i<m_picture.GetLength();i++)
a[i]=m_picture.GetAt(i);
a[i]='\0';
int Status=FALSE;//状态指示变量
AUX_RGBImageRec*TextureImage[1];//建立指向读入的BMP数据块指针
memset(TextureImage,0,sizeof(void*)*1);//令指针指向NULL
if(TextureImage[0]=LoadBMP(a)) //读入项目文件夹下的“test.bmp”文件
{
Status=TRUE;//指针不为空,读入成功,状态指示变量置为NULL
glGenTextures(1,&m_texture[0]);//生成纹理对象名称
glBindTexture(GL_TEXTURE_2D,m_texture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,
TextureImage[0]->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,
TextureImage[0]->data);
}
if(TextureImage[0]&&TextureImage[0]->data)//用完后释放读入的BMP数据块空间
{
free(TextureImage[0]->data);//释放BMP数据内存
free(TextureImage[0]);// 释放AUX_RGBImageRec结构
}
return Status;
}
void CMyView::OnRender3dTextureMode() //纹理映射
{
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
m_n3DRenderMode=2;
if(!glIsTexture(m_texture[0]))
LoadGLTextures();//创建并绑定纹理对象
glEnable(GL_DEPTH_TEST);//打开深度测试
glEnable(GL_TEXTURE_2D);//打开纹理映射
Invalidate(FALSE);
}
void CMyView::OnRender3dPositionMode() //环境映射
{
m_n3DRenderMode=2;
if(!glIsTexture(m_texture[0]))
glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP);
glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP);
LoadGLTextures(); //创建并绑定纹理对象
glEnable(GL_DEPTH_TEST); //打开深度测试
glEnable(GL_TEXTURE_2D); //打开纹理映射
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
Invalidate(FALSE);
}