使用立方体贴图(不是反射贴图)对球体进行纹理处理

Posted

技术标签:

【中文标题】使用立方体贴图(不是反射贴图)对球体进行纹理处理【英文标题】:Texturing Spheres with Cubemaps (not reflection maps) 【发布时间】:2009-02-11 10:55:21 【问题描述】:

我想用立方体贴图为球体贴图。到目前为止,我的研究已经在 Google 上提出了很多关于使 OpenGL 自动生成纹理坐标的结果,但我想生成自己的坐标。

给定一个坐标数组,其中包含以 0,0,0 为中心的不完美球体(高度映射但本质上是一个球体)的顶点,如何为立方体贴图生成纹理坐标?

【问题讨论】:

【参考方案1】:

您是通过 GLSL 执行此操作的吗?在这种情况下,textureCube 接受 vec3 作为纹理坐标,它是球体上的单位向量。在您的情况下,您将获取片段相对于球体中心的坐标,对其进行标准化并将其作为坐标传递。无需担心内部表示为六个二维纹理。

uniform samplerCube cubemap;
varying vec3 pos; // position of the fragment w.r.t. the center of the sphere
/* ... */
vec4 color = textureCube(cubemap, normalize(pos).stp);

在固定流水线 OpenGL 中也是如此。

顺便说一下,坐标在内部是如何使用的:绝对值中最大的坐标用于选择从六个纹理中的哪一个读取(符号选择正或负)。其他两个坐标除以最大坐标后,用于查找所选地图中的纹素。

【讨论】:

拍脑袋 谢谢!我正在使用普通的 C++ atm,但一旦我了解更多信息,最终会转向 GLSL

以上是关于使用立方体贴图(不是反射贴图)对球体进行纹理处理的主要内容,如果未能解决你的问题,请参考以下文章

如何使用立方体贴图纹理非展开的模型

尝试对立方体贴图纹理进行采样时出现 GL_INVALID_OPERATION

CUDA 立方体贴图纹理

用OpenGL进行立方体表面纹理贴图

Unity Shaders and Effects Cookbook (4-1)(4-2)静态立方体贴图的创建与使用

全向阴影贴图