首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectXMath.h算子模糊度

DirectXMath.h算子模糊度
EN

Stack Overflow用户
提问于 2015-08-13 11:00:47
回答 3查看 1.4K关注 0票数 0

我最近编写了一个矩阵类来处理XMFloat4x4和XMVector转换。它在windows 8大都会应用程序上运行得很好,但是当我试图将它移植到Win32 Windows应用程序时,它开始出错了。

"error C2593:'operator *‘是不明确的c:\程序文件(x86)\windows C2593,其中有许多与相关的错误多个重载函数XMFunctions的实例。

当包括"DirectXMath.h"时出现问题

请告诉我出了什么事

MATRIX4X4.h

代码语言:javascript
复制
#pragma once

#include <btBulletCollisionCommon.h>
#include <cmath>
#include <DirectXMath.h>

using namespace DirectX;
#define _USE_MATH_DEFINES

class MATRIX4X4
{
private:
    XMFLOAT4X4 _m;
public:
    MATRIX4X4();
    MATRIX4X4(const XMFLOAT4X4 &data);
    MATRIX4X4(float* data);

    void InitializeIdentity();
    MATRIX4X4& InitTranslation(float x, float y, float z);
    MATRIX4X4& InitTranslation(const XMFLOAT3 &pos);
    MATRIX4X4& InitScaling(float x, float y, float z);
    MATRIX4X4& InitScaling(const XMFLOAT3 &scl);
    MATRIX4X4& InitRotation(float x, float y, float z);
    MATRIX4X4& InitRotation(const XMVECTOR &quaternion);
    MATRIX4X4& InitPerspective(float minimumFieldOfView, float aspectRatio, float nearPlane, float farPlane);
    MATRIX4X4& InitOrthographic(float left, float right, float bottom, float top, float nearPlane, float farPlane);
    MATRIX4X4& InitView(const XMFLOAT3 &eyePosition, const XMFLOAT3 &lookPosition, const XMFLOAT3 &up);

    MATRIX4X4& SetTranslation(float x, float y, float z);
    MATRIX4X4& SetTranslation(const XMFLOAT3 &pos);
    MATRIX4X4& Translate(float dx, float dy, float dz);
    MATRIX4X4& Translate(const XMFLOAT3 &dp);

    MATRIX4X4& SetScale(float x, float y, float z);
    MATRIX4X4& SetScale(const XMFLOAT3 &scl);
    MATRIX4X4& Scale(float dx, float dy, float dz);
    MATRIX4X4& Scale(const XMFLOAT3 &ds);

    MATRIX4X4& SetRotation(float x, float y, float z);
    MATRIX4X4& SetRotation(const XMFLOAT3 &rot);
    MATRIX4X4& SetRotation(const XMVECTOR &quaternion);
    MATRIX4X4& Rotate(float dx, float dy, float dz);
    MATRIX4X4& Rotate(const XMFLOAT3 &dr);
    MATRIX4X4& Rotate(const XMVECTOR &quaternion);

    MATRIX4X4& operator* (MATRIX4X4 mat);
    MATRIX4X4& operator*= (MATRIX4X4 mat);

    void LookAt(const XMFLOAT3& position, const XMFLOAT3& target, const XMFLOAT3& up);

    // for bulllet physics //
    MATRIX4X4& Translate(const btVector3 &dp);
    MATRIX4X4& SetTranslation(const btVector3 &pos);
    MATRIX4X4& Scale(const btVector3 &ds);
    MATRIX4X4& SetScale(const btVector3 &scl);
    MATRIX4X4& Rotate(const btQuaternion &quaternion);
    MATRIX4X4& SetRotation(const btQuaternion &quaternion);
    /////////////////////////

    const XMFLOAT4X4& GetData() const;

    const XMFLOAT3& GetTranslation() const;
    const XMFLOAT3& GetScale() const;
    const XMVECTOR& GetRotation() const;
};
EN

回答 3

Stack Overflow用户

发布于 2015-08-13 20:45:56

您的using namespace DirectX;文件中有.cpp吗?确保在头文件中或在执行using namespace DirectX;之前没有#include <DirectXMath.h>

您可能还想看看SimpleMath中的DirectX工具包

编辑:确保您没有试图在同一个应用程序中同时包含XNAMath.hDirectXMath.h。您应该只使用DirectXMath.h

票数 0
EN

Stack Overflow用户

发布于 2018-08-29 23:04:04

繁荣:

代码语言:javascript
复制
#define BT_NO_SIMD_OPERATOR_OVERLOADS

(从https://social.msdn.microsoft.com/Forums/sqlserver/en-US/5d85c350-f5cc-46c5-9924-0b07d1cd674e/directxmathh-operator-ambiguity?forum=windowssdk,我猜想你得到了你的答案?:)我将把它留在这里供参考。

xm-无本质黑客为我做了这个把戏。

我认为问题实际上是#include <btBulletCollisionCommon.h>

我刚刚在我自己的项目中加入了项目中的项目,并开始出现同样的错误。我有#using namespace DirectX

您没有显示消息的其余部分,但对我来说,完整的错误是:

1>c:\users\germain\documents\work\pp\editor\camera\camera.h(27):error C2593:'operator +‘是模棱两可的1> C2593注释:可以是'btSimdScalar运算符+(const btSimdScalar &,const btSimdScalar &)’1> c:\users\germain\documents\work\pp\physics\src\linearmath\btmatrix3x3.h(858):note:或'btMatrix3x3运算符+(const btMatrix3x3 &,( const btMatrix3x3 &)‘1> btMatrix3x3注意事项:或'btVector3运算符+(const btVector3 &,const btVector3 &)’1> btVector3注:或'__m128运算符+(const __m128,( const c:\users\germain\documents\work\pp\editor\camera\camera.h(27):__m128)‘1> c:\program (x86)\windows __m128注意事项:或'DirectX::XMVECTOR DirectX::operator +(DirectX::FXMVECTOR,DirectX:FXMVECTOR)’1> __m128注意事项:试图匹配参数列表'(const::XMVECTOR,const::XMVECTOR)‘

所以这似乎是有道理的。#define BT_NO_SIMD_OPERATOR_OVERLOADS,在项目中,是不污染您的名称空间的方式,

票数 0
EN

Stack Overflow用户

发布于 2015-08-14 15:18:08

所以我只需要在包含_XM_NO_INTRINSICS_之前定义DirectXMath.h

代码语言:javascript
复制
#define _XM_NO_INTRINSICS_ 1;

有关更多信息:https://msdn.microsoft.com/en-us/library/windows/desktop/ee415579(v=vs.85).aspx

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

https://stackoverflow.com/questions/31986374

复制
相关文章

相似问题

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