Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 在GLSL中设置矩阵不起作用_Opengl_Glsl - Fatal编程技术网

Opengl 在GLSL中设置矩阵不起作用

Opengl 在GLSL中设置矩阵不起作用,opengl,glsl,Opengl,Glsl,我有以下着色器代码(GLSL): #版本420 in vec4 vertex; uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; void main() { gl_Position = modelViewMatrix * projectionMatrix * vertex; } 如果我没有设置modelViewMatrix和projectionMatrix,那么它运行时不会出错。如果我这样做,当我尝试绘制时

我有以下着色器代码(GLSL):


#版本420

in vec4 vertex;

uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;

void main()
{
    gl_Position = modelViewMatrix * projectionMatrix * vertex;
}

如果我没有设置modelViewMatrix和projectionMatrix,那么它运行时不会出错。如果我这样做,当我尝试绘制时,OpenGL会抛出一个无效的操作异常

我通过以下代码设置矩阵:

glUniformMatrix4fv(位置,1,假,sendArray)
我已验证“location”和“sendArray”包含正确的数据。这是怎么回事

编辑:问题似乎出在glUniformMatrix4fv调用中,但我不知道它出了什么问题

设置
位置的代码如下:


闪烁定位

GLint location = glGetUniformLocation(this->programID, uniform.c_str());

if (location == -1)
{
    throw ShaderVariableNotFoundException(uniform, this->programID);
}

您正在传递计数的
16
,这是错误的

发件人:

count
参数表示要传递的矩阵数。如果修改单个矩阵的值,则应使用
计数
为1,大于1的
计数
可用于修改矩阵数组

根据,您将得到预期的错误

如果
计数
大于1且指示的统一变量不是数组变量,则生成
GL\u无效\u操作

文档的注释部分再次告诉您

如果
count
大于1且指示的统一变量不是数组,则会生成
GL\u INVALID\u操作
错误,并且指定的统一变量将保持不变


我修好了,但我不愿意告诉你所有的解决方案,因为这是多么尴尬

我忘了绑定着色器程序


非常抱歉浪费了您所有的时间。

我无法设置GLSL中未使用的值,因为编译器会优化变量。如果我试图设置一个未在着色器中使用的值,OpenGL会告诉我它找不到该变量。显示设置
位置的代码。
。我检查以确保位置有效。它不是-1或任何东西。显示整个代码。你会吗?我现在在原来的帖子上展示了设置位置的代码,如果这就是你所说的“全部”代码的意思的话。我更改了它,但不幸的是,这并没有消除错误。我还感到困惑,因为我认为这是元素的数量:|但由于您的帮助,我现在认识到问题出在glUniformMatrix4fv函数中!哈哈哈哦不。。。原来这也是我的问题!谢谢你回来并添加这个。