顶点着色器中的边界框

时间:2013-09-21 17:42:48

标签: opengl vertex-shader

目前我有一个简单的着色器,可以将静态网格物体渲染到场景中。我想知道是否可以在我的顶点着色器中有第二个输出,它在投影应用后为我提供了我的对象的2D边界框。像这样:

#version 330 core

in vec4 Vertex_ms;
in vec4 Normal_ms;

out vec4 Normal_ws;

uniform mat4 Proj;
uniform mat4 View;
uniform mat4 Model;

uniform out vec2 topRight;
uniform out vec2 bottomLeft;

void main() {
    gl_Position = Proj * View * Model * Vertex_ms;
    topRight = max(gl_Position.xy, topRight);
    bottomLeft = min(gl_Position.xy, bottomLeft);

    Normal_ws = Model * Normal_ms;
}

这不起作用,因为我不能写制服,但目的是,我可以减少项目顶点以获得一个边界框。

1 个答案:

答案 0 :(得分:4)

OpenGL-4.3为GLSL添加了一些允许实现它的功能,即所有以atomic…开头的函数。当然,那些需要支持OpenGL-4.3的实现,即最新一代的GPU。

对您而言最有用的是atomicMaxatomicMin

但是请注意,使用它们会带来严重的性能影响。一个更好的解决方案是提前计算边界体积,然后再改变它。如果你正在考虑可变形网格,请记住,对于任何给定的变形,它们将保持某些边界。