gpt4 book ai didi

c++ - 一次通过 OpenGL 绘制立方体贴图

转载 作者:行者123 更新时间:2023-11-30 02:31:28 51 4
gpt4 key购买 nike

我正在尝试使用 OpenGL 中的几何阴影一次性绘制到立方体贴图。基本上我需要这样做来将一个立方体贴图的内容复制到另一个立方体贴图中,并且它们可能具有不同的分辨率和像素布局。

我正在努力实现我想要的结果,我想将一个点提供给顶点着色器,然后从几何着色器中选择每个层(立方体贴图的面)并发出四边形和纹理坐标。

到目前为止,我已经尝试过只发射立方体贴图的两个面(正 X 和负 X)的方法,看看它是否可行,但它不起作用。

使用 NSight 我可以看到有问题。

这是源立方体贴图: enter image description here

这是立方体贴图的结果: enter image description here

唯一被吸引到的是正 X,但它仍然不正确。

这是我的几何着色器:

#version 330 core

layout(points) in;
layout(triangle_strip, max_vertices = 8) out;

in vec3 pos[];
out vec3 frag_textureCoord;

void main()
{
const vec4 positions[4] = vec4[4] ( vec4(-1.0, -1.0, 0.0, 0.0),
vec4( 1.0, -1.0, 0.0, 0.0),
vec4(-1.0, 1.0, 0.0, 0.0),
vec4( 1.0, 1.0, 0.0, 0.0) );

// Positive X
gl_Layer = 0;

gl_Position = positions[0];
frag_textureCoord = vec3(1.0, -1.0, -1.0);
EmitVertex();

gl_Position = positions[1];
frag_textureCoord = vec3(1.0, -1.0, 1.0);
EmitVertex();

gl_Position = positions[2];
frag_textureCoord = vec3(1.0, 1.0, -1.0);
EmitVertex();

gl_Position = positions[3];
frag_textureCoord = vec3(1.0, 1.0, 1.0);
EmitVertex();
EndPrimitive();

// Negative X
gl_Layer = 1;

gl_Position = positions[0];
frag_textureCoord = vec3(-1.0, -1.0, 1.0);
EmitVertex();

gl_Position = positions[1];
frag_textureCoord = vec3(-1.0, -1.0, -1.0);
EmitVertex();

gl_Position = positions[2];
frag_textureCoord = vec3(-1.0, 1.0, 1.0);
EmitVertex();

gl_Position = positions[3];
frag_textureCoord = vec3(-1.0, 1.0, -1.0);
EmitVertex();
EndPrimitive();
}

这是我的片段着色器:

#version 150 core

uniform samplerCube AtmosphereMap;

in vec3 frag_textureCoord;

out vec4 FragColor;

void main()
{
FragColor = texture(AtmosphereMap, frag_textureCoord) * 1.0f;
}

更新使用 NSight 进一步调试显示,对于正 x 面,每个片段都获得 vec3(~1.0, ~0.0, ~0.0)frag_textureCoord 值(我使用了 ~ 因为这些值不完全相同,而是近似值)。相反,负 x 面永远不会到达片段着色器阶段。


更新将我的顶点位置的定义从 vec4(x, y, z, 0.0) 更改为 vec4(x, y, z, 1.0) 使我的着色器正确渲染正X 脸,但底片仍然是错误的,即使调试片段着色器我看到选择并应用了正确的颜色,但随后它变成了黑色。

最佳答案

gl_Layer = 0;

这是一个 Geometry Shader output .调用 EmitVertex 将导致所有输出变量的值变为未定义。因此,您必须始终为应用该输出的每个顶点设置每个输出。

关于c++ - 一次通过 OpenGL 绘制立方体贴图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707875/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com