es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo agregar material personalizado a un fragmento en el visor Forge.

Tengo una extensión con métodos, y cuando llamo a este método para cambiar el material (colorearlo de rojo), el objeto se vuelve transparente y aparecen los siguientes errores en la consola:

WebGLRenderer.js:5561 WebGL: INVALID_VALUE: uniform3fv: no array
[.WebGL-0000737C06582900] GL_INVALID_OPERATION: Active draw buffers with missing fragment shader outputs.

“`
setColorToItem = (id) => {
const material = this.createMaterial(‘#ff0000’);
const model = this.viewer.model;
const frags = model.getFragmentList();
model.unconsolidate();

this.tree.enumNodeFragments( 
    id, 
    (fragId) => { 
        frags.setMaterial(fragId, material); 
        this.viewer.impl.getFragmentProxy(model, fragId).updateAnimTransform(); 
    }, 
    true, 
); 
this.viewer.impl.invalidate(true); 

};

createMaterial = (color) => {
const threeColor = new THREE.Color(color);
const material = new THREE.MeshPhongMaterial({
side: THREE.DoubleSide,
flatShading: true,
color: threeColor,
});

const materials = this.viewer.impl.matman(); 

materials.addMaterial('CustomMaterial' + color.toString(), material, true); 

return material; 

};

¿Cuál podría ser el problema?
Intenté usar diferentes materiales (MeshBasicMaterial, MeshLambertMaterial)
versión de forge-viewer 7
versión threejs 0.71 como se indica aquí: https://forge.autodesk.com/en/docs/viewer/v7/developersguide/viewerbasics/
también intenté el último.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema podría estar relacionado con la forma en que el material se crea y se agrega al gestor de materiales. Parece que el método uniform3fv no está recibiendo un array como se esperaba, por lo tanto, se produce el error “No hay array” en la consola. Además, el error GL_INVALID_OPERATION podría deberse a una falta de salidas de sombreador de fragmentos.

    Para solucionar esto, podría intentar agregar un fragmentShader y vertexShader a la definición de su material, y asegurarse de que está pasando un array al método uniform3fv. También podría intentar usar un método diferente para actualizar el material, como setMaterialColor, y verificar si eso resuelve el problema.

    También vale la pena señalar que el código que proporcionó está utilizando la versión 0.71 de Three.js, que es bastante antigua y puede no ser compatible con la última versión de forge-viewer. Actualizar a la última versión de Three.js podría solucionar cualquier problema de compatibilidad.

Comments are closed.