C++ 为OpenGL编程我自己的三角形光栅化?

C++ 为OpenGL编程我自己的三角形光栅化?,c++,opengl,rasterizing,C++,Opengl,Rasterizing,我试图渲染圆角三角形以提高性能。为了说明我的意思,请参见下图: 我在CPU上试过,现在有没有办法把这个算法转移到GPU上?我可以更改调用片段着色器的方法代码吗 顺便问一下,如果我能做到这一点,那么我需要用什么编程语言来重新编写它呢 我使用的是OpenGL 2.1 GPU,内存带宽仅为20GB-30GB。我不确定你到底在干什么,但这似乎有点可疑。在着色器中执行某些自定义计算以渲染圆或椭圆时,实际上可能会影响性能 现代GPU硬件每秒可以推动数十亿个三角形。你可能在这里吹毛求疵 在任何情况下,如果你

我试图渲染圆角三角形以提高性能。为了说明我的意思,请参见下图:

我在CPU上试过,现在有没有办法把这个算法转移到GPU上?我可以更改调用片段着色器的方法代码吗

顺便问一下,如果我能做到这一点,那么我需要用什么编程语言来重新编写它呢


我使用的是OpenGL 2.1 GPU,内存带宽仅为20GB-30GB。

我不确定你到底在干什么,但这似乎有点可疑。在着色器中执行某些自定义计算以渲染圆或椭圆时,实际上可能会影响性能

现代GPU硬件每秒可以推动数十亿个三角形。你可能在这里吹毛求疵

在任何情况下,如果你想“伪造”几何图形,你可能会感兴趣:

阅读查尔斯·洛普和吉姆·布林的论文

简短版本:假设对曲线进行了有效的内部/外部测试,将封闭外壳形状渲染为三角形,使用片段着色器丢弃曲线外部的像素

其次,Aeluned担心将算法传输到GPU不会自动加快速度

  • 在OpenGL2.1上,您没有几何体着色器(3.2+),所以您可以忘记GPU
  • 曲面三角形不能提高凸面形状的栅格化性能
    • 任何凸多边形的栅格化的复杂性与同一区域的任何三角形相同
    • 区别仅在于:
    • 通过的顶点数
      • 内存传输
      • 使用几何体着色器,使用三角形会更好
    • 边界线数
      • 用于填充的边界线光栅化
      • 使用三角形会更糟糕
      • (需要连接更多三角形,而不是单一形状的多边形)
  • 因此,在您的案例中,为了获得更好的性能而实施此方法不是一个好主意

    我能想到的唯一一件事就是使用它来简化手动生成形状

    在这种情况下,只需编写一个函数glRoundedTriangle(..)

    • 根据给定的输入参数生成正确的顶点、颜色、法线和纹理坐标
    由于未指定圆角三角形几何图形/形状和/或输入参数(例如3个点+3个有符号曲线半径),因此其外观未知


    要提高OpenGL的性能,请使用VBO/VAO

    “尝试渲染圆角三角形以提高性能”…您的确切意思是什么?“你能举例说明吗?”巴特说。有了它,你可以用两个三角形渲染一个圆,用四个三角形渲染一个椭圆。你不能更改光栅化,但你可以编写一个片段着色器来消除片段,以改变三角形的形状。为什么不简单地对该形状进行三角化呢?也就是说,将其拆分为多个三角形,直到它足够接近舍入?@Fijiwiji,如果没有任何明确的细节,我没有理由相信三角剖分会对您的性能产生负面影响。我没有提到这一点,但我正在OpenGL 2.1 GPU上尝试,内存带宽仅为20GB-30GB。(这个GPU使用了10年以上)@Fijiwiji:Geometry通常不是内存带宽的霸主。纹理是。@datenwolf我只是想让你知道这个GPU是如何被重击的。如果这个GPU是新的,它的带宽将在160GB左右。