Non ho trovato qui una risposta che spieghi questo. È possibile eseguire molte trasformazioni calcolando ciascuna delle div
e le relative opzioni utilizzando un complesso set di convalida. Tuttavia, se si utilizza una funzione 3D, ciascuno degli elementi 2D che si hanno sono considerati come elementi 3D e possiamo eseguire una trasformazione della matrice su questi elementi al volo. Tuttavia, la maggior parte degli elementi sono "tecnicamente" già accelerati dall'hardware perché usano tutti la GPU.Tuttavia, le trasformazioni 3D funzionano direttamente sulle versioni cache di ciascuno di questi rendering 2D (o versioni memorizzate nella cache di div
) e utilizzano direttamente una trasformazione di matrice su di essi (che sono la matematica FP vettoriale e parallelizzata).
È importante notare che le trasformazioni 3D SOLO apportano modifiche alle funzionalità su un div 2D memorizzato nella cache (in altre parole, il div è già un'immagine renderizzata). Quindi, cose come cambiare la larghezza del bordo e il colore non sono più "3D" per essere vagamente parlando. Se ci pensate, cambiando le larghezze del bordo è necessario rerenderne lo div
perché lo memorizziate in modo da poter applicare le trasformazioni 3D.
Spero che questo abbia senso e fammi sapere se hai altre domande.
Per rispondere alla vostra domanda, translate3d: 0x 0y 0z
non farebbe nulla poiché le trasformazioni funzionano direttamente sulla trama che si forma eseguendo i vertici dello div
nello shader GPU. Questa risorsa shader è ora memorizzata nella cache e verrà applicata una matrice quando si disegna sul frame buffer. Quindi, fondamentalmente non c'è alcun beneficio nel farlo.
Ecco come funziona il browser internamente.
Fase 1: Parse ingresso
<div style = "position:absolute;left:0;right:0;bottom:0;top:0;"></div>
Fase 2: Sviluppare strato composito
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.
Fase 3: Render strato composito
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);
}
Cosa mancano le risposte: in realtà traduce l'elemento di 0 pixel sull'asse x, yez. ;) – insertusernamehere
Ha anche un impatto sul rendering dei font, soprattutto visibile su caratteri di grandi dimensioni. Altrimenti, i bordi lisci appaiono di nuovo alias. Potrebbe essere Browser o OS specifici, osservato in Chrome 33 su Windows 7. – patrickj
@patrickj Ho anche iniziato a notare un comportamento leggermente diverso con 'translate3d (0,0,0)' su Chrome 33 (33.0.1750.117m) su Windows 7. Ha reso invisibile uno dei miei elementi, quindi l'ho rimosso. –