首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

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

2013-06-25 
opengl球体 纹理映射非环境映射本帖最后由 gmdfs682 于 2013-04-24 14:27:33 编辑opengl 画球体 环境映射

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);
}

[解决办法]
glDisable(GL_TEXTURE_GEN_S); 这个关闭了纹理坐标的生成吧

刚好有一个文章,你可以参考
   http://wenku.baidu.com/view/ce61c30cf12d2af90242e6a7.html

热点排行