Je n'ai pas vu de réponse ici qui explique cela. De nombreuses transformations peuvent être effectuées en calculant chacune des div
options et ses options à l'aide d'un ensemble complexe de validation. Cependant, si vous utilisez une fonction 3D, chacun des éléments 2D dont vous disposez est considéré comme des éléments 3D et nous pouvons effectuer une transformation matricielle sur ces éléments à la volée. Cependant, la plupart des éléments sont déjà "techniquement" accélérés par le matériel car ils utilisent tous le GPU. Mais, les transformations 3D fonctionnent directement sur les versions mises en cache de chacun de ces rendus 2D (ou versions mises en cache du div
) et utilisent directement une transformation matricielle sur elles (qui sont vectorisées et parallélisées FP mathématiques).
Il est important de noter que les transformations 3D apportent UNIQUEMENT des modifications aux entités d'un div 2D mis en cache (en d'autres termes, le div est déjà une image rendue). Ainsi, des choses comme changer la largeur et la couleur de la bordure ne sont plus "3D" pour être vaguement parlant. Si vous y réfléchissez, la modification de la largeur des bordures vous oblige à restituer le div
car et à le remettre en cache afin que les transformations 3D puissent être appliquées.
J'espère que cela a du sens et faites-moi savoir si vous avez d'autres questions.
Pour répondre à votre question, translate3d: 0x 0y 0z
ne ferait rien puisque les transformations travaillent directement sur la texture qui est formée en exécutant les sommets du div
dans le shader GPU. Cette ressource shader est maintenant mise en cache et une matrice sera appliquée lors du dessin sur le frame buffer. Donc, fondamentalement, il n'y a aucun avantage à faire cela.
C'est ainsi que le navigateur fonctionne en interne.
Étape 1: analyser l'entrée
<div style = "position:absolute;left:0;right:0;bottom:0;top:0;"></div>
Étape 2: Développer une couche composite
CompositeLayer compLayer = new CompositeLayer();
compLayer.setPosition(0, 0, 0, 0);
compLayer.setPositioning(ABSOLUTE);
Pipeline.add(compLayer, zIndex);
Étape 3: Rendu de la couche composite
for (CompositeLayer compLayer : allCompositeLayers){
Texture2D cacheTexture = new Texture2D();
cacheTexture.setActive();
Pipeline.renderVertices(compLayer.getVertices());
Pipeline.setTexture(compLayer.getBackground());
Pipeline.drawIndexed(compLayer.getVertexCount());
frameBuffer.setActive();
Pipeline.renderFromCache(cacheTexture, transformMatrix);
}