在现代OpenGL中渲染大圆形点

jaideep777

我想绘制围绕2D坐标存储在VBO中的一组点的半径动态变化的填充圆。到目前为止,我使用的是GL_POINT_SMOOTH,但是现在转移到OpenGL 4.0,此选项不再可用。我在这里看到了类似的问题但这并不完全适合我的需要,因为该示例中的圆心在片段着色器中是硬编码的。我该怎么做?

此刻,我的顶点着色器如下所示:

#version 400

layout(location=0) in vec2 in_Position;
layout(location=1) in vec4 in_Color;
out vec4 ex_Color;

uniform vec4 bounds;

void main(void){
    float x = -1+2/(bounds.y-bounds.x)*(in_Position.x-bounds.x);
    float y = -1+2/(bounds.w-bounds.z)*(in_Position.y-bounds.z);
    gl_Position = vec4(x,y,0,1);
    ex_Color = in_Color;
}

我的片段着色器如下所示:

#version 400

in vec4 ex_Color;
out vec4 out_Color;

void main(void){
    out_Color = ex_Color;
}

使用这些着色器,我得到了平方点。

雷托·科拉迪(Reto Koradi)

绘制点的“现代”方式如下:

  1. 启用程序点大小模式:

    glEnable(GL_PROGRAM_POINT_SIZE);
    
  2. 使用GL_POINTS基本模式渲染顶点

  3. 在顶点着色器中,将内置变量gl_PointSize设置为所需的单个点大小:

    gl_Position = ...;
    gl_PointSize = ...;
    

    如果该点大小始终保持不变,则用于该点大小的值可以是恒定的;如果希望在绘制调用之间进行调整,则该值可以是统一的;如果点大小对于每个点是可变的,则该点可以是顶点属性。

  4. 这将为由的值指定的大小的正方形点生成片段gl_PointSize在片段着色器中,您可以使用内置gl_PointCoord变量,该变量为您提供点内片段的相对坐标。它的工作方式与纹理坐标非常相似,在每个方向上提供[0,1]的范围。

    例如,如果您想要纹理点,这对于粒子系统非常有用,则片段着色器代码可以包含:

    outColor = texture(particleTex, gl_PointCoord);
    

    或者,如果需要圆点,则可以根据距中心的距离丢弃圆外的所有内容:

    vec2 circCoord = 2.0 * gl_PointCoord - 1.0;
    if (dot(circCoord, circCoord) > 1.0) {
        discard;
    }
    

    或类似地,您可以使圆外的片段透明,并启用混合以获得圆点。

请注意,支持的点大小范围取决于实现。您可以使用以下方法查询可用范围:

GLfloat sizeRange[2] = {0.0f};
glGetFloatv(GL_POINT_SIZE_RANGE, sizeRange);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在现代OpenGL中渲染多个纹理?

来自分类Dev

如何使用GLSL在现代OpenGL中渲染文本

来自分类Dev

使用现代OpenGL渲染纹理

来自分类Dev

使用现代OpenGL的点精灵大小衰减

来自分类Dev

使用lwjgl在现代OpenGL中绘制纹理

来自分类Dev

opengl中的水渲染

来自分类Dev

iOS中的OpenGl渲染

来自分类Dev

OpenGL延迟渲染:点光源实现

来自分类Dev

在OpenGL中创建椭圆形或椭圆形光源?

来自分类Dev

我可以在单个渲染窗口中同时使用已弃用的OpenGL和现代OpenGL吗?

来自分类Dev

在OpenGL中渲染.ply文件

来自分类Dev

在OpenGL中渲染裁剪的图像

来自分类Dev

在OpenGL中渲染.ply文件

来自分类Dev

在OpenGL中渲染到纹理

来自分类Dev

捕获在OpenGL中渲染的内容

来自分类Dev

在类中渲染OpenGL对象?

来自分类Dev

使用现代OpenGL进行2D渲染的正交投影

来自分类Dev

现代OpenGL-如何以不同的颜色渲染VBO零件

来自分类Dev

在现代OpenGL中画一条线

来自分类Dev

我可以在一个渲染窗口中同时使用已弃用的OpenGL和现代OpenGL吗?

来自分类Dev

如何在现代openGL中用3D点绘制多边形?

来自分类Dev

在React Native中在圆形圆周上渲染文本

来自分类Dev

QT中的渲染循环功能可在Windows中渲染opengl

来自分类Dev

用 Octave 中的圆形图案点生成坐标点

来自分类Dev

为什么在SQL Server Management Studio中我的缓冲点是长圆形而不是圆形-空间结果

来自分类Dev

Android Opengl 圆形纹理

来自分类Dev

Xamarin中的跨平台OpenGL渲染

来自分类Dev

opengl中的渲染目标是什么?

来自分类Dev

纹理在OpenGL中的渲染非常奇怪