zu puffern Ist es möglich, den Wert eines Attributs im Shader zu ändern und diese in dem Puffer reflektiert für das nächste Bild machen?three.js: Attribute ändern Wert in Vertex-Shader und übergeben
So zum Beispiel ändern, um die Position eines Knotens in den Vertex-Shader und diesen neuen Wert an das JavaScript-Puffer-Objekt zurückschicken?
Codebeispiel unten:
attribute vec3 newPosition;
attribute vec3 divideVal;
void main() {
vec3 difference = newPosition - position;
velocity = difference/divideVal;
position += velocity;
vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
gl_PointSize = size * (sizeMultipler/-mvPosition.z);
gl_Position = projectionMatrix * mvPosition;
}
Edit:
Gerade jetzt ich tun dies in der JS selbst, sondern verstehen es schneller sein wird, wenn ich so viel Berechnung bewegen, wie ich an den Shadern kann? Dies ist meine aktuelle JS:
const positions = this.geometry.attributes.position.array;
const newPositions = this.geometry.attributes.newPosition.array;
for (let i = 0, i3 = 0; i < this.numParticles; i++, i3 += 3) {
const velocity = [newPositions[i3] - positions[i3], newPositions[i3 + 1] - positions[i3 + 1], newPositions[i3 + 2] - positions[i3 + 2]];
if (velocity[0] || velocity[1] || velocity[2]) {
const minReset = 1;
velocity[0] = velocity[0]/60;
velocity[1] = velocity[1]/60;
velocity[2] = velocity[2]/60;
positions[i3] = positions[i3] + velocity[0];
positions[i3 + 1] = positions[i3 + 1] + velocity[1];
positions[i3 + 2] = positions[i3 + 2] + velocity[2];
}
}
Ja, aber es hat nichts mit GLSL zu tun. Auf einer Ebene von drei .js ist es viel abstrakter. Sie können dies tun, indem Sie die Aktualisierung sowohl 'Geometry' oder' BufferGeometry', mehr Code teilen? – pailhead
können Sie verwenden webgl2 für das Feedback-Transformation (hier ein sehr einfaches Beispiel ist: https://www.ibiblio.org/e-notes/webgl/gpu/bounce.htm), aber ich bin nicht sicher, wie Sie Haken kann dies mit three.js, vielleicht mit 'object.onBeforeRender'. –
Weitere Code hinzugefügt. –