gpt4 book ai didi

shader - OpenGL ES 2.0 与 iPhone : GL_POINT_SMOOTH draws squares with ES 2. 0 但适用于 ES 1.0

转载 作者:行者123 更新时间:2023-12-02 06:35:00 28 4
gpt4 key购买 nike

我正在尝试使用顶点缓冲区对象来绘制圆,并在 iPhone 上的 OpenGL ES 2.0 中启用 GL_POINT_SMOOTH 来绘制点。

我使用以下 ES 1.0 渲染代码在 iPhone 4 上成功绘制圆圈:

glVertexPointer(2, GL_FLOAT, 0, circleVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_POINT_SMOOTH);
glPointSize(radius*2);
glDrawArrays(GL_POINTS, 0, 1);

我现在尝试使用设置 VBO 和 ES 2.0 渲染代码来实现相同的效果:

glEnable(GL_BLEND); 
glEnable(GL_POINT_SPRITE_OES);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glDrawElements(GL_POINTS, numPoints, GL_UNSIGNED_SHORT, BUFFER_OFFSET(0));

但是输出顶点非常明显是正方形,而不是圆形。

我尝试减少上面的“glEnable”和相关调用来模拟第一个工作版本,但输出没有发生明显的变化;形状仍然是方形的。我还尝试将“glDrawElements”调用替换为:

    glDrawArrays(GL_POINTS,0,numPoints);

..但还是没有改变。

顶点着色器中设置点大小,并且着色器成功编译并运行:

uniform mediump mat4 projMx;

attribute vec2 a_position;
attribute vec4 a_color;
attribute float a_radius;
varying vec4 v_color;
void main()
{
vec4 position = vec4(a_position.x,a_position.y,1.0,1.0);
gl_Position = projMx * position;
gl_PointSize = a_radius*2.0;
v_color = a_color;
}

有人知道为什么用 glDrawElements VBO 版本不绘制圆圈吗?

最佳答案

那是因为你启用了GL_POINT_SPRITE_OES,它用于用一个点来绘制矩形,这对于广告牌很有用(它比使用4个顶点绘制矩形更简单、更快)。

尝试删除 glEnable(GL_POINT_SPRITE_OES);它应该可以工作。

关于shader - OpenGL ES 2.0 与 iPhone : GL_POINT_SMOOTH draws squares with ES 2. 0 但适用于 ES 1.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7234379/

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