问题标签 [multitexturing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1263 浏览

opengl - GLSL 部分重叠纹理

我试图在 GLSL 中混合两个部分重叠的纹理,我想知道我是否误解了多重纹理的概念。是否要求纹理完全重叠,或者您是否可以有两个仅在它们重叠的地方混合的偏移纹理?

我有两个类似于以下的图像(减去网格线和文本): 示例图像

理想情况下,图像的重叠部分会很好地融合在一起,以便最终结果看起来像一张将两者结合在一起的平滑图像。例如,重叠的橙色像素会混合在一起或采用更高的强度。

我是 GLSL 的新手,一直在使用这篇文章GLSL Shader Article,它使用片段着色器来混合纹理(相当标准)。

在文章之后,我@m 像这样设置每个纹理:

然后我绑定每个纹理并绘制三角形条带。我的纹理创建为:

这个过程看起来合理还是我误解了这个概念?关于如何实现这一目标的任何提示或建议?

0 投票
1 回答
350 浏览

android - 如何使用 OpenGL ES 1.1 实现多纹理以组合单独的 RGB 和 alpha PKM?

我一直在尝试减少我编写的 Android 游戏中纹理的内存占用,但没有取得太大的成功。根据我所做的研究,似乎一个好方法是使用 ETC1 压缩我的纹理,因为这是 Android 设备最广泛支持的格式。

我可以使用 Mali ARM 从我的 PNG 创建必要的 PKM - 没有问题。我也可以使用 ETC1Utils 很好地渲染这些 PKM - 到目前为止也没有问题。

问题在于尝试处理 alpha。我使用 Mali 为我的 PNG 创建了一个单独的 alpha 文件,即“xxx.png”被压缩为“xxx.pkm”和“xxx_alpha.pkm”。在我提出的另一个问题中向我建议的一种方法是使用多重纹理来组合这两个纹理,因为我不能在 OpenGL ES 1.1 中使用片段着色器。

这就是我卡住的地方。我对这些东西不太熟悉,也没有太多进展。基本上,只要我尝试与我的 alpha 纹理相结合,一切都会呈现为白色。

这是我的代码片段:

我主要关心的是 load() 方法。这段代码是通过我在网上找到的片段组合在一起的,再加上我对多纹理缺乏了解,我显然在某个地方出错了。另请注意,当我渲染纹理时,我会调用:

当我渲染纹理时,我调用 Texture 类的 bind() 方法。如您所见,这绑定到我的全局 textureId 变量,该变量在加载时用作 RGB PKMs ID。我什至不确定这是否正确。我应该绑定到 RGB 的 ID 还是 alpha 的 ID?或者这甚至还没有走上正确的轨道?我的问题也可能与我如何使用 ETC1Utils 加载阿尔法有关——我不知道这种方法是否正确。

我真的很困惑,所以任何帮助指出我出错的地方以及关于如何实现多纹理以结合 ETC1 alpha 和 RGB 的某种解释真的很棒。

0 投票
1 回答
241 浏览

android - 在使用 OpenGL ES 1.1 应用多重纹理时,有没有办法将纹理的 RGB 通道用作 alpha 通道?

一段时间以来,我一直在尝试使用 ETC1(特别是 PKM 文件)进行纹理压缩。我试图做到这一点而不必升级到 OpenGL ES 2,所以我一直在使用多纹理。

我现在(终于)有了多重纹理工作,但问题是它的行为不像人们期望的那样,我想我已经弄清楚了原因。在创建 PKM 时,您最终会得到仅包含颜色组件的 PKM,以及仅包含 Alpha 组件的 PKM。问题是 alpha PKM 似乎将 alpha 值存储在 RGB 通道中。黑色似乎代表完全透明,白色似乎代表完全不透明。

我的问题是:在使用多重纹理时,有没有办法将这些 RGB 值组合并转换为 alpha 值?如果不是,那么我看不到在 OpenGL ES 1.1 下使用 ETC1 和支持 alpha 的任何选项(如果我错了,请纠正我)。

0 投票
1 回答
138 浏览

java - LWJGL 多纹理不工作

我目前正在学习一些 OpenGL,我想将 2 种不同的纹理(漫反射和镜面反射)应用于立方体。问题是只有第一个纹理(纹理单元 0)是可访问的;两个采样器似乎都使用它,而不是使用两个不同的采样器。

即使我将两个采样器制服都分配给 1,也会使用第一个(漫反射纹理)。我想我一定忽略了一些东西。

我的相关部分init()如下所示:

render()方法的相关部分如下所示:

texture, textureSpecular,shaderProgramvaoID是全局变量。在片段着色器中声明的制服:

我做错了什么?

0 投票
1 回答
605 浏览

opengl - GLSL 多纹理仅显示纹理 0

在你问之前,是的,我已经阅读了很多教程,在这个论坛和其他论坛上发布的类似问题等等......我已经尝试了我能找到的每一个建议,但我无法让 GLSL 3.3 多纹理为我的生活工作。

我在 Google Docs 上发布了完整的 VS2013 项目https://drive.google.com/file/d/0B05Cvmc8jIzjMW1wS09BSWp3MzA/view?usp=sharing

这是我的纹理绑定代码:

我的片段着色器代码:

纹理 1 是一个白色正方形,中间有一个灰色正方形,所以我希望输出是我的纹理 0,中间有一些深色阴影。但是,纹理 0 似乎未修改。为了隔离问题,我将片段着色器的 main() 更改为:

正如预期的那样,这显示纹理 0。然而,真正的问题是,当我将片段着色器指令更改为仅引用 mytex[1] 时,输出仍然显示纹理 0。

我在两台电脑上试过这个,一台是 ATI,一台是 Nvidia。我认为问题可能是 ATI 计算机仅支持 OpenGL 3.2,因此我的着色器必须改用 #version 150。但是,NVidia 支持 OpenGL 4.1,所以没有问题。两台机器都支持旧客户端调用的多纹理,因此缺乏通用的多纹理支持不是问题。

我还尝试使用 glUniform1iv 而不是 glBindSampler() 来设置纹理单元,如下所示:

这也没有效果。

我已经在旧的客户端调用(glVertex3d、glTexCoord2d 等)中编程了很长时间。我刚刚开始学习 GLSL。所以我只是盯着看。我要做的就是在三角形条形图案中渲染一个简单的正方形。我的顶点和纹理坐标数组如下:

0 投票
1 回答
85 浏览

glsl - 面罩之间的 GLSL 深色接缝

纹理如下:

例如,使用掩码:

http://i.imgur.com/Y0p9ilH.png

但是由于某种原因,红色和蓝色蒙版之间的边界上不会产生纹理值,尽管蓝色和红色蒙版之间每个像素的通道数是 255

例如,以下代码具有:

我得到:

http://i.imgur.com/hCMqbAm.png

阴影圆圈 - 这是红色和蓝色蒙版之间的边界,它不应该是

如何摆脱它?也许是使用 mix() 的原因,还有其他方法可以达到预期的效果吗?

0 投票
1 回答
3077 浏览

c++ - 使用不同纹理对多个对象进行纹理化

有人可以为我解释一下如何在 OpenGL 中渲染多个具有不同纹理的对象吗?

我想我已经接近最终结果了,但现在我被困在这里,我不知道接下来我需要做什么。真的需要一些帮助!

目前这就是我所拥有的:

  1. drawSphere():根据经纬度数绘制一个UV球体

    int numberOfVerices = 0;

    /li>
  2. SetupGeometry():该方法用于绑定顶点和纹理坐标。

drawSphere(300, 300);

  1. SetupShader():创建着色器并编译着色器

字符文本[1000];整数长度;

  1. SetupTexture(char * filename):加载图像,生成2个纹理数组,一个到GL_TEXTURE0,一个到GL_TEXTURE1

GLuint 纹理[2];glGenTextures(2, 纹理);

  1. Render(int i):渲染2个物体,即球体。

glClearColor(0.0, 0.0, 0.0, 1.0);/* 将背景设为黑色 */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

顶点着色器:

片段着色器:

main中的主要代码:

0 投票
1 回答
269 浏览

c++ - OpenGL 和 GL_Blend 与 glDrawElements

通过添加 glDepthFunc(GL_ALWAYS); 解决

我正在尝试将高度场上的两个纹理与glDrawElements. Normalpointer 和 vertexpointer 数据相同,但两个纹理的 TexCoordPointer 不同。无论我尝试哪种 BlendFunc,总是只有一个纹理可见,尽管 texture_two 的大部分是透明的。与gl_blendglDrawElements一起工作还是我做错了?

非常感谢!

0 投票
2 回答
1750 浏览

c++ - OpenGL在绘制一个网格时绑定许多纹理

例如,我想在一个网格上绑定 80 个纹理并将其放入我的 VBO。我怎样才能做到这一点?

我读过 glActiveTexture 能够做到这一点,但是它最多允许大约 32 个纹理(取决于 GPU)。

我的 VBO 代码:

0 投票
1 回答
30 浏览

ios - 将 2 个纹理传递到 Fragmenshader

我想在我的片段着色器中获得不同的纹理。但不知何故,它不会工作。它只得到其中之一。

我开始渲染:

我的片段着色器没什么特别的:

如果我得到纹理,只是在那里测试。

在这里我得到了我的纹理: