extending lambert material, opacity not working

我的未来我决定 提交于 2020-01-14 02:59:09

问题


i would like to create a custom material which extends the lambert shader but setting the mesh translucent doesn't work.

var shaders = { lambert : THREE.ShaderLib['lambert'] }

materials.mylambert = function(parameters){

  var vertexShader = shaders.mylambert.vertexShader
   , fragmentShader = shaders.mylambert.fragmentShader
   , uniforms = shaders.mylambert.uniforms
   , attributes = {}

   var material = new THREE.ShaderMaterial( 
    { vertexShader: vertexShader
    , fragmentShader: fragmentShader
    , uniforms: uniforms
    , lights : true
    , fog : true
    } )

    material.setValues( parameters )
    return material  
}
var material = new materials.mylambert({ opacity : 0.4, transparent : true } )
var mesh = new THREE.Mesh(geom, material)

回答1:


You need to separate properties of the material from the material uniforms. You can get your specific example to work like so:

var shaders = { mylambert : THREE.ShaderLib[ 'lambert' ] };

var materials = {};

materials.mylambert = function( parameters, myUniforms ) {

    var material = new THREE.ShaderMaterial( {

        vertexShader: shaders.mylambert.vertexShader,
        fragmentShader: shaders.mylambert.fragmentShader,
        uniforms: THREE.UniformsUtils.merge( [ shaders.mylambert.uniforms, myUniforms ] ),
        attributes: {}

    } );

    material.setValues( parameters )

    return material;

};

myProperties = {
    lights: true,
    fog: true,
    transparent: true
};

myUniforms = {
    opacity: { type: "f", value: 0.4 },
};

var material = new materials.mylambert( myProperties, myUniforms );

three.js r.58



来源:https://stackoverflow.com/questions/17421575/extending-lambert-material-opacity-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!