为OpenGL编写自己的三角栅格化?

时间:2012-12-17 15:27:57

标签: c++ opengl rasterizing

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

enter image description here

我试过CPU,现在有办法将这种算法以某种方式移动到GPU吗?我可以更改调用片段着色器的方法代码吗?

顺便说一句,如果我能做到,那么我需要重新制作哪种编程语言?

我使用的OpenGL 2.1 GPU只有20GB-30GB的内存带宽。

3 个答案:

答案 0 :(得分:1)

我不确定你到底在做什么,但似乎有点可疑。实际上,您最终可能会损害性能,尝试在着色器中执行一些自定义计算以呈现圆形或椭圆形。

现代GPU硬件每秒可以推动数十亿个三角形。你可能在这里分裂头发。

在任何情况下,如果您想“伪造”几何图形,您可能会对此感兴趣:https://alfonse.bitbucket.io/oldtut/Illumination/Tutorial%2013.html

答案 1 :(得分:1)

阅读Charles Loop和Jim Blinn的论文Resolution Independent Curve Rendering using Programmable Graphics Hardware

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

第二,Aeluned担心将算法转移到GPU不会自动加快速度。

答案 2 :(得分:0)

  1. 在OpenGL 2.1上你没有几何着色器(3.2+),所以你可以忘记GPU。
  2. 您无法通过弯曲三角形提高凸形的光栅化性能
    • 任何凸多边形的光栅化的复杂性与相同区域的任何三角形相同
    • 区别仅在于:
    • 传递顶点的数量
      • 记忆转移
      • 使用几何着色器,使用三角形用法会更好
    • 边界线的数量
      • 用于填充的边界线栅格化
      • 使用三角形时
      • 会更糟糕
      • (需要加入更多三角形而不是单个形状的多边形)
  3. 因此,为了在您的情况下获得更好的性能,实现这一点并不是一个好主意。

    我能想到的唯一一个用于缓解手动生成形状的东西。

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

    • 从给定的输入参数生成正确的顶点,颜色,法线,纹理坐标。

    它看起来是什么样的未知因为你没有指定圆角三角形几何/形状和/或输入参数(例如3点+ 3个有符号曲线半径?)

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