I know I can use model.generateWireframe to show model’s wireframe, but this way will lose model’s faces.
Here is the screenshot of https://codepen.io/scarletsky/pen/PjyMqj
I wonder if there is any way to show wireframe and faces together ? Just like sketchfab ?
var color = new pc.Color(1, 0, 0, 1);
var vertexBuffer = cube.model.model.meshInstances[0].mesh.vertexBuffer;
var vertexIterator = new pc.VertexIterator(vertexBuffer);
var indexBuffer = cube.model.model.meshInstances[0].mesh.indexBuffer[0];
var points = [];
var verticesNum = vertexBuffer.getNumVertices();
var indices = new Uint16Array(indexBuffer.lock());
indexBuffer.unlock();
for (var i = 0; i < verticesNum; i++) {
var index = vertexIterator.element.POSITION.index;
var x = vertexIterator.element.POSITION.array[index];
var y = vertexIterator.element.POSITION.array[index + 1];
var z = vertexIterator.element.POSITION.array[index + 2];
points.push(new pc.Vec3(x, y, z));
vertexIterator.next();
}
vertexIterator.end();
var resultPositions = [];
for (var i = 0; i < indices.length; i++) {
resultPositions.push(new pc.Vec3());
}
app.on('update', function(dt) {
var transformMatrix = cube.getWorldTransform();
for (var i = 0; i < indices.length; i += 3) {
[ points[indices[i]], points[indices[i+1]], points[indices[i+2]] ].forEach(function(p, j) {
transformMatrix.transformVector(p, resultPositions[i+j]);
});
app.renderLine(resultPositions[i], resultPositions[i+1], color);
app.renderLine(resultPositions[i+1], resultPositions[i+2], color);
app.renderLine(resultPositions[i+2], resultPositions[i], color);
}
});
I am going to find another way to implement this, can anyone guide me?
Have you tried listing meshInstances of wireframed model and checking what kind of material it has on it, and if it has color or diffuse parameters you can change.