问题标签 [texture-mapping]

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 投票
4 回答
2084 浏览

c++ - OpenGL,将纹理从图像应用到等值面

我有一个程序,我需要在其中应用二维纹理(简单图像)到使用 Marching-cubes 算法生成的表面。我可以访问几何图形并且可以相对轻松地添加纹理坐标,但是生成坐标的最佳方法是躲避我。

体积中的每个点代表一个数据单元,每个数据单元可能具有不同的属性。为了简化事情,我正在考虑将它们分类为“类型”并为每种类型分配一个纹理(或单个大型纹理图集的一部分)。

我的问题是我不知道如何生成适当的坐标。我可以将类型纹理的位置存储在类型类中并使用它,但是接缝会被严重拉伸(如果两个相邻点使用图集的不同部分)。如果可能的话,我想在接缝处混合纹理,但我不确定这样做的最佳方式。混合是可选的,但我需要以某种方式对顶点进行纹理处理。可以将几何图形拆分为每种类型的部分,或者复制顶点以用于纹理化目的,但这是不可取的。

如果可能,我想避免使用着色器,但如有必要,我可以使用顶点和/或片段着色器来进行纹理混合。如果我确实使用着色器,那么告诉它是纹理还是要采样的部分的最有效方法是什么?似乎通过参数传递类型是最简单的方法,但可能很慢。

我的体积相对较小,每个维度有 8-16 个点(我将它们保持较小以加快生成速度,但在给定时间屏幕上有很多)。我简要地考虑过使等值面成为体积分辨率的两倍,因此每个点都有更多的顶点(理论上是 8 个),这可以简化纹理。不过,这似乎不会让混合变得更容易。

为了构建表面,我使用了OpenGL 的可视化库及其行进立方体和体积系统。我的几何生成很好,只需要弄清楚如何纹理它。

有没有办法有效地做到这一点,如果有的话怎么办?如果没有,是否有人知道处理体积纹理的更好方法?

编辑:请注意,纹理不仅仅是颜色的渐变。它实际上是一种纹理,通常带有图案。因此,映射它的困难,梯度将是微不足道的。

编辑 2:为了帮助澄清问题,我将添加一些示例。他们可能只是混淆了事情,所以如果可以的话,把所有事情都考虑在确定的事实之上,这些都只是帮助。

我的几何图形总是在立方体中(在立方体中加载、生成和保存)。如果形状影响可能的解决方案,就是这样。

我需要将由图案和/或颜色(取决于点的“类型”的独特的)组成的纹理应用到几何体,其技术类似于为地形完成的飞溅(但这不是地形,所以我不'不知道是否可以使用相同的技术)。

着色器是一种快速简便的解决方案,尽管我想尽可能避免使用它们,正如我之前提到的。可用于固定功能管道的东西更可取,主要是为了稍微增加兼容性和开发时间。因为它只是一个小的增加,如果需要,我将使用着色器和多通道渲染。

不确定是否需要任何其他澄清,但我会根据需要更新问题。

0 投票
2 回答
516 浏览

opengl - 3ds Max 渲染纹理的方式与我的游戏引擎不同?

我一直试图让我的游戏引擎显示纹理,我终于让它工作了。我使用了 3ds 模型中的 UV 坐标,但是纹理显示不同。

这是3ds max中的渲染: 替代文字

这是我的游戏引擎中的opengl渲染: 替代文字

为什么纹理是这样布置的?我从生成的 3ds 文件中提供了纹理坐标……有人知道为什么会这样吗?

0 投票
2 回答
2461 浏览

opengl - 纹理 VBO(顶点缓冲区对象)

我目前正在开发一种程序行星生成工具,该工具通过获取一个立方体,将其映射到一个球体,然后将高度图应用于每个面以生成地形。

我为使用以下方法创建的每个面使用 VBO:

我省略了 setIndexBufferObject() 方法,因为它工作正常。

然后我使用这种方法渲染球体:

纹理正在使用免费图像加载,正如您从上面的代码中看到的那样,我只是使用了 freeimage 附带的示例纹理管理器。

为什么绑定纹理不起作用?

0 投票
1 回答
610 浏览

javascript - 从 3D 模型获取纹理贴图

我在 Javascript/canvas 中构建了一个 3d 显示应用程序,它运行良好。我最近实现了映射纹理的能力。

我从 stl 格式导入 3d 模型,效果很好,因为它们只存储 tris,所以很容易导入,因为我不必分解它们,但它们不存储纹理。

存储纹理的方式就是这样

实际的实现有点不同,但这就是它的肉和肉汁。虽然它不是完美的纹理映射,但它只是一个仿射变换,看起来很丑陋,但对我来说已经足够了。

我的问题是我不确定如何从已经创建的 3d 对象中保存 triArray,这样我就不必仅为该项目创建全新的文件格式。

我想我有两个选择:

如果有一个将纹理坐标信息存储在文件中的文件格式,则为另一种文件格式制作一个导入器。(但是哪种文件格式?)

或者

或者是否有一种将纹理映射到对象的标准方法,然后我可以实现这些方法来创建我的数组?(方法是什么?)

0 投票
3 回答
33886 浏览

opengl - OpenGL:渲染到纹理和帧缓冲区对象的问题

我想将场景渲染为最初为空的纹理。为此,我使用了一个帧缓冲区对象,我将一个空的 2d 纹理和一个深度缓冲区附加到该对象上。设置完成后,至于测试,我在场景中绘制了一个简单的四边形。每个顶点都有不同的颜色,所以我最终希望纹理中有一个颜色插值的四边形。然后我使用包含四边形的纹理并将其映射到另一个四边形上。所以最终,我的默认帧缓冲区中有一个四边形,它的纹理包含一个彩色四边形。我希望这不会太混乱......

无论如何,我必须在这里遗漏一些东西,因为我得到的只是灰色纹理。我基本上遵循了这个非常简单的说明。但是,我无法完全弄清楚我在这里缺少什么。如果有人能给我一个线索,我将不胜感激。

谢谢沃尔特


这是我到目前为止的代码: // 创建帧缓冲区对象 glGenFramebuffers(1, &frameBufferObject);


预期结果:

  • 黄色背景上带有彩色四边形的纹理
  • 该纹理映射到另一个四边形

实际结果:

  • 灰色的纹理
  • 纹理可以成功映射到另一个四边形

编辑:我错过了提到错误处理。这就是我检查错误的方式。它包括 Paul S 建议的其他案例。感谢那。

编辑 2:这是我用来检查 GL 错误的方法

0 投票
2 回答
14868 浏览

c++ - Texture Mapping C++ OpenGL

I have read around on this, including Nehe and here for solutions, but I cant find a specific answer.

I am trying to load a a photo, called stars.jpg. I want to make this my background of the scene, by mapping it using uv coordinates, doing it by

However I am just very confused about how to load the actual textures in, all the calls for

All they do is confuse me, what do all these mean/do, and in what order am I suppose to put these in, in order to get the stars.jpg to be my background?

0 投票
2 回答
2236 浏览

objective-c - 将正方形纹理映射到三角形

我开始使用 OpenGL ES 1.0 并且遇到了一些(初学者)问题:我试图将方形纹理映射到由三角形描述的立方体。

现在,经过无数次尝试,我无法让它在其他方面工作......在将方形纹理映射到三角形时是否有一些经验法则?

编辑:我想我知道应该如何进行映射。但它不适用于这个例子(一张脸)。有人可以验证我是否正确完成了映射(假设其余代码正常工作)?

非常感谢

0 投票
1 回答
285 浏览

iphone - 是否可以在openGL ES中将多个纹理映射到一个形状上?

我是新手OpenGL ES,想创建一堆三角形来代表我可以将地图图块映射到的正方形网格。是否可以在 OpenGL ES 中将单独的纹理映射到相同的形状上,或者我必须让网格的每个正方形都成为自己的对象?谢谢。

0 投票
2 回答
2670 浏览

iphone - 在正方形上映射纹理:为什么图像会旋转?

我成功地在 OpenGL ES 的正方形上映射了一个图像……但它旋转了 90 度。我是 OpenGL ES 的新手,想知道是否有人能指出它为什么会旋转。谢谢!

0 投票
2 回答
4037 浏览

qt - openGL 纹理仅显示纹理的红色分量

我正在尝试将图像纹理映射到单个多边形。我的图像被正确读取,但只有图像的红色平面被纹理化。

我在 QGLWidget 中这样做

我在读取图像后检查了图像,并且它的组件被正确读取——即,我得到了绿色和蓝色平面的有效值。

这是代码

then I draw like this:

有没有人看到任何会导致我的纹理被解释为 (r,0,0,1) 的值的东西?(r,g,b,a)?

QT 4.7.1、Ubuntu 10.04、openGl 2.something 或其他

提前感谢您的帮助