Arrays 执行点云时将图像放入阵列时遇到问题
您好,我在使用opengl进行点云计算时,无法将图像数据放入3D阵列 这是我的两个3D阵列: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
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];
}
}