0

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

在此处输入图像描述

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

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

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

4

3 回答 3

1

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

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

无论如何,如果您想“伪造”几何图形,您可能会感兴趣:https ://alfonse.bitbucket.io/oldtut/Illumination/Tutorial%2013.html

于 2012-12-17T15:51:52.347 回答
1

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

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

其次,Aeluned 担心将算法转移到 GPU 不会自动使其更快。

于 2012-12-17T22:30:43.920 回答
0
  1. 好吧,在 OpenGL 2.1 上,您没有几何着色器 (3.2+),因此您可以忘记 GPU。
  2. 您不能通过弯曲的三角形来提高凸形的光栅化性能
    • 任何凸多边形的光栅化复杂度与相同面积的任何三角形相同
    • 区别仅在于:
    • 通过的顶点数
      • 记忆转移
      • 使用几何着色器,这将更好地使用您的三角形
    • 边界线数
      • 用于填充的边界线光栅化
      • 使用三角形会更糟
      • (需要加入更多的三角形而不是单一形状的多边形)

因此,在您的情况下实施此操作以获得更好的性能并不是一个好主意。

我能想到的唯一一件事就是简化手动生成形状。

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

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

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

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

于 2013-10-14T10:32:05.740 回答