java - 如何将浮点数组传递给 LWJGL 中的着色器
问题描述
我一直在关注 LWJGL 网站 ( http://wiki.lwjgl.org/wiki/GLSL_Tutorial:_Communicating_with_Shaders.html ) 上的教程,尝试将随机浮点数组发送到我的片段着色器,但着色器中的每个值都是 0 .我尝试复制粘贴“arrayOfInts”示例以尝试隔离问题,将所有内容更改为整数,但我仍然只得到零着色器端。根据文档(https://javadoc.lwjgl.org/org/lwjgl/opengl/GL20.html#glUniform1iv(int,int%5B%5D)),该功能glUniform1iv
存在并且可以满足我的需要,但是当我尝试它 Eclipse 告诉我它在 GL20 类中不存在,无论是在使用 anint[]
还是 an时IntBuffer
,对于glUniform1fv
. 统一变量的位置是 0,因此它被正确加载。生成的 java 数组中存储的值是正确的。
顶点着色器:
#version 400 core
in vec3 position;
out vec2 uvPosition;
void main(void){
gl_Position = vec4(position, 1.0);
uvPosition = (position.xy+vec2(1.0, 1.0))/2;
}
片段着色器
#version 400 core
in vec2 uvPosition;
out vec4 outColor;
uniform int random[50];
int randomIterator = 0;
float randf(){
return random[randomIterator++];
}
void main(void){
outColor = vec4(random[0]/10, 1.0, 1.0, 1.0);
}
我加载制服的Java代码:
final int RAND_AMOUNT = 50;
IntBuffer buffer = BufferUtils.createIntBuffer(RAND_AMOUNT);
int[] array = new int[RAND_AMOUNT];
for(int i = 0; i < RAND_AMOUNT; i++) {
buffer.put((int)(Math.random()*9.999f));
array[i] = (int)(Math.random()*9.999f);
}
buffer.rewind();
System.out.println(buffer.get(0));
GL20.glUniform1(glGetUniformLocation(programID, "random"), buffer); //In this line, using GL20.glUniform1iv tells me it doesn't exist. Same with
没有任何错误,并且显示为青色,这意味着红色分量为 0。任何有助于生成随机整数或直接发送随机浮点数的帮助都会有所帮助。随时问任何问题。
解决方案
glUniform
*在当前安装程序的默认统一块中设置统一的值。因此,该程序必须在glUseProgram
之前安装。
int random_loc = GL20.glGetUniformLocation(programID, "random")
GL20.glUseProgram(programID);
GL20.glUniform1(random_loc, buffer);
推荐阅读
- sql - Concat ORA-00909: 参数数量无效,TO_DATE 有问题
- laravel - 在服务器上修改 3d 模型
- excel - 总和取决于两个过滤器/切片器
- google-cloud-platform - 如何使用作曲家 DAG 从 GCP 存储桶中递归读取文件名
- java - 使用 Java 8 Comparator 对具有两个值的嵌套对象进行排序
- java - org.apache.http.NoHttpResponseException:服务器地址:80 未能响应 - JMeter
- azure - 检索 Azure Docker 主机日志
- java - 我用驱动
,但“junit test”不断导致错误 - sql-server - 在 SQL Server 中转换为数字和字符
- haskell - 无论如何要更改默认的keep-alive close in warp?