【问题标题】:GLSL Shader to convert six textures to Equirectangular projectionGLSL Shader 将六个纹理转换为 Equirectangular 投影
【发布时间】:2016-05-05 01:43:19
【问题描述】:

我想从六个二次纹理创建equirectangular projection,类似于将三次投影图像转换为等角矩形图像,但将单独的面作为纹理而不是三次投影中的一个纹理。

出于性能原因,我想在显卡上执行此操作,因此想使用 GLSL 着色器。

我找到了一个可以将立方体纹理转换为等角矩形纹理的着色器:link

【问题讨论】:

  • 问题到底是什么?
  • 我需要一些关于如何获取多个纹理并通过算法将它们的像素“移动”到最终纹理上的提示
  • 什么是“二次纹理”?什么是“立体投影图像”?
  • @NicolBolas 这是Cubic Projection,我所说的“二次纹理”是指具有相同宽度和高度的纹理。
  • 不一样但相似的问题(不同的转换)Equirectangular to azimuthal equidistant projection in GLSL 可能会有所帮助。

标签: opengl glsl shader


【解决方案1】:

第 1 步:将您的六个纹理复制到立方体贴图纹理中。您可以通过将纹理绑定到 FBO 并使用 glBlitFramebuffer() 来做到这一点。

第 2 步:运行以下片段着色器。您需要在四边形上将 Coord 属性从 (-1,-1) 更改为 (+1,+1)。

#version 330
// X from -1..+1, Y from -1..+1
in vec2 Coord;
out vec4 Color;
uniform samplercube Texture;

void main() {
    // Convert to (lat, lon) angle
    vec2 a = Coord * vec2(3.14159265, 1.57079633);
    // Convert to cartesian coordinates
    vec2 c = cos(a), s = sin(a);
    Color = sampler(Texture, vec3(vec2(s.x, c.x) * c.y, s.y));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多