C ++,OPENGL和translate()函数为其参数抛出错误

时间:2014-09-01 09:48:00

标签: c++ opengl

我主要关注glm库。 我想使用glm :: translate翻译矢量+矩阵,但它会抛出错误:

我有以下代码:

#define GLEW_STATIC
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <GL\glew.h>
#include <GL\GLU.h>
#include <GL\glut.h>
#include <glm.hpp>
#include <GL\gl.h>
#include <gtx\transform2.hpp>
#include <GLFW\glfw3.h>



using namespace std;
using namespace glm;

int main()
{
    if (!glfwInit())
    {
        fprintf(stderr, "Failed to initialize GLFW\n");
        return -1;
    }



    // defining the matrices
    glm::mat4 myMatrix = glm::translate(10f,0.0f,0.0f);
    glm::vec4 myVector(10.0f, 10.0f, 10.0f, 0.0f);
    glm::vec4 transformedVector = myMatrix * myVectors; // multiplication  

    return 0;
}

当我执行代码时,出现以下错误:

error C2059: syntax error : 'bad suffix on number'
error C2146: syntax error : missing ')' before identifier 'f'
error C2784: 'glm::detail::tmat4x4<T,P> glm::translate(const glm::detail::
tvec3<T,P> &)' : could not deduce template argument for 'const glm::detail::tvec3<T,P> &' from 'int'

还有一堆错误。

使用@ lazyCoder的解决方案,我消除了许多错误。虽然,我得到一个关于glm :: translate()的错误,这是关于参数:

 error C2780: 'glm::detail::tmat4x4<T,P> glm::translate(const glm::detail::tvec3<T,P> &)
' : expects 1 arguments - 3 provided
    1>          c:\opengl\glm-0.9.5.4\glm\glm\gtx\transform.hpp(61) : see declaration of
 'glm::translate'

    error C2780: 'glm::detail::tmat4x4<T,P> glm::translate(const glm::detail::tmat4x4<T,P>   
 &,const glm::detail::tvec3<T,P> &)' : expects 2 arguments - 3 provided    
    1>          c:\opengl\glm-0.9.5.4\glm\glm\gtc\matrix_transform.hpp(86) : see declaration of 'glm::translate'

2 个答案:

答案 0 :(得分:4)

translate调用的第一个参数替换为10.f,编译器会抱怨该数字的后缀不正确,或引用g ++错误消息invalid suffix "f" on integer constant

跟进连续错误我现在没有glm但似乎translate需要vec3作为输入而不是3个参数所以试试

translate(glm::vec3(10.f, 0.f, 0.f))

答案 1 :(得分:0)

这可能是最近的变化(我相信使用glm 9.61),我不知道它是否与此讨论相关,但glm :: translate()似乎接受参数glm :: mat4x4和glm :: vec3分别。

因此,当我遇到类似的错误时,我改变了我的表达式

glm::translate(10.f,0.f,0.f) 

glm::translate(glm::mat4x4(),glm::vec3(10.f,0.f,0.f)).