我在尝试学习opengl和着色器之类的东西时出错了.
守则:
#pragma once
#include "OpenGL.h"
#include "glm\glm.hpp"
#include "glm\gtx\transform.hpp"
#include "Camera.h"
class Transform
{
private:
glm::vec3 position;
glm::vec3 rotation;
glm::vec3 scale;
public:
Transform(void);
~Transform(void);
inline glm::vec3* GetPos() { return &position; }
inline glm::vec3* GetRot() { return &rotation; }
inline glm::vec3* GetScale() { return &scale; }
inline void SetPos(glm::vec3& pos) { this->position = pos; }
inline void SetRot(glm::vec3& rot) { this->rotation = rot; }
inline void SetScale(glm::vec3& scale) { this->scale = scale; }
void Update();
/*inline glm::mat4 GetModelMatrix() const
{
glm::mat4 posMat = glm::translate(position);
glm::mat4 scaleMat = glm::scale(scale);
glm::mat4 rotX = glm::rotate(rotation.x, glm::vec3(1.0, 0.0, 0.0));
glm::mat4 rotY = glm::rotate(rotation.y, glm::vec3(0.0, 1.0, 0.0));
glm::mat4 rotZ = glm::rotate(rotation.z, glm::vec3(0.0, 0.0, 1.0));
glm::mat4 rotMat = rotX * rotY * rotZ;
return posMat * rotMat * scaleMat; //Model Matrix
}
*/
//glm::mat4 GetMVP();
inline glm::mat4 GetMVP(Camera& camera) //LINE A
{
glm::mat4 posMat = glm::translate(position);
glm::mat4 scaleMat = glm::scale(scale);
glm::mat4 rotX = glm::rotate(rotation.x, glm::vec3(1.0, 0.0, 0.0));
glm::mat4 rotY = glm::rotate(rotation.y, glm::vec3(0.0, 1.0, 0.0));
glm::mat4 rotZ = glm::rotate(rotation.z, glm::vec3(0.0, 0.0, 1.0));
glm::mat4 rotMat = rotX * rotY * rotZ;
glm::mat4 ModelMatrix = posMat * rotMat * scaleMat;
glm::mat4 MVP = camera.GetViewProjection()* ModelMatrix; //LINE B
return MVP;
}
};此代码是类转换函数的一部分。
我在A行和B行都有错误
错误:
error C2061: syntax error : identifier 'Camera'
error C2065: 'camera' : undeclared identifier
error C2228: left of '.GetViewProjection' must have class/struct/union第三个错误是相关的(B行)
可能是什么原因?“必须有类/结构/联合”?
编辑Camera.h
#include "OpenGL.h"
#include "Input.h"
#include "Input_Keys.h"
#include "Transform.h"
class Camera
{
glm::mat4 projection;
glm::vec3 pos;
glm::vec3 forward;
glm::vec3 up;
//para rot vertical
glm::vec3 right;
float FOV;
float moveSpeed;
bool freeze;
float rot_horizontal;
float rot_vertical;
Input* input_handler;
Window* window_handler;
public:
Camera(bool _freeze ,float _moveSpeed , const glm::vec3& pos, float fov, float aspect, float zNear, float zFar);
~Camera(void);
void SetInputHandler(Input* _input);
void SetFreeze(bool freeze);
void Move(); //WASD
void Look(); //up down left right
void ShowData();
glm::mat4 Camera:: GetViewProjection();
};还有GetViewProjection ..。
glm::mat4 Camera:: GetViewProjection()
{
return projection * glm::lookAt(pos, pos + forward, up);
}编辑过的
好的,现在只有一个错误:
error C2061: syntax error : identifier 'Camera'我注意到getviewprojection()有“摄像机:”,所以我删除了它,并将内联函数变成了一个非内联函数。
在变换班..。
#pragma once
#include "OpenGL.h"
#include "glm\glm.hpp"
#include "glm\gtx\transform.hpp"
#include "Camera.h"在摄像机班..。
#pragma once
#include "OpenGL.h"
#include "Input.h"
#include "Input_Keys.h"
#include "Transform.h"我认为命令应该重要..。还是不想?
发布于 2014-09-19 04:54:30
您需要包含标题,它包含该文件中Camera类的定义。在顶部附近,你应该做这样的事情:
#include "Camera.h" // Or whatever the name of the header that contains the Camera definition ishttps://stackoverflow.com/questions/25926506
复制相似问题