【问题标题】:How to pass linmath.h matrices to glsl shader?如何将 linmath.h 矩阵传递给 glsl 着色器?
【发布时间】:2014-05-18 17:01:11
【问题描述】:

我正在学习 @987654321@ 库,但在将主程序中由它制作的矩阵传递给我的垂直着色器时遇到了问题:

#include "linmath.h"
…
GLint mat_uniform_handle = glGetUniformLocation(shade_program_handle, "matrix");
…
mat4x4 M;
mat4x4_identity(M);
glUniformMatrix4fv(mat_uniform_handle, 1, GL_FALSE, M);

但这当然会给我一个类型错误,因为linmath 矩阵的类型为float (*)[4],而glUniformMatrix4fv 的类型为const GLfloat *

我尝试编写自己的转换器,将矩阵的列连接到单个数组中,然后返回指向第一个元素的指针,但这没有用。

我是否缺少 linmath.h 的某些功能来为我进行这种转换?如果没有,我该如何正确地将linmath.h 矩阵转换为opengl 矩阵?

【问题讨论】:

    标签: c opengl matrix types glsl


    【解决方案1】:

    很遗憾,我在这里问之前没有尝试过,但这是解决方案,只是一个直接的演员。:

    glUniformMatrix4fv(mat_uniform_handle, 1, GL_FALSE, (GLfloat *)M);
    

    希望这对某人有所帮助。

    【讨论】:

    • 预期的方法是M[0]*M,写起来也有点短——但你的也很好。
    • 我也遇到了同样的问题,并选择了您的投射解决方案。我唯一担心的是这是多么安全:二维数组是否保证其子数组是连续的? IE。 M[1] 在内存中直接跟在 M[2] 后面吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多