Objective c 为什么我的光线跟踪球体在使用多个光源照明时有暗线?
我有一个简单的光线跟踪器,它只在第一个交叉点工作。场景用两个不同的光源看起来不错,但是当两个灯都在场景中时,从一个末端有照明的区域有暗阴影,即使在从另一个光源(特别是在绿色球上特别明显)的照明区域的中间。从“由两个光源照亮的区域”到“仅由一个光源照亮的区域”的过渡似乎比“仅由一个光源照亮的区域”稍暗 我添加灯光效果的代码是:Objective c 为什么我的光线跟踪球体在使用多个光源照明时有暗线?,objective-c,raytracing,Objective C,Raytracing,我有一个简单的光线跟踪器,它只在第一个交叉点工作。场景用两个不同的光源看起来不错,但是当两个灯都在场景中时,从一个末端有照明的区域有暗阴影,即使在从另一个光源(特别是在绿色球上特别明显)的照明区域的中间。从“由两个光源照亮的区域”到“仅由一个光源照亮的区域”的过渡似乎比“仅由一个光源照亮的区域”稍暗 我添加灯光效果的代码是: // trace lights for ( int l=0; l<primitives.count; l++) { Pri
// trace lights
for ( int l=0; l<primitives.count; l++) {
Primitive* p = [primitives objectAtIndex:l];
if (p.light)
{
Sphere * lightSource = (Sphere *)p;
// calculate diffuse shading
Vector3 *light = [[Vector3 alloc] init];
light.x = lightSource.centre.x - intersectionPoint.x;
light.y = lightSource.centre.y - intersectionPoint.y;
light.z = lightSource.centre.z - intersectionPoint.z;
[light normalize];
Vector3 * normal = [[primitiveThatWasHit getNormalAt:intersectionPoint] retain];
if (primitiveThatWasHit.material.diffuse > 0)
{
float illumination = DOT(normal, light);
if (illumination > 0)
{
float diff = illumination * primitiveThatWasHit.material.diffuse;
// add diffuse component to ray color
colour.red += diff * primitiveThatWasHit.material.colour.red * lightSource.material.colour.red;
colour.blue += diff * primitiveThatWasHit.material.colour.blue * lightSource.material.colour.blue;
colour.green += diff * primitiveThatWasHit.material.colour.green * lightSource.material.colour.green;
}
}
[normal release];
[light release];
}
}
//跟踪灯
对于(int l=0;l 0)
{
浮动照明=点(正常,光);
如果(照明>0)
{
float diff=照明*原语washit.material.diffuse;
//将漫反射组件添加到光线颜色
color.red+=diff*原语washit.material.color.red*光源.material.color.red;
color.blue+=diff*原语washit.material.color.blue*光源.material.color.blue;
color.green+=diff*原语washit.material.color.green*光源.material.color.green;
}
}
[正常释放];
[光释放];
}
}
我怎样才能使它看起来正确呢?你的眼睛决定着你。如果将3张图片中的球体移动到一起,您将非常清楚地看到,当单光照时,这些区域的颜色相同,而当双光照时,这些区域的颜色更亮。如果你想让它看起来更好,我建议你在当前的光源之间加一整条弧线。你已经在图像中饱和了一个颜色通道;将亮度调低一点,看看会发生什么。这是一种称为的感知效果
您也很可能在错误的颜色空间中查看图像。光线跟踪器在“线性”空间中进行照明计算,但几乎可以肯定的是,在显示器上查看这些图像时会产生非线性响应,因此甚至看不到正确的结果。这很容易使马赫带比正确显示马赫带更加突出。尝试了解。您确定您的照明方向都正常化了吗
可能值得在这里添加断言。可以肯定,这只是重叠高光中的幻觉。是的,你完全正确。我使用了一个颜色选择器工具,对我怀疑的像素进行了比较。事实证明,它们只是看起来更暗,它们实际上是相同的颜色。