问题标签 [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 投票
2 回答
193 浏览

c++ - 纹理模型

我编写了一个带有简单模型引擎的 3d 地形引擎。

我为我的地形使用矩形高度图,因此对这些三角形进行纹理处理非常简单。

但是,在对我的模型进行纹理处理时,我有点卡住了。

我使用自定义模型格式,因此使用搅拌机使用 3ds等答案将无济于事。

这样做的原因是我开始这个爱好项目是为了自学 OpenGL 编程,并且由于我从一个非常古老的 Turbo Pascal 软件渲染器中准备好了模型,我的一个朋友在 1999 年编写了这些模型,所以我一直在使用它们。

我的问题是:

是否有一种众所周知的算法可以为我的模型所包含的三角形生成纹理坐标?如果不是,我应该遵循什么策略?

0 投票
2 回答
2095 浏览

opengl - OpenGL中具有宽度和高度POT的矩形纹理

我正在尝试在 OpenGL 中使用矩形纹理。当高度等于纹理的宽度时,一切看起来都很好,但是,当高度与宽度不同时,纹理看起来会变形。

我的显示功能是(h并且w是存储图像高度和宽度的全局变量):

请注意,绘制图像的大小无关紧要。无论实际多边形大小如何,它都会变形。

我正在加载纹理:

当我加载64x64方形纹理图像时,它看起来很好。但是,当我加载矩形纹理图像时,图像看起来失真。

OpenGL如何支持矩形POT纹理?我的代码有什么问题?

0 投票
1 回答
977 浏览

image - 在 OpenGL 中加载图像以用于 GIS 应用程序

我目前正在开发一个内部 GIS 应用程序。背景图像通过将图像分解为我猜称为纹素和 mipmapped 的图像在 OpenGL 中加载,然后构建一个显示列表以将每个纹素纹理映射到矩形上。这听起来很标准,但问题是目前对于没有整齐划分为 2^n 像素 x 2^m 像素纹素的图像,剩余部分被丢弃。即使我要捕获剩余部分并以某种方式处理它们,我也无法想象答案是不断测试纹素细分,最终导致在整齐的边界上完全捕获图像?或者是吗?

在某些情况下,我正在加载的图像是 geotiff,我需要将每个像素都包含在我的背景中。我听说 glDrawPixels 很慢。我知道我可以自己测试一下,但我感觉这个领域的人在 opengl 中使用纹理,而不是跟踪像素转储。

我是 OpenGL 的新手,我相信该应用程序将自身限制为 1.1 调用。

0 投票
2 回答
2413 浏览

graphics - 最大化纹素密度和一致性的UV映射算法?

我正在寻找一种将 3D 网格的多边形自动映射到 UV 空间的方法,以使纹素密度最大化并在多边形之间保持尽可能一致。是否存在一种算法,在这方面可以提供比平面、长方体、圆柱和球面等标准投影更好的结果?

0 投票
1 回答
677 浏览

graphics - 获取最小和最大渲染 UV 值 (Direct3D)

我需要计算分配给从某个角度在屏幕上绘制给定对象时产生的像素的最小和最大 UV 值。例如,如果我有一个 UV 映射立方体,但只有正面可见,则 min(UV) 和 max(UV) 应设置为分配给可见面像素的最小和最大 UV 坐标。

我想使用 Direct3D 9 着色器(以及可能的最低着色器模型)来加快处理速度。顶点着色器可以像获取每个输入顶点的 UV 坐标并将它们未经修改地传递给像素着色器一样简单。另一方面,像素着色器必须采用顶点着色器产生的值并使用这些值来计算最小和最大 UV 值。

我想知道的是:

  1. 如何在像素着色器的调用之间保持状态(当前最小值和最大值)?
  2. 如何将着色器生成的最终最小值和最大值放入我的程序中?

有没有办法在 HLSL 中做到这一点,还是我坚持手工做?如果 HLSL 不起作用,那么在不使用着色器的情况下最有效的方法是什么?

0 投票
4 回答
2831 浏览

3d - “袋装球体”平面到球体投影

我正在寻找将二维平面[0,1]x[0,1]上的点转换到单位球上的数学转换。

u最常见的投影是通过将和解释v为球坐标的角度来进行经纬度映射(映射u[0,2PI]v[-PI/2, PI/2]

这会对球体的两极产生强烈的扭曲。可以将这种变换想象为将球体包裹成糖果纸,并在两端旋转纸。这将在这两端产生扭曲。

我正在寻找的转换可能是将球体放在纸的中间并将球体的所有边放在一个点上并将它们一起旋转 - 所以你会得到一个装有球体的小纸袋. 这会在“袋子”的底部产生最小的失真,而在顶部产生最大的失真 - 如果从下面看,失真在所有方向上都是相等的。

有人能告诉我如何计算这种映射吗?

0 投票
1 回答
822 浏览

cocoa - 无法与 OpenGL/Cocoa 共享纹理

我是一个 openGL 新手,我正在尝试让纹理共享在两个 openGL 视图之间工作。我创建了两个 NSOpenGL 视图类,然后在界面构建器中创建了一个窗口,每个窗口都有一个 openGL 视图。第一个视图在其 prepareOpenGl 中有代码,用于设置纹理并将其分配给全局变量,第二个视图将其 openGlContext 重新初始化为与创建纹理的原始视图共享的代码,然后在第二个视图我在全局纹理上调用 glBindTexture。当我运行我的应用程序时,我只在第一个视图上看到一个纹理,而第二个视图只显示一个无纹理的对象。看来我的纹理共享不起作用。我想知道我的总体策略是否有缺陷,或者我是否只是遗漏了一些细节。

当我提到“第二个视图”时,我的意思是试图使用原始视图的纹理。

0 投票
1 回答
2034 浏览

opengl - OpenGL纹理混合和翻译

我有两个纹理映射到表面,一个是棋盘格(地板上的图案),一个是光照贴图,两者都可以很好地混合和呈现。我遇到的问题是在混合之前使光照贴图纹理转换。我需要这样做,这样我就可以模拟手电筒在地板上的扫描......

代码:

我已经尝试将六行代码放在**的几个位置,我想也许 OpenGL 状态机在某个特定的地方需要它,但似乎没有什么能给我想要的效果。

以前有人做过吗?我在我的任何一本 OpenGL 书籍或网上都找不到任何关于翻译和混合纹理的信息。我可能正在寻找错误的东西,但是我已经两天来一直在用头撞墙。任何帮助都会很棒。

谢谢

0 投票
1 回答
1636 浏览

3d - 如何测量 UV 坐标?

我有一个导出 UV 映射 3D 模型的 3D 建模程序。

但是,UV 坐标似乎无效或使用了我不理解的系统。我需要帮助了解 UV 坐标如何映射到位图的像素(X,Y)

我有几个 150x100 到 200x600 范围内的纹理。以下是一些摘录:

根据上述数据,考虑到最大可测量像素为 600,700+ UV 坐标是否会回绕到图像的开头?<0 UV 坐标是否从图像的末端向后测量?

0 投票
1 回答
746 浏览

3d - 为什么这些 UV 映射坐标用 0-1 和像素表示?他们不应该只使用0-1系统吗?

好吧,我有许多 3D 模型的 UV 坐标,它们清楚地在 0-1 范围内,许多看似像素值的坐标在 100-300 范围内。

我怎么知道将坐标解释为哪一个?有这方面的标准或系统吗?

我注意到导出文件中的每个 3d 网格都可能使用任一系统。这是正常的程序吗?如果是,我如何解释 UV 纹理映射坐标以在我的 3d 引擎中正确显示它们?

0-1系统中的坐标示例:

按像素测量的坐标示例: