【问题标题】:Three.js PointLight fails with over 2 lightsThree.js PointLight 因超过 2 个灯而失败
【发布时间】:2012-10-07 01:52:22
【问题描述】:

看看这个小提琴:

http://jsfiddle.net/PRz4G/

您可以看到围绕蓝色的四个白点。这些点中的每一个都应该在同一个地方有一个灯,但是其中三个都没有工作。

看小提琴中的这个数组:

var lights = {
    0: [712699, 0, 0],
    1: [732699, 0, 0],
    2: [722699, 10000, 0],
    3: [722699, -10000, 0],
    //4:[722699, 0, 10000],
    //5:[722699, 0, -10000]
};

如果你也注释掉 2 和 3,你可以看到两个灯光渲染成功。取消注释 2,我们又回到了一个工作灯。取消注释 3 和 4,现在我们有一个完整的着色器初始化错误。

我做错了什么?

更新: 问题是特定于显示驱动程序的,现在正在为我工​​作

【问题讨论】:

    标签: html webgl three.js


    【解决方案1】:

    编辑:这个答案是指旧版本的three.js,不再相关。 maxLights 参数已被移除。


    首先需要设置maxLights参数:

    renderer: new THREE.WebGLRenderer( { maxLights: 6 } );
    

    默认为 4,否则。有了这个变化,我看到了 6 盏灯。

    您所写的演示也适用于我。 (4 盏灯将光线投射到球体上。)

    您也可能遇到了硬件问题,阻止了 2 个以上的灯。它可能是劣质 GPU。

    好消息是您的代码适用于此更改。 :-)

    【讨论】:

    • 嗯,我添加了该属性,但它没有改变 - 当存在两个以上的灯光时,我仍然只看到一个灯光投射。这发生在两台计算机上;一个我不知道图形,但这个有一个 ATI HD 6970 - 所以我不认为这是一个硬件问题。
    • 是的。添加 maxLights 消除了着色器错误,但它仍然只在画布上绘制一个光路 - 这就是我所看到的:i.imgur.com/YfkHv.png
    • 那是在 Windows 上,对吧?也许 ANGLE 出于某种原因无法处理它。在我的所有系统上都可以正常工作,包括在具有 Intel HD 集成显卡的 chromebook 上。
    • 是的 - 这是我试过的两台机器上的 Windows 7 64bit pro; Firefox 和 Chrome 的行为相同。
    • 刚刚在办公室的 iMac 上看过这个,它确实可以正常工作。一定是 Windows 错误。一个非常非常烦人的 Windows 错误!
    【解决方案2】:

    您可以使用 Chrome 解决此问题,但您必须编辑快捷方式并添加

    C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --use-gl=desktop
    

    有了它,您可以随意投射任何光线。

    【讨论】:

    • 问题是特定于 Windows 上某些显卡的 ATI 驱动程序。我的具体问题现在已经解决了。
    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多