Ich habe hier keine Antwort gesehen, die dies erklärt. Viele Transformationen können durchgeführt werden, indem jede der divOptionen und ihre Optionen mithilfe eines komplizierten Validierungssatzes berechnet werden . Wenn Sie jedoch eine 3D-Funktion verwenden, werden alle 2D-Elemente, die Sie haben, als 3D-Elemente betrachtet, und wir können diese Elemente im laufenden Betrieb einer Matrixtransformation unterziehen. Die meisten Elemente sind jedoch "technisch" bereits hardwarebeschleunigt, da sie alle die GPU verwenden. Die 3D-Transformationen funktionieren jedoch direkt mit den zwischengespeicherten Versionen jedes dieser 2D-Renderings (oder zwischengespeicherten Versionen von div) und verwenden direkt eine Matrixtransformation (die vektorisierte und parallelisierte FP-Mathematik sind).
Es ist wichtig zu beachten, dass 3D-Transformationen NUR Änderungen an Features in einem zwischengespeicherten 2D-Div vornehmen (mit anderen Worten, das Div ist bereits ein gerendertes Bild). Dinge wie das Ändern der Randbreite und -farbe sind also vage nicht mehr "3D". Wenn Sie darüber nachdenken, müssen Sie zum Ändern der Rahmenbreiten das divWeil erneut rendern und erneut zwischenspeichern, damit die 3D-Transformationen angewendet werden können.
Hoffe das macht Sinn und lass es mich wissen, wenn du weitere Fragen hast.
Um Ihre Frage zu beantworten, translate3d: 0x 0y 0zwürden Sie nichts tun, da die Transformationen direkt auf die Textur wirken, die durch Ausführen der Eckpunkte von divin den GPU-Shader gebildet wird. Diese Shader-Ressource wird jetzt zwischengespeichert und beim Zeichnen auf den Frame-Puffer wird eine Matrix angewendet. Im Grunde genommen hat das keinen Vorteil.
So funktioniert der Browser intern.
Schritt 1: Eingabe analysieren
<div style = "position:absolute;left:0;right:0;bottom:0;top:0;"></div>
Schritt 2: Verbundschicht entwickeln
CompositeLayer compLayer = new CompositeLayer();
compLayer.setPosition(0, 0, 0, 0);
compLayer.setPositioning(ABSOLUTE); // Note. this is psuedocode. The actual code
Pipeline.add(compLayer, zIndex); // would be significantly more complex.
Schritt 3: Verbundschicht rendern
for (CompositeLayer compLayer : allCompositeLayers){
// Create and set cacheTexture as active target
Texture2D cacheTexture = new Texture2D();
cacheTexture.setActive();
// Draw to cachedTexture
Pipeline.renderVertices(compLayer.getVertices());
Pipeline.setTexture(compLayer.getBackground());
Pipeline.drawIndexed(compLayer.getVertexCount());
// Set the framebuffer as active target
frameBuffer.setActive();
// Render to framebuffer from texture and **applying transformMatrix**
Pipeline.renderFromCache(cacheTexture, transformMatrix);
}