কী ওয়েবেকিট-ট্রান্সফর্ম: অনুবাদ 3 ডি (0,0,0); ঠিক তাই না? শরীরে প্রয়োগ করবেন?


89

কি -webkit-transform: translate3d(0,0,0); ঠিক হবে? এটির কার্য সম্পাদনের কোনও সমস্যা আছে? আমি কি কেবল এটি শরীর বা স্বতন্ত্র উপাদানগুলিতে প্রয়োগ করব? মনে হচ্ছে এটি স্ক্রোল ইভেন্টগুলিকে মারাত্মকভাবে উন্নতি করবে।

পাঠের জন্য ধন্যবাদ!


4
উত্তরগুলি কী অনুপস্থিত: এটি x-, y- এবং z-axis- তে 0 পিক্সেল দ্বারা উপাদানটি অনুবাদ করে। ;)
সন্নিবেশকারী নাম এখানে

এটির ফন্ট রেন্ডারিংয়ের উপরও প্রভাব রয়েছে, বিশেষত বড় আকারের ফন্টের আকারগুলিতে। অন্যথায় মসৃণ প্রান্তগুলি আবার এলিয়াস প্রদর্শিত হয়। ব্রাউজার বা অপারেটিং সিস্টেম নির্দিষ্ট হতে পারে, 7. উইন্ডোজ ক্রোম 33 এ এই পরিলক্ষিত
patrickj

4
@ translate3d(0,0,0)পেট্রিকজ আমি উইন্ডোজ on. এর ক্রোম ৩৩ (৩৩.০.১750০.১১১ মি) এর সাথে কিছুটা আলাদা আচরণ লক্ষ্য করা শুরু করেছি এটি আমার একটি উপাদানকে অদৃশ্য করে তোলে, তাই আমি এটিকে সরিয়ে দিয়েছি।
ডেভিড শেরেট

4
ভবিষ্যতের রেফারেন্সের জন্য: will-changeএইচটিএমএল উপাদানটিকে তার নিজস্ব স্তরের মধ্যেও আলাদা করবে। বিকাশকারী.মোজিলা.আর । হ্যাক will-changeপ্রতিস্থাপন করবে -webkit-transform:translate3d(0,0,0)
জেসন লিডন

* সিএসএস নির্বাচকের সাথে এটি ব্যবহার করবেন না আমার সমস্ত লিঙ্কগুলি নিষ্ক্রিয় হয়ে গেছে :)
স্টিফান

উত্তর:


113

-webkit-transform: translate3d(0,0,0); কিছু ডিভাইস তাদের হার্ডওয়্যার ত্বরণ চালায়।

একটি ভাল পঠিত পাওয়া যায় এখানে

নেটিভ অ্যাপ্লিকেশনগুলি পিক্সেলগুলি ওড়াতে ডিভাইসের গ্রাফিকাল প্রসেসিং ইউনিট (জিপিইউ) অ্যাক্সেস করতে পারে। অন্যদিকে, ওয়েব অ্যাপ্লিকেশনগুলি, ব্রাউজারের প্রসঙ্গে চালিত হয়, যা সফ্টওয়্যারটি রেন্ডারিংয়ের সর্বাধিক (সমস্ত না থাকলে) করতে দেয়, ফলে রূপান্তরের জন্য কম অশ্বশক্তি হয়। তবে ওয়েবটি ধরা পড়েছে, এবং বেশিরভাগ ব্রাউজার বিক্রেতারা এখন নির্দিষ্ট সিএসএস বিধি দ্বারা গ্রাফিকাল হার্ডওয়্যার ত্বরণ সরবরাহ করে।

ব্যবহারের -webkit-transform: translate3d(0,0,0);ফলে জিপিইউকে সিএসএস রূপান্তরগুলির জন্য কার্যকর করা হবে, এগুলি মসৃণ করা হবে (উচ্চতর এফপিএস)।

দ্রষ্টব্য: আপনি যা translate3d(0,0,0) দেখেন সে অনুসারে কিছুই করে না। এটি অবজেক্টটিকে x, y এবং z অক্ষে 0px দ্বারা সরায়। এটি কেবল একটি হার্ডওয়্যার ত্বরণকে বাধ্য করার কৌশল।


একটি বিকল্প হয় -webkit-transform: translateZ(0)। এবং যদি রূপান্তরগুলির কারণে ক্রোম এবং সাফারিগুলিতে ঝাঁকুনি থাকে তবে চেষ্টা করুন -webkit-backface-visibility: hiddenএবং -webkit-perspective: 1000। আরও তথ্যের জন্য এই নিবন্ধ পড়ুন ।


ক্যাশেড টেক্সচারে ম্যাট্রিক্স ট্রান্সফর্ম প্রয়োগ করা সত্যিই উপকারের উন্নতি করবে কিনা তা আমি নিশ্চিত নই। বিষয়বস্তু ক্যাশেড টেক্সচার থেকে ফ্রেমবাফারে সরানো হলে ট্রান্সফর্মটি জটিল ক্রিয়াকলাপের জন্য কর্মক্ষমতা বাড়িয়ে তুলবে, তবে সাধারণ রঙের ইভেন্টগুলির জন্য কোনও উপকার করবে না। এটি কোনও ক্ষতি করবে না বা কোনও উপকারও করবে না। আমি ভুল হলে আমাকে সংশোধন করবেন?
ম্যাথিউ কুরিয়ান

আমি মনে করি এমনকি সাধারণ রঙগুলিও ত্বরান্বিত হবে .. স্তর তৈরির মানদণ্ডগুলির মধ্যে একটি হ'ল "3 ডি বা দৃষ্টিভঙ্গি সিএসএস বৈশিষ্ট্যগুলিকে রূপান্তর"।
যোতম ওমর

উদাহরণস্বরূপ, বুটস্ট্র্যাপের কারাউসেল এটি ব্যবহার করছে, প্রদর্শিত চিত্রটিকে ডান বামে সরানোর সময়।
ইথান

@ ইয়টামওমর আমরা কীভাবে এইচ / ডাব্লু এক্সিলারেটরে জড়িত থাকতে ট্রান্সলেট জেড (0) বা স্কেল 3 ডি (1,1,1) ব্যবহার করতে পারি?
ইথান

4
@Ethan হ্যাঁ, অনুযায়ী এই উভয় কাজ করা উচিত। আমি কেবল 3 ডি রূপান্তর সম্পর্কে জানতাম তবে স্পষ্টতই translateZবেশিরভাগ ব্রাউজারগুলিতেও কৌশলটি করা হবে।
ইয়োটাম ওমর

12

আমি এখানে এমন কোনও উত্তর দেখিনি যা এটি ব্যাখ্যা করে। divবৈধতার জটিল সেট ব্যবহার করে প্রতিটি এবং এর বিকল্পগুলির গণনা করে প্রচুর রূপান্তর করা যায় । তবে আপনি যদি 3 ডি ফাংশন ব্যবহার করেন তবে আপনার 2D উপাদানগুলির প্রত্যেককে 3 ডি উপাদান হিসাবে বিবেচনা করা হয় এবং আমরা ফ্লাইতে এই উপাদানগুলিতে একটি ম্যাট্রিক্স রূপান্তর করতে পারি । তবে, বেশিরভাগ উপাদানগুলি "প্রযুক্তিগতভাবে" ইতিমধ্যে হার্ডওয়্যারকে ত্বরান্বিত করে কারণ তারা সমস্ত জিপিইউ ব্যবহার করে। তবে, 3 ডি রূপান্তরগুলি 2D রেন্ডারগুলির প্রতিটি (বা এর সংস্করণে ক্যাশেড সংস্করণগুলির) ক্যাশেড সংস্করণগুলিতে সরাসরি কাজ করেdiv ) সরাসরি কাজ করে এবং সরাসরি তাদের উপর একটি ম্যাট্রিক্স রূপান্তর ব্যবহার করে (যা ভেক্টরাইজড এবং সমান্তরাল এফপি গণিত)।

এটি লক্ষণীয় গুরুত্বপূর্ণ যে 3 ডি রূপান্তর কেবলমাত্র ক্যাশেড 2 ডি ডিভি-র বৈশিষ্ট্যগুলিতে পরিবর্তন করে (অন্য কথায়, ডিভটি ইতিমধ্যে রেন্ডার করা চিত্র)। সুতরাং, সীমানার প্রস্থ এবং রঙ পরিবর্তন করার মতো জিনিসগুলি এখন "3 ডি" অস্পষ্টভাবে বলার মতো নয়। আপনি যদি এটির বিষয়ে চিন্তা করেন তবে সীমানা প্রস্থের পরিবর্তনের জন্য আপনাকে পুনরায় divরেন্ডার করতে হবে এবং এটিকে পুনরায় সংযুক্ত করতে হবে যাতে থ্রিডি রূপান্তরগুলি প্রয়োগ করা যেতে পারে।

আশা করি এটি বোধগম্য হয় এবং আপনার আরও কোনও প্রশ্ন থাকলে আমাকে জানান।

আপনার কোয়েশনটির উত্তর দেওয়ার জন্য, জিপিইউ শ্যাডারে translate3d: 0x 0y 0zউল্লম্ব অংশ চালিয়ে গঠিত টেক্সচারটিতে রূপান্তরগুলি সরাসরি কাজ করে বলে কিছুই করবে না div। এই শেডার রিসোর্সটি এখন ক্যাশে করা হয়েছে এবং ফ্রেম বাফারের উপর অঙ্কনের সময় একটি ম্যাট্রিক্স প্রয়োগ করা হবে। সুতরাং, মূলত এটি করে কোনও লাভ নেই।

ব্রাউজারটি এভাবে অভ্যন্তরীণভাবে কাজ করে।

পদক্ষেপ 1: পার্স ইনপুট

<div style = "position:absolute;left:0;right:0;bottom:0;top:0;"></div>

পদক্ষেপ 2: সম্মিলিত স্তর বিকাশ করুন

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.

পদক্ষেপ 3: যৌগিক স্তর রেন্ডার করুন

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);
}

6

মোবাইলসফারিতে (আইওএস 5) স্ক্রোলিংয়ের সাথে একটি ত্রুটি রয়েছে যা স্ক্রোলিং ধারকটিতে ইনপুট উপাদানগুলির অনুলিপি হিসাবে নিদর্শনগুলিতে প্রদর্শিত হয়।

প্রতিটি সন্তানের উপাদানের জন্য ট্রান্সলেট 3 ডি ব্যবহার করা সেই বিজোড় বাগটি ঠিক করতে পারে। সিএসএসের একটি উদাহরণ যা আমার জন্য দিনটি বাঁচিয়েছিল।

.scrolling-container {
    overflow: auto;
    -webkit-overflow-scrolling: touch;
}

.scrolling-container .child-element {
    position: relative;
    -webkit-transform: translate3d(0,0,0);
}

5

Translate3D বাহিনী হার্ডওয়্যার ত্বরণ সিএসএস অ্যানিমেশন, বদলে দেয় এবং ট্রানজিশন স্বয়ংক্রিয়ভাবে নয় জিপিইউ ত্বরান্বিত এবং এর পরিবর্তে ব্রাউজারের ধীর সফ্টওয়্যার রেন্ডারিং ইঞ্জিন থেকে কার্যকর করা হয় GP জিপিইউ ব্যবহার করার জন্য আমরা অনুবাদ 3d ব্যবহার করি

বর্তমানে, ক্রোম, ফায়ারফক্স, সাফারি, আইই 9 + এবং অপেরার সর্বশেষ সংস্করণগুলির মতো সমস্ত ব্রাউজারগুলি হার্ডওয়্যার ত্বরণ নিয়ে আসে, তারা কেবল তখনই এটি ব্যবহার করে যখন কোনও ডওম উপাদান এটির দ্বারা উপকৃত হবে এমন ইঙ্গিত পাওয়া যায়।


3

সচেতন থাকুন যে এটি একটি স্ট্যাকিং প্রসঙ্গ তৈরি করে (প্লাস অন্যান্য উত্তরগুলি যা বলেছিল) তাই এটি যা দেখেন তার উপর এর সম্ভাব্য প্রভাব রয়েছে, যেমন কোনও কিছু যখন ওভারলেতে প্রদর্শিত হবে এমনটি করা উচিত নয় যখন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.