问题标签 [textures]

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 投票
2 回答
1391 浏览

opengl - OpenGL中的高效纹理访问

我正在使用 OpenGL 开发游戏,这就是我想做的事情:

  1. 在游戏逻辑的迭代过程中,访问纹理的纹素进行计算。
  2. 仍然在相同的逻辑交互过程中,可能会修改纹理的纹素。
  3. 使用当前版本的纹理渲染游戏场景。
  4. 以类似的方式访问纹素数据开始另一个迭代。

我在使用 glGetTexImage() 时遇到问题,因为调用会使我的程序崩溃,而且我不完全确定这是我想要使用的。

我能看到的唯一直接方法是在系统内存中有一个缓冲区,其中包含我可以处理的纹素信息,并在每次迭代时从中生成一个新的 OpenGL 纹理。这似乎是一个糟糕的举动。

有什么帮助吗?

0 投票
6 回答
14517 浏览

opengl - OpenGL 纹理不显示的常见故障排除步骤是什么?

在我的应用程序中进行一些更改后,我的纹理不再显示。到目前为止,我已经检查了以下内容:

  • 相机方向没有改变。
  • 我可以看到矢量(当着色而不是纹理时)。

有什么常见的嫌疑人吗?

0 投票
7 回答
15901 浏览

c++ - 简单的 OpenGL 纹理贴图不起作用?

我正在尝试找出 OpenGL 中的纹理映射,但我找不到一个简单的例子来工作。

正在绘制多边形,虽然它没有纹理,而只是纯色。此外,位图也被正确加载到 sprite1[] 中,因为到目前为止我一直在成功使用 glDrawPixels。

我使用 glGenTextures 来获取我的 tex 名称,但我注意到它并没有改变 texName1; 这个 GLuint 是我初始化它的任何东西,即使在调用 glGenTextures 之后......

我已启用 GL_TEXTURE_2D。

继承人的代码:

更新:我不知所措。这是我尝试过的所有内容:

  1. 原来我是在初始化 OGL 之前初始化我的纹理。纹理在类构造函数中初始化(glGenTextures->glTexImage2D)并在每帧调用的成员函数中绘制(glBegin->glEnd)。genTextures 现在似乎工作正常,我的名字是 1。

  2. GL_RGBA8、GL_BGRA_EXT 的所有可能组合(GL_BGRA 在我的系统上不起作用;我需要 _EXT),我什至从位图中删除了 alpha 通道并尝试了 GL_RGB、GL_BGR_EXT 等的所有组合。没有运气。

  3. 尝试以程序方式创建位图并使用它

  4. 确保 GL_COLOR_MATERIAL 未启用。

  5. 将位图大小更改为 32x32。

  6. 尝试了 glTexEnvi 而不是 glTexEnvf。

0 投票
1 回答
2831 浏览

c++ - 在OpenGL中将纹理bmp文件作为纹理平铺到矩形上?

我有一个 pic.bmp,我正在尝试将其平铺到一个 3 x 2 矩形平面上,以进行我正在制作的演示。

我试图保持 bmp 的纵横比完好,但我仍然想将它平铺在该表面上。现在我的曲面顶点为 (0,0,0)、(3,0,0)、(0,2,0) 和 (3,2,0)。

如何将此 bmp 应用到平面并平铺?在 GLUT 和 OpenGL 中执行此操作的最佳方法是什么?

0 投票
1 回答
15620 浏览

c++ - 如何在 OpenGL 中使纹理透明?

我试图在谷歌上对此进行研究,但在我看来没有任何连贯的简单答案。这是因为它不简单,还是因为我没有使用正确的关键字?

尽管如此,这是我迄今为止取得的进展。

  1. 创建 8 个顶点以形成 2 个正方形。
  2. 创建了一个具有 200 位 alpha 值的纹理(因此,大约 80% 透明)。
  3. 为每个正方形分配了相同的纹理,显示正确。
  4. 注意到当我使用 255 alpha 的纹理时,它看起来更亮。

init 类似于以下内容:

这有点类似于OpenGL Programming Guide书中第 417 页的代码片段,并创建了一个检查模式。

然后,显示功能包含...

因此,这会在背景中呈现第二个正方形;我可以看到这一点,但看起来它们正在与背景混合(我假设这是因为它们在 200 位 alpha 中比 255 位更暗)而不是背后的纹理......

透明纹理不起作用

如您所见,没有透明度......我该如何解决这个问题?

0 投票
3 回答
3615 浏览

opengl - OpenGL alpha值使纹理更白?

我正在尝试使用 RGBA 值加载纹理,但 alpha 值似乎只是使纹理更白,而不是调整透明度。我听说过 3D 场景存在这个问题,但我只是将 OpenGL 用于 2D。无论如何我可以解决这个问题吗?

我正在初始化 OpenGL


屏幕截图: 那个褪色的点状图像应该是半透明的。黑色位应该是完全透明的。如您所见,它背后有一个图像没有显示出来。

生成该纹理的代码相当长,所以我将描述我所做的。它是一个 40*30*4 类型的 unsigned char 数组。每 4 个字符设置为 128(应该是 50% 透明,对吧?)。

然后我将它传递给这个函数,将数据加载到纹理中:

而且...我想我刚刚发现了问题。正在使用以下代码初始化全尺寸纹理:

但我猜 glTexImage2D 也需要是 GL_RGBA 吗?我不能使用两种不同的内部格式?或者至少不是不同大小的(3字节对4字节)?GL_BGR 即使像这样初始化也能正常工作......

0 投票
2 回答
3797 浏览

c++ - 在OpenGL中动态加载纹理的好方法是什么?

目前我正在第二个线程上将图像加载到内存中,然后在显示循环期间(如果需要纹理加载),加载纹理。

我发现我无法在第二个线程上加载纹理,因为 OpenGL 不喜欢这样;也许这是可能的,但我做错了什么 - 所以如果这实际上是可能的,请纠正我。

另一方面,如果我的失败是有效的——如何在不中断渲染循环的情况下加载纹理?目前,纹理从内存加载大约需要 1 秒,虽然这不是主要问题,但对用户来说可能会有点烦人。

0 投票
1 回答
2795 浏览

iphone - iPhone OpenGL ES 2d 背景纹理

我有一个 1024 x 1024 的图像,我在我的游戏中用作背景纹理。

我想知道它们是否是处理绘制大背景纹理的正确方法。

我目前是如何做的:

0 投票
3 回答
1577 浏览

c++ - 修复 glCopyTexSubImage2D 倒置纹理

自从我开始学习渲染到纹理后,我逐渐明白这glCopyTexSubImage2D()会将屏幕的指定部分倒置。我尝试了一些简单的事情来防止/解决这个问题,但找不到优雅的解决方案。

  • 在将纹理渲染到屏幕之前执行 ::glScalef(1.0f, -1.0f, 1.0f) 有两个问题: 1,我每次使用纹理时都必须这样做。2,我主要使用 2D 图形,并为 GL_BACKsides 关闭了背面剔除。我希望尽可能多地打开和关闭它。

  • 尝试将矩阵模式切换到 GL_TEXTURE 并在捕获时进行 ::glScalef(1.0f, -1.0f, 1.0f) 转换,但结果是相同的。(我猜纹理矩阵只对 glTexCoord 调用有影响?)

那么,如何修复用 捕获的纹理的上下方向glCopyTexSubImage2D

0 投票
4 回答
1555 浏览

xna - 动态更改或破坏 Texture2D 以进行绘图和碰撞检测

我将 XNA 用于 2D 项目。我有一个问题,我不知道用什么方法来解决它。我有一个被绘制到屏幕上的纹理(图像),例如:

现在我希望能够破坏该结构/图像的一部分,使其看起来像:

所以现在的碰撞也适用于新图像。

哪种方式会更好地解决这个问题:

  1. 用另一个纹理交换整个纹理,在它被破坏的地方是透明的。
  2. 对 spriteBatch.Draw(sourceRectangle,destinationRectangle) 使用一些技巧来绘制所需的矩形,并以某种方式对此进行碰撞检查。
  3. 将纹理拆分为 4 个较小的纹理,每个纹理将负责其自己的绘图/碰撞检测。
  4. 使用我不知道的其他一些聪明的方法。

任何帮助,将不胜感激。如果您需要更多说明/示例,请告诉我。

编辑:为了澄清,我将为此提供一个使用示例。想象一堵 4x4 的墙,当被射击时,它的一小部分 1x1 被摧毁。