- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用Tween.js在Three.js渲染周期内更新lissajous曲线。
这在大多数情况下都有效,但是,经过大约70次迭代之后,WebGL似乎崩溃并伴随错误:CONTEXT_LOST_WEBGL: loseContext: context lost
。缺乏稳定性令人不安,尤其是因为它似乎有时需要我重新启动浏览器才能使WebGL重新工作(不仅在此页面上,而且在其他使用WebGL的页面上也是如此)。
lissajous曲线的顶点不是很高,并且不使用任何纹理(这似乎是导致其他WebGL上下文损失的原因),因此我可以肯定这一定是由于我实现了Tween.js的实现,该实现可以处理图形之间的插值(具体来说.onComplete
回调)。
任何人都可以提供有关为什么会发生这种情况的任何指示吗?根据WebGL文档,我的替代方法是使用HandleContextLoss。
function tweenLandingLissaj(newLissaj) {
var update = function() {
lissajousCurve.fa = current.freqA;
lissajousCurve.fb = current.freqB;
lissajousCurve.fc = current.freqC;
lissajousCurve.phaseX = current.phaseX;
lissajousCurve.phaseY = current.phaseY;
lissajousCurve.phaseZ = current.phaseZ;
lissajousCurve.update();
};
var current = {
freqA: lissajousCurve.fa,
freqB: lissajousCurve.fb,
freqC: lissajousCurve.fc,
phaseX: lissajousCurve.phaseX,
phaseY: lissajousCurve.phaseY,
phaseZ: lissajousCurve.phaseZ
};
var tweenTo = new TWEEN.Tween(current);
tweenTo.to({
freqA: newLissaj.freqA,
freqB: newLissaj.freqB,
freqC: newLissaj.freqC,
phaseX: newLissaj.phaseX,
phaseY: newLissaj.phaseY,
phaseZ: newLissaj.phaseZ
}, 6000);
tweenTo.onUpdate(update);
tweenTo.onComplete(function() {
tweenTo.to({
freqA: Math.floor(Math.random() * 10) + 1,
freqB: Math.floor(Math.random() * 10) + 1,
freqC: Math.floor(Math.random() * 10) + 1,
phaseX: Math.floor(Math.random() * 10) + 1,
phaseY: Math.floor(Math.random() * 10) + 1,
phaseZ: Math.floor(Math.random() * 10) + 1
}, 6000);
tweenTo.start();
});
tweenTo.start();
}
最佳答案
从未找到有关Tween.js导致WebGL上下文丢失的真正原因。我怀疑这是由于我使用了onComplete回调。
但是,我确实找到了一种更优雅的解决方案来达到使用Tween.js库后的效果,而不会造成上下文丢失。
通过链接两个随机生成的补间,可以使用onComplete回调创建一个无限生成的lissajous曲线(不带波形),该回调以前曾引起我问题。
我的解决方案可以在下面找到遇到类似情况的任何人:
function tweenLandingLissaj(newLissaj) {
var update = function() {
lissajousCurve.fa = current.freqA;
lissajousCurve.fb = current.freqB;
lissajousCurve.fc = current.freqC;
lissajousCurve.phaseX = current.phaseX;
lissajousCurve.phaseY = current.phaseY;
lissajousCurve.phaseZ = current.phaseZ;
lissajousCurve.update();
};
var current = {
freqA: lissajousCurve.fa,
freqB: lissajousCurve.fb,
freqC: lissajousCurve.fc,
phaseX: lissajousCurve.phaseX,
phaseY: lissajousCurve.phaseY,
phaseZ: lissajousCurve.phaseZ
};
var tweenTo = new TWEEN.Tween(current);
tweenTo.to({
freqA: Math.floor(Math.random() * 10) + 1,
freqB: Math.floor(Math.random() * 10) + 1,
freqC: Math.floor(Math.random() * 10) + 1,
phaseX: Math.floor(Math.random() * 10) + 1,
phaseY: Math.floor(Math.random() * 10) + 1,
phaseZ: Math.floor(Math.random() * 10) + 1
}, 10000);
tweenTo.onUpdate(update);
var tweenBack = new TWEEN.Tween(current);
tweenBack.to({
freqA: Math.floor(Math.random() * 10) + 1,
freqB: Math.floor(Math.random() * 10) + 1,
freqC: Math.floor(Math.random() * 10) + 1,
phaseX: Math.floor(Math.random() * 10) + 1,
phaseY: Math.floor(Math.random() * 10) + 1,
phaseZ: Math.floor(Math.random() * 10) + 1
}, 10000);
tweenBack.onUpdate(update);
tweenTo.chain(tweenBack);
tweenBack.chain(tweenTo);
tweenTo.start();
}
关于javascript - 补间JS导致WebGL上下文丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371499/
补: Rest 风格请求处理的的内容补充(1) Rest风格请求:注意事项和细节 客户端是PostMan 可以直接发送Put,delete等方式请求,可不设置Filter 如果哟啊
我是一名优秀的程序员,十分优秀!