Tôi không thấy câu trả lời ở đây giải thích điều này. Rất nhiều phép biến đổi có thể được thực hiện bằng cách tính toán từng số div
và các tùy chọn của nó bằng cách sử dụng một bộ xác nhận hợp lệ phức tạp. Tuy nhiên, nếu bạn sử dụng chức năng 3D, mỗi phần tử 2D bạn có được coi là các phần tử 3D và chúng tôi có thể thực hiện chuyển đổi ma trận trên các thành phần này khi đang di chuyển. Tuy nhiên, hầu hết các yếu tố này "đã được" kỹ thuật "đã tăng tốc phần cứng vì tất cả chúng đều sử dụng GPU.Tuy nhiên, các biến đổi 3D hoạt động trực tiếp trên các phiên bản được lưu trong bộ nhớ cache của mỗi trình diễn 2D (hoặc các phiên bản được lưu trong bộ nhớ cache của div
) và trực tiếp sử dụng phép biến đổi ma trận trên chúng (được vector hóa và song song với toán FP).
Điều quan trọng cần lưu ý là chuyển đổi 3D CHỈ thực hiện thay đổi đối với các đối tượng địa lý trên div 2D được lưu trong bộ nhớ cache (nói cách khác, div đã là hình ảnh được hiển thị). Vì vậy, những thứ như thay đổi chiều rộng và màu của đường viền không còn "3D" để nói một cách mơ hồ nữa. Nếu bạn nghĩ về nó, việc thay đổi chiều rộng biên giới yêu cầu bạn phải trả lại div
vì và recache nó để các biến đổi 3D có thể được áp dụng.
Hy vọng điều này có ý nghĩa và cho tôi biết nếu bạn có thêm bất kỳ câu hỏi nào.
Để trả lời câu hỏi của bạn, translate3d: 0x 0y 0z
sẽ không làm gì vì các phép biến đổi hoạt động trực tiếp trên kết cấu được tạo thành bằng cách chạy các đỉnh của div
vào trình đổ bóng GPU. Tài nguyên shader này được lưu trữ và một ma trận sẽ được áp dụng khi vẽ lên bộ đệm khung. Vì vậy, về cơ bản không có lợi ích từ việc đó.
Đây là cách trình duyệt hoạt động trong nội bộ.
Bước 1: Phân tích Input
<div style = "position:absolute;left:0;right:0;bottom:0;top:0;"></div>
Bước 2: Xây dựng composite lớp
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.
Bước 3: Render composite lớp
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);
}
Câu trả lời nào bị thiếu: Nó thực sự dịch phần tử bằng 0 pixel trên trục x, y và z. ;) – insertusernamehere
Nó cũng có tác động đến hiển thị phông chữ, đặc biệt có thể nhìn thấy trên các cỡ chữ lớn. Nếu không, các cạnh mịn sẽ xuất hiện lại bí danh. Có thể là trình duyệt hoặc hệ điều hành cụ thể, quan sát thấy điều này trong Chrome 33 trên Windows 7. – patrickj
@patrickj Tôi cũng bắt đầu chú ý đến hành vi hơi khác với 'translate3d (0,0,0)' trên Chrome 33 (33.0.1750.117m) trên Windows 7. Nó làm cho một trong những yếu tố của tôi vô hình, vì vậy tôi đã gỡ bỏ nó. –