Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 执行点云时将图像放入阵列时遇到问题_Arrays_Opengl_For Loop_Point Clouds - Fatal编程技术网

Arrays 执行点云时将图像放入阵列时遇到问题

Arrays 执行点云时将图像放入阵列时遇到问题,arrays,opengl,for-loop,point-clouds,Arrays,Opengl,For Loop,Point Clouds,您好,我在使用opengl进行点云计算时,无法将图像数据放入3D阵列 这是我的两个3D阵列: float*** imgdata; imgdata = new float**[576]; for(int a=0; a<576; a++) { *(imgdata + a) = new float*[352]; for(int b=0; b<352; b++) *(*(imgdata + a) + b) = n

您好,我在使用opengl进行点云计算时,无法将图像数据放入3D阵列

这是我的两个3D阵列:

float*** imgdata;
    imgdata = new float**[576];
    for(int a=0; a<576; a++)
    {
        *(imgdata + a) = new float*[352];
        for(int b=0; b<352; b++)
            *(*(imgdata + a) + b) = new float[1];
    }

float*** texture;
texture = new float**[576];
for(int a=0; a<576; a++)
{
    *(texture + a) = new float*[352];
    for(int b=0; b<352; b++)
        *(*(texture + a) + b) = new float[3];
}
现在,我尝试使用for循环将两个图像的数据放入3D数组中 ,这就是问题所在

for (int i=0; i<bm0.w; i++)
{
    for (int j=0; j<bm0.h; j++)
    {
        for (int x=0; x<bm0.w; x++)
        { 
            for (int y=0; y<bm0.h; y++)
            {
                texture[i][j][0] = bm1.rgb[x*3+y*bm0.w*3];
                texture[i][j][1] = bm1.rgb[x*3+y*bm0.w*3+1];
                texture[i][j][2] = bm1.rgb[x*3+y*bm0.w*3+2];
            }
        }
    }
}

for (int i=0; i<bm0.w; i++)
{
    for (int j=0; j<bm0.h; j++)
    {
        for (int x=0; x<bm0.w; x++)
        { 
            for (int y=0; y<bm0.h; y++)
            {
                imgdata[i][j][0] = bm0.rgb[x+y*bm0.w];
            }
        }
    }
}

for(int i=0;i你的循环逻辑看起来不正确。仔细看看这里发生了什么:

for (int i=0; i<bm0.w; i++)
{
    for (int j=0; j<bm0.h; j++)
    {
        for (int x=0; x<bm0.w; x++)
        { 
            for (int y=0; y<bm0.h; y++)
            {
                texture[i][j][0] = bm1.rgb[x*3+y*bm0.w*3];
                texture[i][j][1] = bm1.rgb[x*3+y*bm0.w*3+1];
                texture[i][j][2] = bm1.rgb[x*3+y*bm0.w*3+2];
            }
        }
    }
}
这只是在所有像素上循环,并将它们从源复制到目标


另一个问题是,您使用
[1]
为最后一个维度分配和填充
imgdata
,然后使用索引
[0]
[1]
[2]访问它
在绘图代码中。

您是如何使用这些
imgdata
texture
数组的?既然您提到了OpenGL,您是否将它们用作OpenGL函数的参数?如果是,您可以显示您使用它们的调用位置吗?我很清楚可能有什么错误,但我需要查看数组的用法。是的,我很抱歉确认信息,我已更新了问题。这不是我认为可能存在的问题。我认为您可能会将其用作纹理数据,因为它被称为
纹理
,但事实并非如此。感谢添加附加信息。是的,我使用“纹理”为了确定点云的点的颜色。那么那些用于循环的点,对你来说似乎没问题?谢谢你,好先生!我已经好几天没法想这些用于循环的点了,你解释得很清楚。\n我将研究
imgdata
问题。如果我将imgdata更改为
float**imgdata;imgdata=new float*[576];例如:(inta=0;哦,我错了,我没有正确设置透视图。
glPointSize (1);
    glBegin(GL_POINTS);
    for (int i=0; i<bm0.w; i++)
        {
            for (int j=0; j<bm0.h; j++)
            {
                glColor3f(texture[i][j][0]/255, texture[i][j][1]/255, texture[i][j][2]/255);
                x=imgdata[i][j][0];
                y=imgdata[i][j][1];   
                z=imgdata[i][j][2];   
                glVertex3f(x,y,z);    
            }
        }
    glEnd(); 
glutSwapBuffers();

free(imgdata);
free(texture);
for (int i=0; i<bm0.w; i++)
{
    for (int j=0; j<bm0.h; j++)
    {
        for (int x=0; x<bm0.w; x++)
        { 
            for (int y=0; y<bm0.h; y++)
            {
                texture[i][j][0] = bm1.rgb[x*3+y*bm0.w*3];
                texture[i][j][1] = bm1.rgb[x*3+y*bm0.w*3+1];
                texture[i][j][2] = bm1.rgb[x*3+y*bm0.w*3+2];
            }
        }
    }
}
for (int i=0; i<bm0.w; i++)
{
    for (int j=0; j<bm0.h; j++)
    {
        texture[i][j][0] = bm1.rgb[i*3+j*bm0.w*3];
        texture[i][j][1] = bm1.rgb[i*3+j*bm0.w*3+1];
        texture[i][j][2] = bm1.rgb[i*3+j*bm0.w*3+2];
    }
}