首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过零参数构造函数生成的glm::mat4应该包含什么值?

通过零参数构造函数生成的glm::mat4应该包含什么值?
EN

Stack Overflow用户
提问于 2018-09-12 07:04:13
回答 1查看 1.7K关注 0票数 4

通过零参数构造函数生成的glm::mat4应该包含什么值?在64位Windows10上,使用通过vcpkg安装的64位GLmv0.9.9.0,glm::mat4()的结果是一个充满零的4x4矩阵。这在默认GLM的64位Ubuntu 18.04 LTS上是相同的。

另一方面,我可以在GLM的type_mat4x4.inl的顶部附近看到,存在一个定义,它将内容设置为单位矩阵。(我在上面描述的两个构建中有条件地排除了这一点。)不过,我的同事告诉我,在他的系统上调用glm::mat4()确实会生成一个标识矩阵。

这些差异是否反映了GLM最近的变化?也就是说,如果我们都使用最新版本的GLM,这些差异会消失吗?或者,GLM是故意在两个不同的系统上产生两个不同的结果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-12 07:47:08

来自GLM site

GLSL提供了设计和实现的类和函数,其命名约定和功能与

相同

GLSL spec

如果矩阵构造函数只有一个标量参数,它用于初始化矩阵对角线上的所有分量,其余分量初始化为0.0。

因此,glm::mat4()是全零矩阵,glm::mat4(1)是单位矩阵。

在GLM0.9.9之前的版本中,您可以在type_mat4x4.inl中找到

代码语言:javascript
运行
复制
#   if !GLM_HAS_DEFAULTED_FUNCTIONS || !defined(GLM_FORCE_NO_CTOR_INIT)
            template <typename T, precision P>
            GLM_FUNC_QUALIFIER tmat4x4<T, P>::tmat4x4()
            {
#           ifndef GLM_FORCE_NO_CTOR_INIT 
                this->value[0] = col_type(1, 0, 0, 0);
                this->value[1] = col_type(0, 1, 0, 0);
                this->value[2] = col_type(0, 0, 1, 0);
                this->value[3] = col_type(0, 0, 0, 1);
#           endif
            }
#   endif

this has changed in 0.9.9

代码语言:javascript
运行
复制
#   if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE
        template<typename T, qualifier Q>
        GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat()
#           if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST
                : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}
#           endif
        {
#           if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION
                this->value[0] = col_type(1, 0, 0, 0);
                this->value[1] = col_type(0, 1, 0, 0);
                this->value[2] = col_type(0, 0, 1, 0);
                this->value[3] = col_type(0, 0, 0, 1);
#           endif
        }
# endif

换句话说: GLM允许并一直允许通过玩一些#define来更改默认的GLSL初始化。如果不允许,glm::mat4()将始终为全零。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52285271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档