多纹理混合技术在地形渲染中用得很广泛,用来将非常不同的多个纹理(如石头和草)混合起来,看不出明显的边缘。例如,你可以用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来实现,简单得多,但为了兼顾旧显卡,这种技术还是很常用的。
分享到:
相关推荐
Seamless Image-Based Texture Atlases using Multi-band Blending
1、OpenGLES3中加载GL_TEXTURE_2D纹理,生成纹理ID; 2、通过EGL构建EGLDisplay虚拟屏幕,并绑定ImageReader提供的Surface; 3、在EGL线程中,渲染GL_TEXTURE_2D对应的纹理图形; 4、在EGL线程中,完成渲染后,通过...
演示Opengl纹理混合的技术。简单明了,经过代码优化。
DX 混合 纹理操作 包括多重纹理的操作,以及BACKBUFFER的读取
在OPENGL中实现纹理贴图效果,图片格式必须为BMP
图形开发中,通常将TEXTURE_2D和TEXTURE_EXTERNAL_OES纹理分开使用,这种情况占据了80%的场景。然而,有时候也需要将TEXTURE_EXTERNAL_OES纹理转化为TEXTURE_2D纹理进行视频处理。这种情况,我们可以通过 如离屏渲染...
这中间遇到很多问题,而这些问题需要在书上,在网上,在各种资料上找,而且书上是java层调用,网上的缺少各种文件案例,只有在java层研究,在各种案例中找需要的知识点,遇到问题最终只有google搜外国网站才能解决。
游戏开发资源直接打开unitypackage即可在Unity中使用,还包含一个示例场景。 也可以用Blender打开原始模型进行编辑。
NVIDIA Texture Tools 2.0.8
自然景物的模拟是近年来计算机图形学中具有挑战性的研究...本文使用 OpenGL 的编程接口, 应用纹理映射技术, 实现了三维场景的真实模拟。纹理映射技术的应用能增强三维场景绘制的真实感, 并能提高三维场景的渲染速度。
统一纹理包装器 :hammer: 将不同的纹理通道合并为最终纹理输出的实用程序。安装使用Git 确保在行列上安装了Git客户端,并且已将Git可执行文件路径添加到PATH环境变量中。 进入%ProjectFolder%/ Packages /,然后...
利用OpenGL三维纹理贴图及显示的简单小例子
一种基于多尺度特征和滚动引导滤波的病理图像胰岛监督学习分割算法,黄悦,,病理图像中的感兴趣区域(ROI)分割一直是病理图像分析中的热点。本文提出了一个基于监督学习的ROI提取框架。该框架分为两个部分,
利用opengl实现纹理的加载,纹理的叠合以及自行创建纹理与使用
windows 环境下vc++平台编写的opengl纹理贴图源码
FindNet: Can You Find Me? Boundary-and-Texture Enhancement Network for Camouflaged Object Detection
基于小波的纹理分析及其在FPC金面缺陷检测中的应用
这是一个飞机纹理特征提取的matlab程序,执行效果很好!
一个简单的实用程序,可帮助您包装和管理纹理图集。 它基本上只是的视觉包装,并提供了使用它的便捷方法。 该项目是的继任者,具有全新的GUI和功能。 使用应用程式 只需从下载与您的操作系统匹配的最新版本的安装...
opengl中纹理滤波的实现,有助于加深对这一概念的理解