CUDA体绘制-opencl体绘制结果对比,以及opencl梯度数据的输入结果

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhihuier/article/details/72675576

CUDA体绘制-opencl体绘制结果对比

这里写图片描述
左侧为opencl结果,右侧为cuda.

opencl结果,颜色会比较艳丽,但是有一层彩色的边,仔细看是可以看出来的.完全不知道为什么,啊,也有可能是我电脑的原因.不管了.

想换掉底层代码,当然我不会傻到自己写.应该会从voreen里抠下来.换掉就好.决定用cuda了.

opencl梯度数据输入结果

一.CL_RGBA

梯度数据生成:

m_graVolume = new unsigned char[m_voxelNum * 3];
memset(m_graVolume, 0, m_voxelNum * sizeof(unsigned char) * 3);

格式:

    cl_image_format volume_format;
    volume_format.image_channel_order = CL_RGBA;
    volume_format.image_channel_data_type = CL_UNORM_INT8;

然后建一个图像

m_clGrad = clCreateImage3D(cxGPUContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, &volume_format,
        dim[0], dim[1], dim[2],
        dim[0]*4 ,
        dim[0] * dim[1]*4,
        gradata, &m_clErrCode);

结果就是上面动图的左侧.

二.CL_RGB

梯度数据生成:计算如上面所示,只是变成四元组.

for (int i = 0; i < m_voxelNum; i++)
    {
        m_gra4Volume[i * 4] = m_graVolume[i * 3];
        m_gra4Volume[i * 4 + 1] = m_graVolume[i * 3 + 1];
        m_gra4Volume[i * 4 + 2] = m_graVolume[i * 3 + 2];
        m_gra4Volume[i * 4 + 3] = 0;
    }

格式用CL_RGB, 对应的数据类型 CL_UNORM_SHORT_565 :

cl_image_format volume_format;
    volume_format.image_channel_order = CL_RGB;
    volume_format.image_channel_data_type = CL_UNORM_SHORT_565;

然后依旧是建个图片传进去…

m_clGrad = clCreateImage3D(cxGPUContext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, &volume_format,
        dim[0], dim[1], dim[2],
        dim[0]*3,
        dim[0] * dim[1]*3,
        gradata, &m_clErrCode);

结果:
这里写图片描述
明显是有问题的.推测问题原因如下:根据opencl文档可以看出

CL_RGB This format can only be used
CL_UNORM_SHORT_565,
CL_UNORM_SHORT_555
or CL_UNORM_INT101010.

这些短整型是有符号的,而我们的数据是unsigned char形式.
但是现在老子只想快点毕业.所以,无所谓啦,用CL_RGBA四元组形式就好╮(╯3╰)╭就不去深究这个推测是否正确啦.啦啦啦啦٩(ˊᗜˋ*)و ~

猜你喜欢

转载自blog.csdn.net/zhihuier/article/details/72675576