首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图将MatrixViewProjection传递给着色器时出错:“必须有类/struct/union”

试图将MatrixViewProjection传递给着色器时出错:“必须有类/struct/union”
EN

Stack Overflow用户
提问于 2014-09-19 04:42:52
回答 1查看 255关注 0票数 0

我在尝试学习opengl和着色器之类的东西时出错了.

守则:

代码语言:javascript
复制
#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行都有错误

错误:

代码语言:javascript
复制
error C2061: syntax error : identifier 'Camera'
error C2065: 'camera' : undeclared identifier
error C2228: left of '.GetViewProjection' must have class/struct/union

第三个错误是相关的(B行)

可能是什么原因?“必须有类/结构/联合”?

编辑Camera.h

代码语言:javascript
复制
#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 ..。

代码语言:javascript
复制
glm::mat4 Camera:: GetViewProjection()
{
    return projection * glm::lookAt(pos, pos + forward, up);
}

编辑过的

好的,现在只有一个错误:

代码语言:javascript
复制
error C2061: syntax error : identifier 'Camera'

我注意到getviewprojection()有“摄像机:”,所以我删除了它,并将内联函数变成了一个非内联函数。

在变换班..。

代码语言:javascript
复制
#pragma once

#include "OpenGL.h"
#include "glm\glm.hpp"
#include "glm\gtx\transform.hpp"
#include "Camera.h"

在摄像机班..。

代码语言:javascript
复制
#pragma once

#include "OpenGL.h"
#include "Input.h"
#include "Input_Keys.h"
#include "Transform.h"

我认为命令应该重要..。还是不想?

EN

回答 1

Stack Overflow用户

发布于 2014-09-19 04:54:30

您需要包含标题,它包含该文件中Camera类的定义。在顶部附近,你应该做这样的事情:

代码语言:javascript
复制
#include "Camera.h" // Or whatever the name of the header that contains the Camera definition is
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25926506

复制
相关文章

相似问题

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