0
我工作的一些directX
,從教程代碼開始,也陸續將其轉化爲自己的階級制度和cpp文件等C++/DX11從.H到的.cpp移動導致錯誤
一切都已經直到現在一切順利,但我剛開始修改「Camera.h」和「Camera.cpp」。我有類函數在頭文件中,當我將它放在它的類文件中時,會出現一個錯誤。我有頭阻塞等,但我不能看到缺陷。
camera.h編輯
#ifndef CAMERA_H_
#define CAMERA_H_
#include "Player.h"
#include "RandomVariables.h"
class Camera {
public:
void UpdateCamera();
float camPitch;
float camYaw;
float Zoom_Amount; //zoom amount from Model_1.Player
float charCamDist; //distance from Model_1.Player
XMVECTOR camPosition;
XMVECTOR camTarget;
XMVECTOR camUp;
XMVECTOR camRight;
XMVECTOR camForward;
XMMATRIX camRotationMatrix;
XMMATRIX Rotationx;
XMMATRIX Rotationy;
XMMATRIX Rotationz;
XMMATRIX camView;
XMMATRIX camProjection;
};
Camera MainCamera;
#endif
後編輯
http://i.stack.imgur.com/Evxof.png
camera.h之前,我刪除無效照相機:UpdateCamera(),並把它放在攝像頭。 CPP和它出現未定義的錯誤等等,如果無效Camera :: UpdateCamera()在頭文件中,所以我感到困惑:S
錯誤列表
http://i.stack.imgur.com/7G21V.png
Camera.cpp移動updatecamera
#include "Camera.h"
void Camera::UpdateCamera(){
MainCamera.charCamDist = 135.0f;
MainCamera.camTarget = mainPlayer.playerPos;
MainCamera.camTarget = XMVectorSetY(MainCamera.camTarget, XMVectorGetY(MainCamera.camTarget)+5.0f);
MainCamera.camTarget = XMVectorSetX(MainCamera.camTarget, XMVectorGetX(MainCamera.camTarget) -MainCamera.Zoom_Amount);
MainCamera.camRotationMatrix = XMMatrixRotationRollPitchYaw(-MainCamera.camPitch, MainCamera.camYaw, 0);
MainCamera.camPosition = XMVector3TransformNormal(DefaultForward, MainCamera.camRotationMatrix);
MainCamera.camPosition = XMVector3Normalize(MainCamera.camPosition);
MainCamera.camPosition = (MainCamera.camPosition * MainCamera.charCamDist) + MainCamera.camTarget;
MainCamera.camForward = XMVector3Normalize(MainCamera.camTarget - MainCamera.camPosition); // Get forward vector based on target
MainCamera.camForward = XMVectorSetY(MainCamera.camForward, 0.0f); // set forwards y component to 0 so it lays only on
// the xz plane
MainCamera.camForward = XMVector3Normalize(MainCamera.camForward);
MainCamera.camRight = XMVectorSet(-XMVectorGetZ(MainCamera.camForward), 0.0f, XMVectorGetX(MainCamera.camForward), 0.0f);
MainCamera.camUp =XMVector3Normalize(XMVector3Cross(XMVector3Normalize(MainCamera.camPosition - MainCamera.camTarget), MainCamera.camRight));
MainCamera.camView = XMMatrixLookAtLH(MainCamera.camPosition, MainCamera.camTarget, MainCamera.camUp);
};
RandomVariables.cpp
//Global Declarations - Interfaces//
#ifndef RAND_H
#define RAND_H
#include "Models.h"
#include "Player.h"
#include "Camera.h"
///start
My_Player mainPlayer;
XMMATRIX WVP;
XMVECTOR DefaultForward = XMVectorSet(0.0f,0.0f,1.0f, 0.0f);
XMVECTOR DefaultRight = XMVectorSet(1.0f,0.0f,0.0f, 0.0f);
float tilt_X = 0.0f;
int NumSphereVertices;
int NumSphereFaces;
XMMATRIX sphereWorld;
XMMATRIX Scale;
XMMATRIX Translation;
///end
IDXGISwapChain* SwapChain;
ID3D11Device* d3d11Device;
ID3D11DeviceContext* d3d11DevCon;
ID3D11RenderTargetView* renderTargetView;
ID3D11DepthStencilView* depthStencilView;
ID3D11Texture2D* depthStencilBuffer;
ID3D11VertexShader* VS;
ID3D11PixelShader* PS;
ID3D11PixelShader* D2D_PS;
ID3D10Blob* D2D_PS_Buffer;
ID3D10Blob* VS_Buffer;
ID3D10Blob* PS_Buffer;
ID3D11InputLayout* vertLayout;
ID3D11Buffer* cbPerObjectBuffer;
ID3D11BlendState* d2dTransparency;
ID3D11RasterizerState* CCWcullMode;
ID3D11RasterizerState* CWcullMode;
ID3D11SamplerState* CubesTexSamplerState;
ID3D11Buffer* cbPerFrameBuffer;
ID3D10Device1 *d3d101Device;
IDXGIKeyedMutex *keyedMutex11;
IDXGIKeyedMutex *keyedMutex10;
ID2D1RenderTarget *D2DRenderTarget;
ID2D1SolidColorBrush *Brush;
ID3D11Texture2D *BackBuffer11;
ID3D11Texture2D *sharedTex11;
ID3D11Buffer *d2dVertBuffer;
ID3D11Buffer *d2dIndexBuffer;
ID3D11ShaderResourceView *d2dTexture;
IDWriteFactory *DWriteFactory;
IDWriteTextFormat *TextFormat;
IDirectInputDevice8* DIKeyboard;
IDirectInputDevice8* DIMouse;
ID3D11Buffer* sphereIndexBuffer;
ID3D11Buffer* sphereVertBuffer;
ID3D11VertexShader* SKYMAP_VS;
ID3D11PixelShader* SKYMAP_PS;
ID3D10Blob* SKYMAP_VS_Buffer;
ID3D10Blob* SKYMAP_PS_Buffer;
ID3D11ShaderResourceView* smrv;
ID3D11DepthStencilState* DSLessEqual;
ID3D11RasterizerState* RSCullNone;
ID3D11BlendState* Transparency;
#endif
後10
'攝像頭MainCamera;'把它放在標題中會讓你容易受到「多重定義」鏈接錯誤的影響。如果在多個源文件中包含'camera.h',則會聲明多個MainCamera,這會導致這樣的錯誤。事實上,即使你解決了編譯問題,這就是*將會發生的事情。 – PaulMcKenzie 2015-03-31 15:26:11
鑑於它有#ifndef它不應該能夠重新定義MainCamera?它包含在多個文件中,然後移動cameraupdate功能 – Invictus 2015-03-31 15:32:22
不會。這不會發生。你有2個獨立的模塊,RandomVariables.cpp和Camera.cpp。他們將分開編譯,不是?所以當鏈接器現在看到'MainCamera'變量出現在RandomVariables和Camera對象代碼中時,鏈接器將發出錯誤。要麼停止使用全局變量,要麼學習如何在多模塊程序中使用它們。 http://stackoverflow.com/questions/9702053/how-to-declare-a-global-variable-in-c – PaulMcKenzie 2015-03-31 15:35:52