js不透明度梯度
three.js opacity gradient
我想知道,由于rgba在three.js中不支持(alpha不使用),是否有一种方法可以使用不透明度梯度制作脸部?
我看到它可能有一个ShaderMaterial,使用自定义属性,但由于我是WebGL的新手,我还没有真正理解。
attributes = {
// ...
customColor: { type: 'v4', value: [] }
// ...
};
var values_color = attributes.customColor.value;
for( var v = 0; v < vertices.length; v++ ) {
// ...
values_color[ v ] = new THREE.Vector4();
// ...
}
我想做这样的事情,但透明度:http://jsfiddle.net/FtML5/3/
您可以使用THREE.ShaderMaterial
与自定义顶点属性的alpha值。这是一个循序渐进的指南-
1)在你的顶点着色器中,声明一个attribute float
,它将取alpha值。同时在顶点和片段着色器中声明一个varying float
。
顶点着色器:
attribute float alphaValue;
varying float vAlphaValue;
片段着色器:
varying float vAlphaValue;
2)将alpha属性值赋给顶点着色器中的变化值。
顶点着色器:
vAlphaValue = alphaValue;
3)所有计算完成后,将alpha变化值赋给gl_FragColor的alpha值。
片段着色器:
gl_FragColor.a = vAlphaValue;
4)从主机端,添加一个总顶点长度的数组。下面是代码示例-
var geometry = new THREE.BufferGeometry();
geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));
var alphaArray = [];
var alphaArrayLength = vertices.length / 3;
for(var i = 0; i < alphaArrayLength; i++) {
alphaArray.push(0.5);
}
5)为alpha值添加一个自定义属性,并使用创建的数组更新它-
geometry.addAttribute('alphaValue', new THREE.BufferAttribute(new Float32Array(alphaArray), 1));
6)创建一个3。ShaderMaterial -
var material = new THREE.ShaderMaterial({
vertexColors: THREE.VertexColors,
side: THREE.DoubleSide,
transparent: true,
vertexShader: document.
getElementById('vertex_shader_for_face').text,
fragmentShader: document.
getElementById('fragment_shader_for_face').text
});
7)创建几何体和材质的网格-
var mesh = new THREE.Mesh(geometry, material);
最快的解决方案似乎是使用自定义着色器并根据UV值设置片段不透明度。
相关文章:
- 在js中访问元素时不透明度和样式未定义,但在css中定义
- 设置1400个Raphael.js对象的不透明度动画会影响动画性能
- 更改alphaMap不透明度不会更新(THRE.JS R76)
- 在Raphael JS中,不透明度:0和开始动画到不透明度:1之间的延迟
- Three.js设置对象不透明度/透明度
- d3 js - 如何在没有频闪效果的情况下,在fillStyle()和fillRect()上使用随机不透明度来模拟距离/
- 已检查使用 JS 更改另一个元素的不透明度
- 将不透明度层添加到带有侧边栏的HTML部分.js / jQuery
- D3.js文本输入(在svg中)将不透明度0转换为1 won't结束于1
- 三个js-dat-gui:更改来自OBJMTLLoader的对象的不透明度和可见性
- Raphael js - 在组上动画不透明度,同时保留单个元素的不透明度
- 更改不透明度不适用于Chrome中的JS和SVG
- CSS/JS为简单的产品库切换缩略图不透明度
- 使用CSS3或JS对图像进行不透明度淡入淡出
- Fabric.js在多个对象上的低FPS动画不透明度
- js -如何动态改变对象的不透明度
- 使用js设置不透明度或关闭模态窗口
- Angular-chart.js条形图,颜色100%不透明度
- Three.js -平面溢出不透明度
- js不透明度梯度