【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2329|回复: 0

在OpenGL中实现多纹理混合(Multi-texture Blending)

[复制链接]
发表于 2005-4-12 23:10:36 | 显示全部楼层 |阅读模式
多纹理混合技术在地形渲染中用得很广泛,用来将非常不同的多个纹理(如石头和草)混合起来,看不出明显的边缘。例如,你可以用3个纹理(石头、草和沙子)来渲染一座山,在山的底部用草和沙子来混合。 在OpenGL中通过ARB_multitexture和ARB_texture_env_combine扩展来实现多纹理混合。分为以下几个步骤: 1. 计算3个纹理各自的贡献,并将它们编码进顶点的颜色中,这样颜色的RGB部分控制纹理阶段0和1间的插值,颜色的ALPHA控制纹理阶段1和2间的插值。 2. 使用GL_ARB_multitexture将3个纹理同时应用到物体表面。 3. 将第一个纹理设为纹理阶段0。 4. 在纹理阶段1,使用GL_INTERPOLATE_ARB在纹理阶段0的输出(第一个纹理)和阶段1的纹理之间用GL_SRC_COLOR(颜色的RGB部分)进行线性插值。 5. 在纹理阶段2,使用GL_INTERPOLATE_ARB在纹理阶段1的输出(第一个纹理和第二个纹理的混合体)和阶段2的纹理之间用GL_SRC_COLOR(颜色的ALPHA部分)进行线性插值。 典型的代码为: glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB ); glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB );

glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB );//前面的纹理阶段 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );

glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE );//当前的纹理 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR );

glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PRIMARY_COLOR_ARB);//基颜色 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR );//或GL_SRC_ALPHA 在使用前,要先查看系统允许的纹理阶段数目: int nTextureUnits = 0; glGetIntegerv( GL_MAX_TEXTURE_UNITS_ARB, &nTextureUnits ); 这种技术使用起来比较复杂,现在可以用shader来实现,简单得多,但为了兼顾旧显卡,这种技术还是很常用的。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 01:55

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表