无法将我的 mat4 转换矩阵解析为我的 opengl 着色器?

Posted

技术标签:

【中文标题】无法将我的 mat4 转换矩阵解析为我的 opengl 着色器?【英文标题】:trouble parsing my mat4 transformation matrix into my opengl shader? 【发布时间】:2015-06-06 22:06:05 【问题描述】:

我收到的错误消息是:

ERROR: 0:5: error<#12>> Unexpected qualifier
ERROR: 0:5: error<#12> Syntax error: "in_transformation" parse error
ERROR: error<#273> 2 compilation errors. No code generated

这是我的绘图函数,我将转换矩阵解析到着色器中。我不确定这应该在这里,这应该在我在顶点数组中解析的初始化函数中吗?矩阵?

    void Mesh3D::Draw()
    
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        // Draw elements of each mesh in the vector
        glm::mat4 matrix = matrixViewProjection*this->matrixModel;
        int loc = glGetUniformLocation(program, "in_transformation");
        glUniformMatrix4fv(loc, 1, GL_FALSE, glm::value_ptr(matrix));
        for (int i = 0; i<nVectorGeometry; i++)
        
            glBindVertexArray(vaos[i]);
            glDrawElements(col->vectorGeometry[i].primitive
            col->vectorGeometry[i].index_count,
            GL_UNSIGNED_SHORT, col->vectorGeometry[i].indices);
        
        glBindVertexArray(0);
        glutSwapBuffers();
    

这是我的顶点着色器,因为我将它存储在头文件中 注意这一切都没有我在转换矩阵中解析,所以问题与我如何存储着色器无关

static std::string  shaderVert = "#version 330\n"
"in vec3 in_coords;\n"
"in vec3 in_normals;\n"
"in vec4 in_colors; \n"//added by me
"in map4 in_transformation;\n"//added by me
"out vec3 vertex_normal;\n"
"out vec4 vertex_color;\n"
"void main(void) \n"
"vertex_normal = in_normals;\n"
"vertex_color = in_colors;\n"//added by me
"gl_Position =in_transformation* vec4(in_coords, 1.0);\n"
"\n";

谢谢,我不确定我是否正确设置了转换矩阵:/?

这是我的转换矩阵的格式:

static glm::mat4 matrix =
 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f ;

【问题讨论】:

【参考方案1】:

您的转换变量不是着色器中的“统一”变量。也是map4的类型,你确定你说的不是mat4吗?

您可能希望将其声明为

uniform mat4 transformation;

然后你可以得到位置并解析它。

另外,考虑从文件中读取着色器,这样您就不必在每一行的末尾显式地添加换行符。我知道它是这样工作的,但你编写着色器会更容易。

【讨论】:

感谢它现在的工作。我有时会犯最荒谬的错误!我喜欢尽可能多地投入应用程序。如果我按照我的方式,一切都会在一个 exe 文件中!

以上是关于无法将我的 mat4 转换矩阵解析为我的 opengl 着色器?的主要内容,如果未能解决你的问题,请参考以下文章

我尝试使用 Retrofit 将我的 JSON 解析为我的 Java

Laravel:表单中的 HTTPS::open()

我需要将我的数组样式的邻接矩阵转换为矢量样式(使其看起来更好)

我的共享主机的名称服务器如何将 http://servername.com/~username/ 解析为我的***域?

无法将我的 JSON 文件转换为 JS 对象

无法将我的 JSON 文件转换为 JS 对象