首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Glm函数问题

Glm函数问题
EN

Stack Overflow用户
提问于 2021-09-17 12:57:24
回答 2查看 363关注 0票数 1

为什么这段代码会编译

代码语言:javascript
复制
    [[nodiscard]] glm::mat4 rotationX(double theta)
    {
        return glm::rotate(glm::mat4(1.0), static_cast<float>(theta), glm::vec3(1.0, 0.0, 0.0));
    }

而这个不是

代码语言:javascript
复制
    [[nodiscard]] glm::mat4 rotationX(double theta)
    {
        return glm::rotate(glm::mat4(1.0), theta, glm::vec3(1.0, 0.0, 0.0));
    }

它导致了误差C2672 no matching overloaded function found和误差C2782: Template parameter T is ambigous。θ应该是什么类型的?

也是这个代码

代码语言:javascript
复制
    [[nodiscard]] glm::mat4 shearing(double xy, double xz, double yx, double yz, double zx, double zy)
    {
        auto sh = glm::mat4(1.0);

        sh[1][0] = xy;
        sh[2][0] = xz;
        sh[2][1] = yz;

        sh[0][1] = yx;
        sh[0][2] = zx;
        sh[1][2] = zy;

        return sh;
    }

产生以下警告:

warning C4244: 'argument' : conversion from 'double' to 'T', possible loss of data

我不明白这个错误到底是什么,因为其他的一切似乎都正常。

PS,我包括

代码语言:javascript
复制
#include <glm/fwd.hpp> 

在.hpp和

代码语言:javascript
复制
#include <glm/glm.hpp>  
#include <glm/gtc/matrix_transform.hpp>

在.cpp中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-17 13:02:14

当将glm::rotatevec3mat4一起使用时,theta的类型必须是浮动的,因为mat4vec3的元素类型是float

mat<4,4,f32,defaultp> mat4;

相应的双精度数据类型是damt4dvec3

mat<4,4,f64,defaultp> dmat4;vec<3,f64,defaultp> dvec3;

这些类型的名称与相应的GLSL数据类型(数据类型(GLSL) )相同。在glsl中,矩阵和向量数据类型可以从任何基本数据类型构造。

票数 2
EN

Stack Overflow用户

发布于 2021-09-17 12:58:25

代码语言:javascript
复制
[[nodiscard]] glm::mat4 shearing(double xy, double xz, double yx, double yz, double zx, double zy)
{
    auto sh = glm::mat4(1.0);

    sh[1][0] = xy;
    sh[2][0] = xz;
    sh[2][1] = yz;

    sh[0][1] = yx;
    sh[0][2] = zx;
    sh[1][2] = zy;

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

https://stackoverflow.com/questions/69223831

复制
相关文章

相似问题

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