Burada bunu açıklayan bir cevap görmedim. Her biri div
ve seçeneklerinin karmaşık bir doğrulama seti kullanılarak hesaplanmasıyla birçok dönüşüm yapılabilir . Ancak, bir 3B işlevi kullanırsanız, sahip olduğunuz 2B öğelerin her biri 3B öğeler olarak kabul edilir ve bu öğeler üzerinde anında bir matris dönüşümü gerçekleştirebiliriz . Ancak, öğelerin çoğu "teknik olarak" zaten donanım hızlandırılmış durumdadır çünkü hepsi GPU'yu kullanır. Ancak, 3B dönüştürmeler doğrudan bu 2B işlemelerin (veya önbelleğe alınmış sürümlerinin) her birinin önbelleğe alınmış sürümlerinde çalışır div
ve üzerlerinde doğrudan bir matris dönüşümü kullanır (bunlar vektörleştirilmiş ve paralelleştirilmiş FP matematiğidir).
3B dönüştürmelerin YALNIZCA önbelleğe alınmış bir 2B div üzerindeki özelliklerde değişiklik yaptığına dikkat etmek önemlidir (başka bir deyişle, div zaten oluşturulmuş bir görüntüdür). Bu nedenle, sınır genişliğini ve rengini değiştirmek gibi şeyler artık belirsiz bir şekilde konuşmak için "3B" değildir. Düşünürseniz, kenarlık genişliklerini değiştirmek, div
nedeni yeniden oluşturmanızı ve 3B dönüştürmelerin uygulanabilmesi için yeniden önbelleğe almanızı gerektirir .
Umarım bu mantıklıdır ve başka sorunuz olursa bize bildirin.
Sorunuza cevap vermek için translate3d: 0x 0y 0z
hiçbir şey yapmazsınız, çünkü dönüşümler doğrudan div
GPU gölgelendiricisinin köşelerini çalıştırarak oluşturulan doku üzerinde çalışır . Bu gölgelendirici kaynağı artık önbelleğe alındı ve çerçeve arabelleğine çizim yapılırken bir matris uygulanacak. Yani, temelde bunu yapmanın bir faydası yok.
Tarayıcının dahili olarak çalışması budur.
Adım 1: Girişi Ayrıştırma
<div style = "position:absolute;left:0;right:0;bottom:0;top:0;"></div>
Adım 2: Kompozit Katman Geliştirin
CompositeLayer compLayer = new CompositeLayer();
compLayer.setPosition(0, 0, 0, 0);
compLayer.setPositioning(ABSOLUTE);
Pipeline.add(compLayer, zIndex);
3. Adım: Kompozit Katmanı Oluşturun
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);
}