gpt4 book ai didi

java - 如何将 vec2&vec3 变量与 OpengL fragment 着色器绑定(bind)?

转载 作者:行者123 更新时间:2023-12-02 13:36:50 24 4
gpt4 key购买 nike

我正在开发一个 Android OpenGL ES 应用程序,这是我的 fragment 着色器 fragment :

 uniform sampler2D inputImageTexture;
varying highp vec2 textureCoordinate;

uniform lowp vec2 vignetteCenter;
uniform lowp vec3 vignetteColor;
uniform highp float vignetteStart;
uniform highp float vignetteEnd;

void main()
{
lowp vec4 sourceImageColor = texture2D(inputImageTexture, textureCoordinate);
lowp float d = distance(textureCoordinate, vec2(vignetteCenter.x, vignetteCenter.y));
lowp float percent = smoothstep(vignetteStart, vignetteEnd, d);
gl_FragColor = vec4(mix(sourceImageColor.rgb, vignetteColor, percent), sourceImageColor.a);
}

我的问题是我想用上面的GLSL的vignetteCenter和vignetteColor绑定(bind)一个变量,我不知道哪种Java类型对象对应于vec2和vec3? GLES20.glUniform2f 或 GLES20.glUniform2fv,我应该使用哪一个?

最佳答案

GLES20.glUniform2f 将允许您将 2 个 float 组成的一个 vector 分配给您的统一变量。

GLES20.glUniform2fv 将允许您将 2 个 float 的 N 个 vector 分配给您的统一变量。

因此,给定两个 float f1 和 f2,您可以使用

GLES20.glUniform2f(myVariablePosition,f1,f2);

float[] myVector = {f1,f2};
GLES20.glUniform2f(myVariablePosition,1,myVector);

其中 1 表示仅传递 1 个由 2 个浮点组成的 vector 。

如果你想传递一个包含 2 个 float 的 vector 数组,那么你可以这样做:

float[] myVector = {f1,f2,....,f(N*2)};
GLES20.glUniform2f(myVariablePosition,N,myVector);

关于java - 如何将 vec2&vec3 变量与 OpengL fragment 着色器绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42945219/

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