Three.js- RENDER警告:渲染计数或primcount为0

时间:2016-06-20 03:16:45

标签: three.js webgl rendering render chromium

使用three.js

在我的家用电脑上使用Nvidia GNU,我的浏览器控制台中有大约105个:

/#/home:1 [.CommandBufferContext]RENDER WARNING: Render count or primcount is 0

但是在我的英特尔GNU笔记本电脑上,我没有。这是对GNU驱动程序的不同意见吗?或者这是我能解决的问题吗?

var animationId;
var CAMERA_POSITION = 5000;
function runClouds() {
  var speed = 0.8;
  cloudsContainer.style.display = 'block';
  animationId = requestAnimationFrame( runClouds );

  camera.position.y = -75;

  if (camera.position.z <= 0) {
    window.cancelAnimationFrame(animationId);
    camera.position.z = CAMERA_POSITION;
    cloudsContainer.style.display = 'none';
    return true;
  } else if (camera.position.z <= 400) {
    speed = 0.1;
  } else if (camera.position.z <= 900) {
    speed = 0.3;
  } else if (camera.position.z <= 2000) {
    speed = 0.7;
  }

  camera.position.z -= 100 * speed;
  renderer.render( scene, camera );
}

2 个答案:

答案 0 :(得分:8)

当Three.js尝试渲染尚不存在的对象时,抛出此警告。

例如,在这里绘制一条线程。

如果在添加任何点之前将该行添加到场景中,则会出现此警告,直到添加第一个点并且可以看到一行。

如果你得到这个,要么有东西等待添加到场景中,或者在你的情况下,因为你说你每次都得到大约105,我认为一个对象被添加到场景然后由于不同步,是实际上是在另一个函数中制作的。

由于这是一个警告,没有太多可怕的。

答案 1 :(得分:2)

我遇到了这个问题,因为我没有将position属性传递给BufferGeometry对象。尽管我的着色器使用自己的计算覆盖了position,但它似乎是必需的属性。

我用以下方法解决了这个问题:

const positions = new Float32Array(PARTICLE_COUNT * 3);
myGeometry.addAttribute('position', new THREE.BufferAttribute(positions, 3));

如果不使用着色器中的值,则默认值为0即可。