Параметры detailX
и detailY
используются только при рендеринге WebGL.
Обратите внимание, что P5.js является открытым исходным кодом, и вы можете просмотреть его источник здесь .В частности, функция rect()
запускается здесь и реализуется для 2D здесь .Из того, что я могу сказать, ничто в 2D-рендерере на самом деле не использует параметры detailX
или detailY
.
Однако функция rect()
для рендерера WebGL здесь , и этоиспользует параметры detailX
и detailY()
.
p5.RendererGL.prototype.rect = function(args) {
var perPixelLighting = this.attributes.perPixelLighting;
var x = args[0];
var y = args[1];
var width = args[2];
var height = args[3];
var detailX = args[4] || (perPixelLighting ? 1 : 24);
var detailY = args[5] || (perPixelLighting ? 1 : 16);
var gId = 'rect|' + detailX + '|' + detailY;
if (!this.geometryInHash(gId)) {
var _rect = function() {
for (var i = 0; i <= this.detailY; i++) {
var v = i / this.detailY;
for (var j = 0; j <= this.detailX; j++) {
var u = j / this.detailX;
var p = new p5.Vector(u, v, 0);
this.vertices.push(p);
this.uvs.push(u, v);
}
}
// using stroke indices to avoid stroke over face(s) of rectangle
if (detailX > 0 && detailY > 0) {
this.strokeIndices = [
[0, detailX],
[detailX, (detailX + 1) * (detailY + 1) - 1],
[(detailX + 1) * (detailY + 1) - 1, (detailX + 1) * detailY],
[(detailX + 1) * detailY, 0]
];
}
};
var rectGeom = new p5.Geometry(detailX, detailY, _rect);
rectGeom
.computeFaces()
.computeNormals()
._makeTriangleEdges()
._edgesToVertices();
this.createBuffers(gId, rectGeom);
}
Параметры detailX
и detailY
затем передаются в p5.Geometry, которую вы можете просмотреть здесь .
Похоже, что WebGL использует эти параметры для установки уровня детализации фигур, которые он рисует.Я думаю, что это полезно для таких вещей, как текстуры или шейдеры.