首页 > 解决方案 > 三.js setHSL() 设置意想不到的颜色

问题描述

setHSL(h,s,l) - 在提供的 HSL 值上设置此颜色的值。值范围从 0 到 1。

为什么我尝试时会变成青色material.color.setHSL( 0.5, 1, 0.5 )?我希望有黄色而不是颜色选择器显示

在此处输入图像描述

let camera, scene, renderer, material;

init();

function init() {

    camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.01, 10 );
    camera.position.z = 1;

    scene = new THREE.Scene();

    const geometry = new THREE.PlaneGeometry();
    material = new THREE.MeshBasicMaterial( { color: 0xffffff } );
		material.color.setHSL( 0.5, 1, 0.5 );
    
    const mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );

    renderer = new THREE.WebGLRenderer( { antialias: true } );
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );
    renderer.render( scene, camera );
}
body {
	  margin: 0;
}
<script src="//cdn.rawgit.com/mrdoob/three.js/master/build/three.min.js"></script>

标签: three.js

解决方案


颜色选择器从 0 到 360。 setHSL 从 0 到 1。

如果您想要 360 中的 50 色相,则设置 50/360,即 0.1388888888888889。

setHSL(0.1388888888888889, 1, 0.5) 是黄色的。

let camera, scene, renderer, material;

init();

function init() {

    camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.01, 10 );
    camera.position.z = 1;

    scene = new THREE.Scene();

    const geometry = new THREE.PlaneGeometry();
    material = new THREE.MeshBasicMaterial( { color: 0xffffff } );
		material.color.setHSL( 0.1388888888888889, 1, 0.5 );
    
    const mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );

    renderer = new THREE.WebGLRenderer( { antialias: true } );
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );
    renderer.render( scene, camera );
}
body {
	  margin: 0;
}
<script src="//cdn.rawgit.com/mrdoob/three.js/master/build/three.min.js"></script>


推荐阅读