版权声明:本文为博主原创文章,未经博主允许不得转载。 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╰)╭就不去深究这个推测是否正确啦.啦啦啦啦٩(ˊᗜˋ*)و ~