gpt4 book ai didi

opengl-es-2.0 - OpenGL ES 2.0 等效于使用 GL_POINT_SMOOTH 的 ES 1.0 圆?

转载 作者:行者123 更新时间:2023-12-04 14:50:26 29 4
gpt4 key购买 nike

OpenGL ES 2.0 没有 ES 1.0 那样的 GL_POINT_SMOOTH 定义。这意味着我用来绘制圆圈的代码不再有效:

glEnable(GL_POINT_SMOOTH);
glPointSize(radius*2);
glDrawArrays(GL_POINTS,0,nPoints);

ES 2.0 中是否有等价物,也许需要在顶点着色器中使用,或者我必须为每个圆使用多边形?

最佳答案

您可以使用点 Sprite 来模拟这一点。只要启用点 Sprite ,你就会得到一个特殊的变量 gl_PointCoord您可以在片段着色器中读取。这为您提供了当前点正方形中片段的坐标。您可以使用这些来读取包含圆圈的纹理(不在圆圈中的像素的颜色为 0),然后丢弃每个纹理值为 0 的片段:

if(texture2d(circle, gl_PointCoord).r < 0.1)
discard;

编辑:或者你可以在没有纹理的情况下完成它,通过用纹理访问延迟换取计算复杂度并仅评估圆方程:
if(length(gl_PointCoord-vec2(0.5)) > 0.5)
discard;

这可以通过删除平方根(在 length 函数中使用)并与平方半径进行比较来进一步优化:
vec2 pt = gl_PointCoord - vec2(0.5);
if(pt.x*pt.x+pt.y*pt.y > 0.25)
discard;

但也许是内置的 length函数甚至比这更快,针对长度计算进行了优化,并且可以直接在硬件中实现。

关于opengl-es-2.0 - OpenGL ES 2.0 等效于使用 GL_POINT_SMOOTH 的 ES 1.0 圆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7237086/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com