Three.js 三是控制不端行为

Three.js 三是控制不端行为,three.js,Three.js,在这里扯我的头发 我有一个小应用程序可以在js fiddle上完美地工作-但在我的实际“现实世界”项目中,在这个fiddle中工作的代码是失败的,因为它给了我以下警告: three js UniformLocation is not from the current active Program 我甚至不确定这意味着什么(我只在THREE.js上工作了5-6个月,是兼职的,所以我还没有遇到这个特别的错误。) 第一件事是第一件事-这是小提琴,它工作得很好: 该应用程序的要点是,当你点击主场景中

在这里扯我的头发

我有一个小应用程序可以在js fiddle上完美地工作-但在我的实际“现实世界”项目中,在这个fiddle中工作的代码是失败的,因为它给了我以下警告:

three js UniformLocation is not from the current active Program
我甚至不确定这意味着什么(我只在THREE.js上工作了5-6个月,是兼职的,所以我还没有遇到这个特别的错误。)

第一件事是第一件事-这是小提琴,它工作得很好:

该应用程序的要点是,当你点击主场景中的一个立方体时,右上角会出现一个小弹出窗口“detailsScene”,显示你点击的立方体。然后,您可以在
“detailsScene”
中旋转和播放立方体,与主场景无关

问题是,当我在实际项目中实现完全相同的代码时,会发生一件奇怪的事情: 虽然
“detailsScene”
确实弹出并显示了我点击的多维数据集的放大视图,但当我尝试与多维数据集进行实际交互时,多维数据集本身完全疯了

具体来说:只要我在
“detailsScene”
中点击立方体并移动鼠标一根头发,立方体就会消失!它完全从
“detailsScene”
中消失

我不太清楚是不是这个小小的鼠标移动导致了
中的
相机
飞到了一个非常遥远的地方,从而使它看起来像是立方体消失了,还是真的是立方体本身消失了。
不管怎样,它消失了,我无法让它再次出现。(我尝试了各种各样的鼠标移动来让它重新出现——没有任何效果。)而这种立方体消失的行为每次都在持续发生

更清楚地说,这不是发生在
mousedown
(或
pointerdown
)事件上,而是发生在我按住鼠标,然后开始移动鼠标时。换句话说,如果我按住鼠标,然后松开它,而不移动鼠标,立方体将保持在原来的位置。但如果我点击并移动,它就会消失。所以肯定是鼠标移动导致了这个问题

除此之外,如果我关闭
“detailsScene”
,然后点击主场景中的另一个对象-这会导致
“detailsScene”
再次打开,这一次,它会打开为空。所以它不再像第一次那样向我展示立方体了。 这也是一致的

“detailsScene”
只有在第一次尝试时才起作用。在那之后-好吧,我必须刷新页面,让它再次工作

我不太明白我得到的警告——这是:

three js UniformLocation is not from the current active Program
我在
UniformLocation
上没有找到多少。我发现了一个s.O.问题:

不管怎么说,我已经干了一整天了,我什么也没得到

所以我的问题很简单:你们中有人以前遇到过这种错误吗? 你知道它指的是什么吗


非常感谢您的帮助

我不明白你为什么还有这个
onMouseMove
方法。导航完全由
OrbitControls
完成,您无需在每次鼠标移动时(甚至在
动画
循环中)设置光线投射器。您只需要在实际对
onPointerDown
方法中的某些内容进行光线投射时设置光线投射器。这样,它将在第一次单击时在细节场景中显示相应的多维数据集(以防您想知道为什么它只在第二次单击时显示)

细节场景中的摄影机有一个非常近的远剪裁平面,可以直观地剪切立方体。远剪裁平面应该离得更远。也许这是导致你的立方体消失的原因。只要立方体不移动,动态观察控件应始终查看立方体

我在你的小提琴上更新了这些变化:


另一件事是,每次单击多维数据集并调用
makeDetailsScene
时,都会实例化一个新场景、摄影机、webgl渲染器和动态观察控件。这可能会引起问题。每次调用都会有一个新的OrbitControls实例监听details画布上的鼠标事件。重用场景、渲染器、控件等的细节,或正确处理它们:。也许这是造成你的错误的原因。在我的三个.js项目中,我还没有遇到过这个错误。

我不明白你为什么要在MouseMove上使用这个
方法。导航完全由
OrbitControls
完成,您无需在每次鼠标移动时(甚至在
动画
循环中)设置光线投射器。您只需要在实际对
onPointerDown
方法中的某些内容进行光线投射时设置光线投射器。这样,它将在第一次单击时在细节场景中显示相应的多维数据集(以防您想知道为什么它只在第二次单击时显示)

细节场景中的摄影机有一个非常近的远剪裁平面,可以直观地剪切立方体。远剪裁平面应该离得更远。也许这是导致你的立方体消失的原因。只要立方体不移动,动态观察控件应始终查看立方体

我在你的小提琴上更新了这些变化:

另一件事是,每次单击多维数据集并调用
makeDetailsScene
时,都会实例化一个新场景、摄影机、webgl渲染器和动态观察控件。这可能会引起问题。每次调用都会有一个新的OrbitControls实例监听details画布上的鼠标事件。重用场景、渲染器、控件等的细节,或正确处理它们:。也许这是造成你的错误的原因。在我的三个.js项目中,我还没有遇到过这个错误。

嘿,就是这样!意思是“远剪裁平面”业务。一旦我调整了这个值(顺便说一下,它是代码I的一部分)