ilCosmico
ilCosmico

Reputation: 1459

Three.js - BufferGeometry warning Render count or primcount is 0 when no index is specify

I want to create a BufferGeometry without setting the indices. (As written here, in this case the renderer assumes that each three contiguous positions represent a single triangle), but I get the warning Render count or primcount is 0 and no geometry is shown. What am I doing wrong?

Here following the code to reproduce the issue.

var buffGeometry = new THREE.BufferGeometry();
buffGeometry.attributes =
{
    position:
    {
        itemSize: 3, array: new Float32Array([10, 0, 0, 0, 10, 0, 0, 0, 0, 0, 10, 0, 10, 0, 0, 10, 10, 0]),
        numItems: 18    
    }
};

indexArray = new Uint32Array([0, 1, 2, 3, 4, 5]);

< !--it works adding the index array with the following line-- >
// buffGeometry.setIndex(new THREE.BufferAttribute(indexArray, 1));

material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );       
var mesh = new THREE.Mesh(buffGeometry, material);    
scene.add(mesh);

three.js r77

(Here the complete sample)

Upvotes: 1

Views: 912

Answers (2)

danivicario
danivicario

Reputation: 1801

In my case I was receiving this warning when using this code, which was working completely fine:

  const curveMesh = new THREE.Mesh()
  let curve

  allCoords.forEach(coords => {
    curve = new Curve(coords, material, step)
    curveMesh.add(curve.mesh)
    curveMesh.add(curve.meshOrigin)
    curveMesh.add(curve.meshDestination)
  })

  rootMesh.add(curveMesh)

When I replaced it with this line, it started to not see the warning anymore [.WebGL-0x7fe61b026400]RENDER WARNING: Render count or primcount is 0.

// please notice here is now Group!
  const curveMesh = new THREE.Group()
  let curve

  allCoords.forEach(coords => {
    curve = new Curve(coords, material, step)
    curveMesh.add(curve.mesh)
    curveMesh.add(curve.meshOrigin)
    curveMesh.add(curve.meshDestination)
  })

  rootMesh.add(curveMesh)

Upvotes: 1

ShuberFu
ShuberFu

Reputation: 709

Documentation here: http://threejs.org/docs/index.html#Reference/Core/BufferGeometry

In short, you're not supposed to set the attribute property directly. Instead, you're supposed to create a THREE.BufferAttribute and then add it to the geometry by calling .addAttribute('position', bufferAttribute)

EDIT: Not sure how setIndex work, does it actually render anything or not crash?

Upvotes: 1

Related Questions