光线投射体积时出现奇怪的瑕疵

时间:2017-02-09 09:32:19

标签: graphics 3d rendering raycasting

所以我正在用Java编写体积光线连接器(有史以来第一次),学习用C编写的伟大VTK工具包的代码。

一切都像VTK一样工作,除了我得到这个奇怪的文物,看起来像卷上的高程线。我注意到VTK在操作图像时也会显示它们,但是当图像静止时它们会消失。

我已多次查看代码,但无法找到工件的来源。也许这是一个简单的计算机图形专家从头顶知道? :)

有关我的实施的更多信息

  • 我正在使用渐变方法进行正常计算(来自我在互联网上找到的标准)
  • 我正在使用三线插值来计算射线点值
  • 这个"标高线"工件看起来像值舍入错误,但我无法在我的代码中找到任何
  • 提高渲染的分辨率并不能解决问题
  • 这些文物似乎不是"面对"任何固定方向,如相机位置
  • 我没有附上代码,因为它很大:)

Example image 编辑(光线复合循环)

while (Geometry.pointInsideCuboid(cuboid, position) && result.a > MINIMAL_OPACITY) {
        if (currentVoxel.notEquals(previousVoxel)) {
            final float value = VoxelUtils.interpolate(position, voxels, buffer);

            color = colorLUT.getColor(value);
            opacity = opacityLUT.getOpacityFromLut(value);

            if (enableShading) {
                final Vector3D normal = VoxelUtils.getNormal(position, voxels, buffer);
                final float cos = normal.dot(light.fixedDirection);
                final float gradientOpacity = cos < 0 ? 0 : cos;

                opacity *= gradientOpacity;

                if(cos > 0)
                    color = color.clone().shade(cos, colorLUT.diffuse, colorLUT.specular);
            }

            previousVoxel.setTo(currentVoxel);
        }

        if(opacity > 0)
            result.accumulate(color, opacity);

        position.add(rayStep);
        currentVoxel.fromVector(position);
    }

0 个答案:

没有答案