【问题标题】:complex hex color value in three.jsthree.js 中的复杂十六进制颜色值
【发布时间】:2016-07-04 22:53:36
【问题描述】:

我只是在搞乱three.js,遇到了以下示例HERE。我看到以下初始化函数(我没有发布整个函数,而只是其中的一部分):

    function init() {

        renderer = new THREE.WebGLRenderer( { antialias: true } );
        renderer.setPixelRatio( window.devicePixelRatio );
        renderer.setSize( window.innerWidth, window.innerHeight );
        container.appendChild( renderer.domElement );

        scene = new THREE.Scene();

        camera = new THREE.PerspectiveCamera( fov, window.innerWidth / window.innerHeight, 1, 1000 );
        camera.position.z = 100;
        camera.target = new THREE.Vector3();

        controls = new THREE.OrbitControls( camera, renderer.domElement );
        controls.minDistance = 50;
        controls.maxDistance = 200;

        scene.add( new THREE.AmbientLight( 0x443333 ) );

        var light = new THREE.DirectionalLight( 0xffddcc, 1 );
        light.position.set( 1, 0.75, 0.5 );
        scene.add( light );

        var light = new THREE.DirectionalLight( 0xccccff, 1 );
        light.position.set( -1, 0.75, -0.5 );
        scene.add( light );
        //.....  more code
}

现在在几个地方我看到使用了以下代码行:

scene.add( new THREE.AmbientLight( 0x443333 ) );

当我浏览函数 AmbientLight 的文档时,我得到以下信息:

AmbientLight 文档,

环境光(颜色,强度)

color — 颜​​色的 RGB 分量的数值。强度 - 光强度/强度的数值。

但是 0x443333 到底是什么,我从来没有遇到过这样的事情。有人能解释一下0x443333 到底是什么意思吗?

【问题讨论】:

  • This: 0x443333 与十六进制的 #443333 相同(例如在 CSS 或 Photoshop 中) - 只是用 0x 表示,表示该数字是以 16 为基数编写的,所以 javascript 可以正确解析这些。 (这也是为什么你不能在javascript中写数字01,因为它会被标记为不正确)

标签: javascript three.js


【解决方案1】:

十六进制颜色是一个十六进制编码字符串,表示颜色的 RGB 值。
您可以将此代码拆分为三个单独的hexadecimal 部分;一种用于红色、绿色和蓝色 (RGB);

十六进制编码的工作原理如下:

0 : 0
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
6 : 6
7 : 7
8 : 8
9 : 9
a : 10
b : 11
c : 12
d : 13
e : 14
f : 15

所以你的RGB值如下:

Red   = 44 -> 4 x 16 + 4 -> 68
Green = 33 -> 3 x 16 + 3 -> 51
Blue  = 33 -> 3 x 16 + 3 -> 51

所以这个颜色代表下面的RGB颜色:rgb(68,51,51)

这种编码允许表示 256 x 256 x 256 = 16777216 种不同的颜色。

white : 0x000000 = rgb(0,0,0);
black : 0xffffff = rgb(255,255,255);
red   : 0xff0000 = rgb(255,0,0);
green : 0x00ff00 = rgb(0,255,0);
blue  : 0x0000ff = rgb(0,0,255);

检查this reference 了解彩虹的所有其他颜色...

【讨论】:

  • 抱歉恢复一个旧线程,但我只是在学习 Three.JS 并且在示例等中经常看到这种表示法。你知道为什么 0xFFFFFF 可能比“#FFFFFF”更可取吗?全部?看起来你可以提供任何一种,至少对于像上面这样的光源颜色这样的东西。
  • @AllieHowe 实际上不确定,它就像十六进制数字与十六进制字符串,所以我的猜测是该字符串可能会导致更多的“工作”。要导出红色、绿色和蓝色值,您首先需要从字符串转换为数字,因为另一个值已经是数字,所以您跳过该类型转换步骤。另一方面,在 css 中使用字符串时,您可以立即使用它。所以我猜“什么是最好的”取决于用户案例。我不会太担心,因为这两个值都受支持,您可以使用您个人喜欢的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-03
  • 2016-06-14
  • 2019-06-16
  • 2021-03-08
  • 2013-10-28
  • 2016-09-25
  • 1970-01-01
相关资源
最近更新 更多