gpt4 book ai didi

opengl-es - OpenGL ES 2.0 中的纹理点?

转载 作者:行者123 更新时间:2023-12-02 22:08:27 28 4
gpt4 key购买 nike

我正在尝试在 OpenGL ES 2.0 中为粒子系统实现纹理点(例如点 Sprite )。我遇到的问题是所有点都渲染为实心黑色方 block ,而不是正确映射纹理。

我已经验证 gl_PointCoord 实际上返回从 0.0 到 1.0 的 x/y 值,这将映射到整个纹理。不过,texture2D 调用似乎总是返回黑色。

我的顶点着色器:

attribute vec4 aPosition;
attribute float aAlpha;
attribute float aSize;
varying float vAlpha;
uniform mat4 uMVPMatrix;

void main() {
gl_PointSize = aSize;
vAlpha = aAlpha;
gl_Position = uMVPMatrix * aPosition;
}

还有我的片段着色器:

precision mediump float;
uniform sampler2D tex;
varying float vAlpha;

void main () {
vec4 texColor = texture2D(tex, gl_PointCoord);
gl_FragColor = vec4(texColor.rgb, texColor.a * vAlpha);
}

有问题的纹理是 16x16。我能够成功地将这个纹理映射到其他几何体,但由于某种原因不能映射到点。

我的平台是 Motorola Droid,运行 Android 2.2。

最佳答案

您将纹理选择为事件状态并绑定(bind)它 - 像平常一样。但是您必须将纹理单元作为统一传递给着色器程序。因此,您可以在片段着色器中使用 gl_PointCoord 作为纹理坐标。

glUniform1i(MY_TEXTURE_UNIFORM_LOCATION, 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, yourTextureId);
glEnable(GL_TEXTURE_2D);
glDrawArrays(GL_POINTS, 0, pointCount);
glDisable(GL_TEXTURE_2D);

你的片段着色器应该如下所示:

uniform sampler2D texture;
void main ( )
{
gl_FragColor = texture2D(texture, gl_PointCoord);
}

关于opengl-es - OpenGL ES 2.0 中的纹理点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3497068/

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