MATLAB中的深度缓冲

MATLAB中的深度缓冲,matlab,depth-buffer,Matlab,Depth Buffer,我正在尝试从MATLAB中的深度缓冲区重建世界坐标,想知道是否有人可以帮助我找到一种方法,从MATLAB中的渲染图像中获取深度缓冲区值,因为没有内置函数可以实现这一点 最好的方法似乎是通过MEX接口调用openGL函数。多亏了他,他为此编写了一个跨平台的MEX文件 #include "mex.h" #define GL_VIEWPORT 0x0BA2 #define GL_DEPTH_COMPONENT 0x190

我正在尝试从MATLAB中的深度缓冲区重建世界坐标,想知道是否有人可以帮助我找到一种方法,从MATLAB中的渲染图像中获取深度缓冲区值,因为没有内置函数可以实现这一点

最好的方法似乎是通过MEX接口调用openGL函数。多亏了他,他为此编写了一个跨平台的MEX文件

#include "mex.h"   

#define GL_VIEWPORT                       0x0BA2
#define GL_DEPTH_COMPONENT                0x1902
#define GL_FLOAT                          0x1406

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    int viewport[4], i, x, y;
    int colLen;
    float *data;
    double *matrix;

    glGetIntegerv(GL_VIEWPORT, viewport);
    data = (float*)malloc(viewport[2] * viewport[3] * sizeof(float));
    glReadPixels(0, 0, viewport[2], viewport[3], GL_DEPTH_COMPONENT, GL_FLOAT, data);

    plhs[0] = mxCreateNumericMatrix(viewport[3], viewport[2], mxDOUBLE_CLASS, mxREAL);
    matrix = mxGetPr(plhs[0]);
    colLen = mxGetM(plhs[0]);

    for(x = 0; x < viewport[2]; ++ x) {
        for(y = 0; y < viewport[3]; ++ y)
            matrix[x * colLen + y] = data[x + (viewport[3] - 1 - y) * viewport[2]];
    }

    free(data);
    return;
 }

我希望这有帮助。

我想你可能正在找这个?它使用openGL通过MEX调用获取深度缓冲区。。。谢谢你的回复。似乎存在错误,因为MATLAB无法识别glGetIntegerv和glReadPixels。我应该如何定义它们?如何调用函数?你能附上密码吗?请仔细检查您是在MEX文件中从C/C++调用它们,还是试图在MATLAB中调用它们(它们在MATLAB代码中无法直接识别),谢谢您的回答。我给他们打电话,正如你发给我的链接上所说的那样(twerdster创建的代码的较短版本)。很抱歉,我将无法显示代码,因为我没有发布它的权限,因为它是一个研究项目。我希望您仍能在这方面帮助我。我正在Visual Studio 2017(C++)文件中使用他的代码,然后使用mex mexGetDepth.cpp来使用该函数。我得到的唯一错误是glReadPixels和glGetIntegerv标识符未找到谢谢您的回复。我尝试过使用编译器方法,您已经在上面演示过了。由于找不到glReadPixels和glGetIntegerv标识符的错误,它似乎仍然无法编译。“指向OpenGL32.lib的路径”是一个通用命令(它是内置于MATLAB还是特定于系统?),因为我尝试使用它,但它无法编译代码。感谢您的时间和帮助。如果不清楚,请道歉:当我编写OpenGL32.lib的路径时,它的目的是让您找到您自己安装的系统版本的OpenGL32.lib(我发现我的搜索超级快速,在“开始”菜单中搜索键入的正是OpenGL32.lib)。如果找不到,则需要安装windows SDK工具。它类似于C:\Program Files(x86)\Windows Kit我查看了Windows工具包,找到了OpenGL32.Lib文件。我尝试用我的cpp代码编译它,方法是键入(mexGetDepth.cpp是我的文件名):mex mexGetDepth.cpp“path to OpenGL32.lib”,但出于某种原因,仍然会出现相同的错误。我甚至尝试将OpenGL32.lib与我的代码放在同一个文件夹中,结果还是出现了同样的错误。我使用的是MatlabR2017B,是否有其他方法键入该命令?感谢您的持续帮助。如果它在同一文件夹中,那么命令将是
mex-mexGetDepth.cpp-lOpenGL32.lib
。如果您在编译MEX时不确定链接(-l命令),请遵循。
depthData=getDepth;
figure
imshow(depthData);