Three.js场景在第一次通过后似乎无法渲染
Three.js scene does not seem to render after first pass
我目前正在使用Three.js开发一个基于web的高度图生成器。我使用一个画布来显示实际生成的高度图,其他几个画布用于显示高度图所包含的单独八度音阶,另一个画布用于演示高度图直接应用于平面网格的"实际"高度图。
到目前为止还不错。所有预定义的参数(波长等)也能完美地渲染整个东西。实际的问题是,拉票在初始渲染过程后没有更新,这使得我的程序完全无用,因为我的程序的目的是能够用滑块操纵高度图的几个参数,并实时查看效果。
遗憾的是,唯一更新的画布是带有平面网格的"真实"3D场景的画布。但在这里,第一次渲染过程中的数据似乎从未被清除,但至少噪声参数的一致性似乎得到了正确更新——显然并非所有其他拉票都是这样。
在最终渲染场景之前,我总是将网格材质的needsUpdate
字段设置为true
,但它似乎只适用于最后初始化的画布。我在这里完全迷路了,也找不到任何关于这个问题的信息。
我终于自己找到了解决方案。三个.js根本没有问题,实际的问题是我意外地在一个场景中添加了几个平面,而不是一个。这是因为我的initScene()方法被调用了不止一次,因为我没有检查所有着色器等仍在加载时的情况(我通过异步AJAX请求加载着色器)。我刚刚检查了"根本没有加载"answers"已完全加载并准备使用"。
这现在正在工作:
/**
* Adds geometry to the scene and attaches previously loaded material.
*
* @param {Number} wavelength of the first octave of the height map
* @param {Number} frequency of the first octave of the height map
* @param {Number} number of octaves (has to be an integer)
*/
HeightMap.prototype.initScene = function(wavelength, frequency, lacunarity, persistency, octaves) {
this.material = HeightMap.settings.templateMaterial.clone();
this.updateUniforms(wavelength, frequency, lacunarity, persistency, octaves);
HeightMapOctave.prototype.addPlane.call(this);
this.initialized = true;
};
/**
* Updates values for HeightMap.
*
* @param {Number} wavelength of the first octave of the height map
* @param {Number} frequency of the first octave of the height map
* @param {Number} number of octaves (has to be an integer)
*/
HeightMap.prototype.updateScene = function(wavelength, frequency, lacunarity, persistency, octaves) {
if (this.initialized) {
this.updateUniforms(wavelength, frequency, lacunarity, persistency, octaves);
Canvas3D.prototype.render.call(this);
} else if (!this.initializing) {
this.initializing = true;
this.loadShaders(function() {
this.initScene(wavelength, frequency, lacunarity, persistency, octaves);
Canvas3D.prototype.render.call(this);
});
}
};
我知道这是一个非常具体的问题,但也许这篇文章对其他犯同样错误的人仍然有帮助。我基本上花了一周的时间来追踪这个bug。。。
相关文章:
- PHP和JS脚本的奇怪问题,在我刷新页面之前第一次失败
- Three.js场景在第一次通过后似乎无法渲染
- JS切换DIV's第一次点击时CSS未启动
- 第一次用部分调用 Angular js 文件不起作用
- 我的 update.js.erb 文件仅在第一次单击按钮时运行,而不在后续单击时运行(单击时更改按钮的类和值)
- JS在第一次访问时重定向到启动页面
- 角度.js模型在第一次后不更新
- JS不会循环,在第一次循环后停止
- Rails应用程序中的JS仅在第一次加载时加载
- js动画在第一次点击时不起作用
- JQuery Mobile JS脚本第一次运行,但返回页面时不会运行
- Angular.JS onclick函数只在第一次点击时调用
- 我的node.js http请求第一次工作,现在它显示了一些错误
- 当第一次在一个现有的网站上开始时,找出所有链接的css/js
- 为什么JS只在页面第一次加载或刷新时加载?
- js根据第一次输入设置焦点
- 调用js函数只能在jquery手机上第一次工作
- 设置页面在第一次登录,express.js
- Node.js, Mongoose函数第一次返回错误,第二次不返回
- js防止第一次值的改变