纹理贴图

8.5为面片添加纹理

Code

glBegin(GL_QUADS);

  glTexCoord2f(0.0,0.0);glVertex3f(1.0,2.5,1.5);

  glTexCoord2f(0.0,0.6);glVertex3f(1.0,3.7,1.5);

  glTexCoord2f(0.8,0.6);glVertex3f(2.0,3.7,1.5);

  glTexCoord2f(0.8,0.0);glVertex3f(2.0,2..5,1.5);

glEnd();

注意:纹理坐标值不能超过1.0,否则按裁剪算法进行裁剪

 

为网格模型添加纹理坐标

1.纹理坐标列表

2.模型中纹理信息的组织方法

1)面片顶点的数量

     面片法向的索引

     顶点索引的列表

     纹理坐标索引的列表

2)面片顶点的数量

     顶点索引的列表

 

渲染纹理

理性线性绘制 rational linear rendering

双曲线插值   hyperbolic interpolation

视锥         view volume

 

纹理的卷绕和剪裁

卷绕 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);

设置t方向上 GL_TEXTURE_WRAP_T

关掉平铺 GL_REPEAT替换为GL_CLAMP

 

纹理调和

创建一个发光体 可见亮度等于纹理值

glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);

改进 Phong镜面反射的颜色是光源的颜色,高光不依赖纹理

glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE) ;

8_5_4例子的代码如下:

运行结果如下:

 

 

新学过的接口函数:

glPixelStorei(GL_UNPACK_ALIGNMENT,1);

glDrawPixels(nCols,nRows,GL_RGB,GL_UNSIGNED_BYTE,pixel);

glReadPixels(x,y,nCols,nRows,GL_RGB,GL_UNSIGNED_BYTE,pixel);

glutPostRedisplay();

glBindTexture(GL_TEXTURE_2D,textureName);

       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);

       glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

       glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,nCols,nRows,0,GL_RGB,GL_UNSIGNED_BYTE,pixel);

glutIdleFunc(spinner);

glHint(GL_PERSPECTIVE,GL_NICEST);

//此函数要求OpenGL正确的(使双曲线插值)渲染纹理,这样当面片相对观察者旋转地时候,纹理才会正确的贴在面片之上

 

反射映射

铬映射 chrome mapping

环境映射 environment mapping

 

 

对于纹理包裹在一个大的包围立方体的情况,OpenGL提供了进行这种近似环境映射的工具

glTexGenf(GL_S,GL_TEXTURE_GEN_MODE,GL_CUBE_MAP) ;

glTexGenf(GL_T,GL_TEXTURE_GEN_MODE,GL_CUBE_MAP) ;

glEnable(GL_TEXTURE_GEN_S);

glEnable(GL_TEXTURE_GEN_T) ;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值