如何以与OpenGL中的点精灵相同的方式渲染屏幕对齐的矩形

时间:2014-10-22 15:12:30

标签: c++ c opengl

我想渲染与屏幕轴对齐的矩形,但不使用任何奇特的东西,如三角形或扇形...... 我在网上搜索但是只找到使用三角形的例子......(最后一个使用剪刀矩形,但如果我渲染很多,特别是旧版本,它会太慢)

知道三角形是现代硬件在渲染方面最好的,但我不知道如何比做某些事情(理论上)更快:

for (i=y; i<y+h; i++) {
    for (j=x; j<x+w; j++) {
        executeFragmentShader(j, i);
    }
} //x, y, w and h being the rectangle's data

我在问OpenGL是否有办法通过像gl_PointSize一样指定一个顶点和尺寸来渲染矩形像点精灵。

如果这种情况不可能,那么视频加速软件如互联网浏览器或其他桌面应用程序如何呈现矩形区域?
他们使用三角形吗?

1 个答案:

答案 0 :(得分:3)

他们使用三角形,如下所示:

Square composed of two triangles

如果您不关心深度缓冲区值,那么您可以通过在顶点着色器中不进行任何变换来渲染四边形(或者,如果使用旧的glMatrix函数,则使用标识投影和模型视图矩阵); (-1, -1)将位于屏幕的左下角,而(1,1)则位于右上角。或者,您可以使用正交投影矩阵传递像素坐标或其他内容。

如果您需要深度值,或需要使用世界空间坐标,请查看广告牌;有很多关于如何做的教程。

请记住,现代3D游戏每帧绘制数十万个投影三角形,但只有少数HUD元素,几乎总是简单的纹理矩形。猜猜GPU供应商针对哪种情况进行优化。