三.js WebGL 网格材质获得与画布背景相同的颜色
three.js webgl mesh materials get the same color as canvas background
好吧,我是三个新手.js我不明白为什么会发生这种情况以及这是否正常。以下是我的渲染器设置:
if ( !webglSupported() ) {
throw new Error("WebGL not supported!");
}
var defaults = {
init :{
antialias: (isDesktop)(),
alpha: true,
maxLights: 4
},
clearColor: 0x000000,
clearColorIntensity: 1,
autoClear: true,
sortObjects : true
};
this.options.renderer = $.extend( true, defaults, settings );
this.renderer = new THREE.WebGLRenderer( this.options.renderer.init );
if ( "autoClear" in this.options.renderer ) {
this.renderer.autoClear = this.options.renderer.autoClear;
}
if ( "sortObjects" in this.options.renderer ) {
this.renderer.sortObjects = this.options.renderer.sortObjects;
}
this.renderer.setClearColor( this.options.renderer.clearColor, this.options.renderer.clearColorIntensity );
this.renderer.setSize( this.options.generic.container.clientWidth, this.options.generic.container.clientHeight );
this.options.generic.container.appendChild( this.renderer.domElement );
画布背景设置为蓝色(#00f),以下是我的材料:
var backgroundMaterial = new THREE.MeshPhongMaterial({
color: 0xefefef,
specular: 0x3399ff,
//emissive : 0xefefef,
side: THREE.FrontSide,
overdraw: false,
transparent: false,
metal:true,
shininess: this.options.models.boxShininess,
reflectivity: this.options.models.boxReflectivity,
fog:false
});
var productMaterial = new THREE.MeshBasicMaterial({
map: productModelTexture,
color: 0xefefef,
specular: 0x3399ff,
//emissive : 0xefefef,
side: THREE.FrontSide,
overdraw: false,
transparent: false,
metal:true,
shininess: that.options.models.textureShininess,
reflectivity: that.options.models.textureReflectivity,
opacity: 1,
fog:false
});
还要记住,一切都发生在蓝色球体/圆顶内,但圆顶对这些物体没有影响。
为什么当我更改画布 css 背景时,相同的颜色应用于产品材料和背景材料 ?|
更新
经过一番挖掘,我发现如果你将材料的透明度设置为true(在本例中为productMaterial),那么它就可以解决问题。我仍然不确定这是否是正确的方法。
PS:texure是一个512x512 png,各个部分都有透明度,这些部分曾经显示为与画布CSS背景颜色相同的颜色。
我现在
在猜测,但是这种情况发生的球体是否如此之大,以至于超过了其视锥体的远平面?
例如:
var cam = new THREE.PerspectiveCamera(60, W / H, 1, 1000);
var dome = new THREE.Mesh(
new THREE.SphereGeometry(1000),
material
);
将创建一个球体(如果位置未更改)将超出相机视锥体,并以清晰的颜色清除。
经过一番挖掘,我发现如果您将材料的透明度设置为 true(在本例中为 productMaterial),那么它就可以解决问题。我仍然不确定这是否是正确的方法。
PS:texure是一个512x512 png,各个部分都有透明度,这些部分曾经显示为与画布CSS背景颜色相同的颜色。
相关文章:
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何使用jquery更改html中的背景颜色
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- JS幻灯片与CSS背景颜色变化
- DT数据表背景颜色为黑色,但仍有悬停和选择颜色
- Javascript通过列表项的函数和css来更改背景颜色
- Javascript没有从数组中选择背景颜色
- 使用圆中的数组更改背景颜色项目
- 如何用jquery动画改变背景颜色,就像一个过渡
- 使用jquery交换并保存背景颜色
- j查询如何设置/取消设置下拉菜单的背景颜色
- 使用angularjs根据时间更改背景颜色
- 设置Dojo量表的背景颜色
- javascript样式的背景颜色在设置时闪烁.ASP.NET
- 使用javascript更改任意文本的背景颜色
- 在用Javascript更改背景颜色后:hover don'不要改变颜色
- 图像内部的透明背景颜色不受影响
- jQuery mobile-动态更改ui页面背景颜色
- 切换按钮的背景颜色
- JavaScript更改类的背景颜色