opengl 球体 纹理映射 非环境映射

gmdfs682 2013-04-24 02:20:52
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);
}
...全文
302 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gmdfs682 2013-04-26
  • 打赏
  • 举报
回复
我关闭纹理坐标是为了防止按环境映射后在切纹理映射时切不到; 发现加上两句换成用GULPHERE那个函数就可以了 虽然不理解。。 quadratic=gluNewQuadric(); // 创建二次几何体 gluQuadricTexture(quadratic, GL_TRUE); // 使用纹理
寻开心 2013-04-25
  • 打赏
  • 举报
回复
glDisable(GL_TEXTURE_GEN_S); 这个关闭了纹理坐标的生成吧 刚好有一个文章,你可以参考 http://wenku.baidu.com/view/ce61c30cf12d2af90242e6a7.html

4,446

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧