问题标签 [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 回答
394 浏览

c++ - 为什么我必须切换纹理单元才能让我的片段着色器识别要使用的纹理?

我有这个程序用于简单的测试目的。该程序创建两个 1-D 纹理并将它们传递给着色器。片段着色器非常简单。它只是在第一个纹理的索引 4 处提取纹素,并使该纹素成为颜色片段:

我正在绘制一个正方形,第一个纹理中索引为 4 的纹素包含 <1.0, 0.0, 0.0, 1.0>,它是红色的。因此,上面着色器的结果是一个红色方块。当我创建第二个一维纹理并将其传递给着色器时,问题就出现了。由于某种未知的原因,着色器不喜欢它,它不再起作用,并且绘制了一个黑色方块而不是红色方块。这是 C++ 代码:(函数“makeGLTexture”内的代码如下)。

完成纹理绑定的是函数“makeGLTexture”。这是里面的代码。

奇怪的是,如果我在创建第二个纹理后立即将活动纹理单元切换到第一个纹理的纹理单元,那么程序会再次运行,并绘制一个红色方块。

然后,该程序将再次运行。

我的问题是为什么会这样?着色器不是独立于纹理单元吗?难道我们只需要将纹理单元传递给采样器变量,就是这样吗?在这种情况下,为什么我必须将纹理单元更改回纹理单元零才能让着色器再次运行?到底是怎么回事?

0 投票
1 回答
6273 浏览

opengl-es - OpenGL、GL_MODULATE 和多重纹理

我已经成功绘制了一个多纹理多边形,但不幸的是,整个纹理区域只使用了覆盖纹理的第一个像素。

以下是纹理(GL_TEXTURE0 和 GL_TEXTURE1):

图标 覆盖

结果是这样的:

结果

仅使用顶部的红色像素。我尝试在顶部仅使用 1x1 蓝色像素,并且使用蓝色叠加得到相同的结果。

我的代码:

这是一个 OpenGL 问题,但感兴趣的人可以在这里找到 iOS 项目:http: //dl.dropbox.com/u/33811812/cocos2d/OpenGLTest.zip

编辑: 来自红皮书:

如果你是多重纹理并且你使用 glTexCoord*(),你正在为第一个纹理单元设置纹理坐标。换句话说,使用 glTexCoord*() 等价于使用 glMultiTexCoord* (GL_TEXTURE0,...)

关于如何传递坐标数组的任何提示?OpenGL ES 1.1 不支持 glBegin() 等。

0 投票
1 回答
592 浏览

opengl - OpenGL:渲染到 FBO 时是否支持纹理组合器功能?

我有一个渲染到第一个 FBO 的 OpenGL 纹理,我需要编辑它的亮度,渲染到第二个 FBO,然后在屏幕上绘制它。

如果我将纹理渲染到第二个 FBO(不修改其亮度)然后在屏幕上绘制它,它会正确显示。

如果我尝试编辑渲染纹理的亮度(使用纹理组合器功能,如glTexEnv),我会得到错误的输出,如全黑或全白纹理、改变对比度等。

如果我在屏幕上而不是 FBO 上绘图时应用亮度调节,效果很好。亮度按预期修改。

glTexEnv所以我的问题是:我可以在渲染到 FBO 时使用纹理组合器功能吗?

这是我在绘制到 FBO 时用来修改亮度的代码(它不起作用):

0 投票
2 回答
486 浏览

opengl - OpenGL 会钳制每个纹理阶段的输出吗?

使用 OpenGL 1.4 固定功能多纹理时,每个纹理阶段的输出在传递到下一个阶段之前是否被钳制为 [0, 1]?

规范说(第 153 页):

如果 TEXTURE_ENV_MODE 的值为 COMBINE,则纹理函数的形式取决于 COMBINE_RGB 和 COMBINE_ALPHA 的值,如表 3.24 所示。然后将纹理函数的 RGB 和 ALPHA 结果分别乘以 RGB_SCALE 和 ALPHA_SCALE 的值。结果被限制为 [0, 1]。

但在我的测试中,这并没有发生。我的 RGB 组件纹理环境是:

  • 阶段1:从GL_TEXTURE中减去GL_CONSTANT,其中整个纹理为黑色,GL_CONSTANT颜色为(.5, .5, .5, 1.0)
  • 第 2 阶段:将 GL_TEXTURE 添加到 GL_PREVIOUS,其中纹理是测试彩虹。

我使 Stage 1 的 GL_CONSTANT 颜色越亮,输出明显越暗。

我可以启用某种状态来获得我期望的钳位吗?

0 投票
1 回答
383 浏览

opengl - 如何在 OpenGL 中访问 GPU 上的纹理数据?

我不完全理解在 GPU 上访问纹理数据的方式。如果可能的话 - 任何人都可以解释这些吗?

  1. 当纹理单元的数量受到限制时,这是否会限制我可以使用生成glGenTextures()并上传到 GPU的纹理数量glTexImage2D()?还是它只限制可以使用绑定的纹理单元的数量glBindTexture()

  2. 我真正想做的是能够将我所有的纹理上传到 GPU - 即使有超过可用纹理单元的数量。当需要纹理时,我只需使用glBindTexture(). 这可能吗?

0 投票
1 回答
2972 浏览

ios - 如何使用 GLSL 在没有 alpha 混合的情况下组合两个纹理

我正在尝试在 opengl es 2.0 中使用着色器组合两个纹理

在此处输入图像描述

正如您在屏幕截图中看到的那样,我正在尝试使用动态环境映射在后向对象上创建针反射。但是,针的反射看起来是半透明的,并且与我的环境贴图融为一体。

这是我的片段着色器;

但是,“混合”方法会导致混合两种纹理。

我还检查了纹理组合器示例,但它也没有帮助。

有什么方法可以结合两种纹理而不相互混合。

谢谢。

0 投票
1 回答
3165 浏览

android - LibGDX SpriteBatch 多纹理可能吗?

我很高兴使用 LibGDX 框架的 SpriteBatch 类。我的目标是通过着色器修改精灵的表示。

我从 SpriteBatch 类中复制了默认着色器并添加了另一个统一的 Sampler 2d

有没有一种工作方法可以将纹理赋予着色器。这样做,总是以 ClearColor 屏幕结束。

每个纹理单独工作。在 Mesh Class 的帮助下手动绘制可以按预期工作。那么我该怎么做才能使用 SpriteBatch 的便利性呢?

寻求帮助

0 投票
1 回答
242 浏览

opengl - OpenGL 建模

我正在尝试创建允许我从 Collada 格式转换为我自己的自定义格式的程序(这部分很容易并且可以控制)。我想做的是以下。

1.) 给定从 Collada 文件解析的确切数据,找到一种方法来绘制模型。a.) 一个简单的立方体将生成 8 个顶点、36 个法线和 12 个纹理坐标,这是查找但我能找到的 OpenGL 绘制它的唯一方法需要我复制顶点和法线的数据以匹配法线的数量.

2.) 找到实现多重纹理的方法。a.) 我已经找到了大量关于此的教程,但似乎我找不到实际使用它的方法。这些功能似乎没有内置到我的 openGL 版本中(我已经在 2 台计算机上尝试过),并且没有人记录我可能丢失的任何必需的 dll。

0 投票
1 回答
551 浏览

android - 如何在 Android 中使用 open gl es 1.1 进行多重纹理处理

我做了什么

目前在我的 Android 应用程序中,我正在绘制具有两种不同纹理的矩形
。给出了一个纹理(第二个)的淡入(更改 alpha)动画。

我想要的是。

我想使用多纹理因此在一个矩形中绘制两个纹理。但是我找不到任何使用 opengl es 1.1 与 android 进行多纹理的帮助的东西。

请任何人帮我做多纹理

这是我的代码

0 投票
1 回答
568 浏览

android - Android OPEN GL ES 多纹理不绘制任何内容

我是这个 OpenGL ES 的新手,我正在尝试使用多纹理绘制一个矩形,但它没有显示任何东西,我不知道这有什么问题。任何建议或想法都会对我很有帮助。

这是我的代码:

我所做的是将一些在网上找到但尚未成功获得任何结果的代码汇集在一起​​​​。我可以分两次绘制这个,例如绘制两个具有不同纹理的矩形并产生所需的结果。

我使用了一些GL11GL10结合起来可能是一个错误。:PI 不知道对不对。我这样做是因为某些常量不支持使用GL10.

这是对我有用的代码,但我想使用多纹理而不是这个: