使用立方体贴图(不是反射贴图)对球体进行纹理处理
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