我如何使用jquery和三个js从此代码获取材料颜色

时间:2019-05-08 06:54:20

标签: three.js

"materials" : [ {
        "DbgColor" : 15658734,
        "DbgIndex" : 0,
        "DbgName" : "color_1.003",
        "blending" : "NormalBlending",
        "colorAmbient" : [0.64000004529953, 0.64000004529953, 0.64000004529953],
        "colorDiffuse" : [0.64000004529953, 0.64000004529953, 0.64000004529953],
        "colorEmissive" : [0.0, 0.0, 0.0],
        "colorSpecular" : [0.5, 0.5, 0.5],
        "depthTest" : true,
        "depthWrite" : true,
        "shading" : "Lambert",
        "specularCoef" : 50,
        "transparency" : 1.0,
        "transparent" : false,
        "vertexColors" : false
    }],

1 个答案:

答案 0 :(得分:0)

假设您想要一个十六进制的颜色值,并且看起来这些值从0到1似乎是合理的(3d编程通常是这种情况)。

  1. 将0-1范围转换为0-255范围
  2. 从十进制转换为十六进制
  3. 将值放在一起作为字符串

[0.64000, 0.23000000, 0.123456].map( v => Math.round(v*255).toString(16) ).join("")

  • .map()为数组中的每个值运行一个函数,返回的值将成为一个新数组。
  • .join()将多个值合并为一个字符串
  • Math.round()摆脱丑陋的小数点
  • 如果您将基数传递为16,则
  • .toString()将转换为十六进制。

为了可重用性和可读性,可以重写同一件事

function toHex(value){
    return Math.round(value*255).toString(16)
}

function toHexColor(arr){
    return "#" + arr.map(toHex).join("")
}

const color = toHexColor(materials[0].colorDiffuse)
console.log( color )

免责声明:这些函数名称虽然不好,但仅用于演示目的