【问题标题】:C++ glm::mix errorC++ glm::mix 错误
【发布时间】:2014-10-22 12:48:11
【问题描述】:

我有这行代码和以下库

  • gl\glew.h
  • gl\GL.h
  • gl\glu.h
  • gl\wglew.h
  • glm/glm.hpp
  • glm/gtc/matrix_transform.hpp
  • glm/gtc/matrix_transform.hpp
  • glm/gtc/type_ptr.hpp
  • glm/gtx/transform.hpp
  • glm/gtc/quaternion.hpp
  • glm/gtx/quaternion.hpp
  • glm/gtx/compatibility.hpp

方向属性是glm::mat4fInterpolate 是浮点数。

finalJoint.Orientation = glm::mix(joint0.Orientation, joint1.Orientation, fInterpolate);

导致此错误

错误 3 错误 LNK2019:无法解析的外部符号“struct glm::detail::tmat4x4 __cdecl glm::mix,float>(struct glm::detail::tmat4x4 const &,struct glm::detail::tmat4x4 const &,float const &)" (??$mix@U?$tmat4x4@M@detail@glm@@M@glm@@YA?AU?$tmat4x4@M@detail@0@ABU120@0ABM@Z) 在函数“public: void __thiscall”中引用 saragan::cSaaganMesh::InterpolateMesh(struct keyFrame,struct 关键帧,浮动)“ (?InterpolateMesh@cSaraganMesh@saragan@@QAEXUkeyFrame@@0M@Z) D:\git\TestBed\TestBed\ObjLoader.lib(cSaraganMesh.obj) TestBed

我试过glm:quat,但我得到了同样的错误;我让它在另一个项目中工作,但找不到不同之处,相同的库和预处理器以相同的顺序?

【问题讨论】:

  • @BenjaminBannier 不应该有任何链接,它只是一个标头库
  • @Saagan 我找不到 mat mix 的定义,但你能发布你在尝试混合 quats 时遇到的错误吗?因为也许你需要调整混合浮点类型(half、float 或 double 可能需要匹配 hquat、quat 或 dquat 类型),尽管文档说你不应该这样做
  • 嗯,关于 mat4 时,quat 的错误消失了...将在主要评论中发布主要修复/解决方法以征求意见

标签: c++ glm-math


【解决方案1】:

可能是您的包含文件不在同一个目录中?

通常出现未解决的外部符号错误,您在标头中将变量声明为:

extern int x;

然后在 cpp 文件中定义它。

【讨论】:

    【解决方案2】:

    有趣的是,当再次使用 quats 时,我的问题消失了……我认为使用 mat4 和 mix 时有些有趣

    glm::quat joint0Orientation = glm::toQuat(joint0.Orientation);
    glm::quat joint1Orientation = glm::toQuat(joint1.Orientation);
    
    glm::quat Final = glm::mix(joint0Orientation, joint1Orientation, fInterpolate);
    finalJoint.Orientation = glm::toMat4(Final);
    

    以上似乎解决了我的问题,但效率低下,任何人都可以看到导致最初问题的原因吗?或者只是为了清楚起见而怀疑是什么问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 2020-03-31
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多