小编Bub*_*fus的帖子

如何使用变换反馈使用几何着色器限制发射的顶点?

我正在使用OpenGL中的简单粒子系统,我需要在GPU上生成粒子.通常我将粒子表示为GL_POINTS并且在开始时仅使用一个粒子生成点.我所做的是创建两个顶点缓冲对象(VBO)并根据最大粒子数在GPU上分配内存.然后创建两个变换反馈缓冲区(TFB),并将它们中的每一个绑定到一个VBO的输出.第一个TFB表示第二个VBO的输入,反之亦然(交换缓冲区).

然后我在几何着色器上生成新顶点(=点,粒子).

几何着色器代码:

#version 330 compatibility

#extension GL_ARB_geometry_shader4 : enable

layout(points) in;
layout(points, max_vertices = 3) out;

in block{
  vec4 v_WorldPosition;

  vec3 f_Position;
  vec3 f_Color;  
} In[];

out block{
  vec4 v_WorldPosition;
  vec4 v_Color;
} Out;

out feedback{
  vec3 f_Position; 
  vec3 f_Color;  
} feedOut;


const int i = 0; // No need for loop (points. In.length() == 1)

void main()
{  
    feedOut.f_Position = In[i].f_Position; 
    feedOut.f_Color    = In[i].f_Color; 

    if(In[i].f_Color.g == 1){
        feedOut.f_Color.g = 0;
    }

    Out.v_Color = vec4(feedOut.f_Color, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl

11
推荐指数
1
解决办法
1205
查看次数

标签 统计

c++ ×1

opengl ×1