2013-06-21 145 views
0

我正在使用glm::lookAt来获得一个矩阵来转换世界。这工作正常,我可以生成矩阵,将其送入着色器,并且它可以工作。我现在需要做的是通过lookAt矩阵转换任意向量(即100,100,100,1)。出于某种原因,我得到的垃圾值glm lookAt和产生奇数行为的矩阵变换

glm::mat4 model = glm::lookAt(glm::vec3(current_pos.x, 
             current_pos.y, 
             current_pos.z), 
           glm::vec3(current_pos.x + dir.x, 
             current_pos.y + dir.y, 
             current_pos.z + dir.z), 
           glm::vec3(up.x,up.y,up.z)); 
GLfloat fmodel[16] = 
{ 
    model[0][0], 
    model[0][1], 
    model[0][2], 
    model[0][3], 

    model[1][0], 
    model[1][1], 
    model[1][2], 
    model[1][3], 

    model[2][0], 
    model[2][1], 
    model[2][2], 
    model[2][3], 

    model[3][0], 
    model[3][1], 
    model[3][2], 
    model[3][3] 
}; 

model的值的打印输出:0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3 我计算使用model * vec4(x, y, z, 1)

矩阵被复制的点,所以我可以把它作为一个统一的。使用原始矩阵和阵列构造矩阵都会得到相同的结果。

编辑

打印代码如下:

for (unsigned i = 0; i < 16; ++i) 
    printf("%d,", fmodel[i]); 

这就产生了3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0输出不管是什么我的载体

+0

什么是你的载体,具体是什么,你会得到什么结果? – nplatis

+0

为什么复制矩阵? 'model'已经是'float [16]'数组, – Grimmy

+0

矢量特别是100,100,100,1。不同的值不会改变结果。结果的值随程序的每次调用而改变,如未初始化的变量。复制完成后,我可以将矩阵作为统一数据传递,这要求它是一个浮点数组 – Outurnate

回答

0

奇怪的是,使用glm::value_ptr()重写代码大片后,这现在正在工作