How to create billboard matrix in glm

前端 未结 2 553
北荒
北荒 2021-02-10 03:35

How to create a billboard translation matrix from a point in space using glm?

相关标签:
2条回答
  • 2021-02-10 03:59

    Just set the upper left 3×3 submatrix of the transformation to identity.


    Update: Fixed function OpenGL variant:

    void makebillboard_mat4x4(double *BM, double const * const MV)
    {
        for(size_t i = 0; i < 3; i++) {
        
            for(size_t j = 0; j < 3; j++) {
                BM[4*i + j] = i==j ? 1 : 0;
            }
            BM[4*i + 3] = MV[4*i + 3];
        }
    
        for(size_t i = 0; i < 4; i++) {
            BM[12 + i] = MV[12 + i];
        }
    }
    
    void mygltoolMakeMVBillboard(void)
    {
        GLenum active_matrix;
        double MV[16];
    
        glGetIntegerv(GL_MATRIX_MODE, &active_matrix);
    
        glMatrixMode(GL_MODELVIEW);
        glGetDoublev(GL_MODELVIEW_MATRIX, MV);
        makebillboard_mat4x4(MV, MV);
        glLoadMatrixd(MV);
        glMatrixMode(active_matrix);
    }
    
    0 讨论(0)
  • 2021-02-10 04:11
    mat4 billboard(vec3 position, vec3 cameraPos, vec3 cameraUp) {
        vec3 look = normalize(cameraPos - position);
        vec3 right = cross(cameraUp, look);
        vec3 up2 = cross(look, right);
        mat4 transform;
        transform[0] = vec4(right, 0);
        transform[1] = vec4(up2, 0);
        transform[2] = vec4(look, 0);
        // Uncomment this line to translate the position as well
        // (without it, it's just a rotation)
        //transform[3] = vec4(position, 0);
        return transform;
    }
    
    0 讨论(0)
提交回复
热议问题