Этот результат я достиг с помощью буфера трафарета: https://jsfiddle.net/mmalex/g3hf4zxc/
const gl = renderer.getContext();
polygon.onBeforeRender = function () {
gl.enable(gl.STENCIL_TEST)
gl.stencilFunc(gl.ALWAYS, 1, 0xFF);
gl.stencilMask(0xFF);
gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);
}
polygon.onAfterRender = function() {
gl.disable(gl.DEPTH_TEST);
}
polygon.renderOrder = 999;
gridHelper.onBeforeRender = function() {
gl.enable(gl.STENCIL_TEST)
gl.stencilMask(0x00);
gl.stencilFunc(gl.EQUAL, 1, 0xFF);
}
gridHelper.onAfterRender = function() {
gl.disable(gl.STENCIL_TEST)
}
gridHelper.renderOrder = 1000
К сожалению, я пожертвовал непрозрачностью сетки, поскольку threejs независимо сортирует непрозрачные и прозрачные объекты:
.renderOrder: Number Это значение позволяет переопределить порядок рендеринга объектов графа сцены по умолчанию, хотя и непрозрачный и прозрачные объекты остаются отсортированными независимо. Сортировка от самого низкого до самого высокого renderOrder. Значение по умолчанию равно 0.
blockquote>
Вам нужно добавить функцию, которая принимает аргумент и возвращает функцию, которая принимает аргумент, который добавляет аргумент для добавленияи сам.
var add = function(x) {
return function(y) { return x + y; };
}
мы можем сделать эту работу с помощью закрытия.
function add(param1){
return function add1(param2){
return param2 = param1 + param2;
}
}
console.log(add(2)(3));//5
в дополнение к тому, что уже было сказано, вот решение с универсальным каррированием (на основе http://github.com/sstephenson/prototype/blob /master/src/lang/function.js#L180 )
Function.prototype.curry = function() {
if (!arguments.length) return this;
var __method = this, args = [].slice.call(arguments, 0);
return function() {
return __method.apply(this, [].concat(
[].slice.call(args, 0),
[].slice.call(arguments, 0)));
}
}
add = function(x) {
return (function (x, y) { return x + y }).curry(x)
}
console.log(add(2)(3))
function add(x){
return function(y){
return x+y
}
}
Функции первого класса и закрытия делают свое дело.
function add(x) {
return function(y) {
return x + y;
};
}
Ах, красота JavaScript
Этот синтаксис тоже довольно изящный
function add(x) {
return function(y) {
if (typeof y !== 'undefined') {
x = x + y;
return arguments.callee;
} else {
return x;
}
};
}
add(1)(2)(3)(); //6
add(1)(1)(1)(1)(1)(1)(); //6