কখন একটি শীর্ষবিন্দু অ্যারে ব্যবহার করবেন এবং কখন একটি ভিবিও ব্যবহার করবেন?


14

আমি ভার্টেক্স অ্যারে এবং ভার্টেক্স বাফার অবজেক্ট সম্পর্কে জানার চেষ্টা করছি , তবে আমি এইগুলির মধ্যে পার্থক্যগুলি বুঝতে পারি না:

  • কেস-অফ-ব্যবহার (টেরিনের মতো স্থির জ্যামিতি, জ্যামিতি যা প্রতিটি ফ্রেমকে একটি কণার সিস্টেমের মতো পরিবর্তন করে ইত্যাদি))
  • কর্মক্ষমতা
  • বহনযোগ্যতা (পুরানো গ্রাফিক্স কার্ড, কনসোলস, অ্যান্ড্রয়েড বা আইফোনের মতো ডিভাইস ইত্যাদি)

কিছু ব্যাখ্যা?


3
যে এখানে আসে অন্য কেউ বের চেক সবচেয়ে আপ এখানে উত্তর ভোট দিয়েছেন .... stackoverflow.com/questions/430555/...
afuzzyllama

উত্তর:


14

এখানে ভিবিও সম্পর্কে একটি শালীন লেখার ব্যবস্থা রয়েছে।

কর্মক্ষমতা

এখানে কলিং শব্দার্থবিজ্ঞানের একটি ভাল ওভারভিউ রয়েছে।

এখানে পারফরম্যান্স সম্পর্কিত সমস্যাগুলির আরও একটি ভাল ওভারভিউ রয়েছে; এতে আমরা দেখতে পাই যে ভিবিওরা অ্যারের চেয়ে বেশি পারফরম্যান্ট।

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

ব্যবহার

ভিবিওগুলি স্থিতিক জ্যামিতির মতো ভূখণ্ডের মতো সত্য যা আপনি পরিবর্তনের প্রত্যাশা করেন না বা উদাহরণস্বরূপ জ্যামিতির জন্য খুব ভাল।

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

পোর্টেবিলিটি

ক্লায়েন্ট সাইড ভার্টেক্স অ্যারেগুলি এগুলি ওপেনগিএল-এ 3.0 এর পূর্বে উপলভ্য, 3.0 এ অবমানিত, এবং 3.1+ এ গেছে। ওপেনজিএল ইএস তাদের সমর্থন করে (ওপেনজিএল ইএস 2 এটি করে না)।

ভিবিওগুলি ওপেনজিএল 1.5 এর পরে পাওয়া যায়। ওপেনজিএল ইএস 2 (এবং তাই, ওয়েবজিএল) এ জ্যামিতি ডেটা সঞ্চয় করার একমাত্র উপায়।


2
পারফরম্যান্সটিউনিং.পিডিএফ-তে, এটি বলেছে যে ভিবিওগুলি "অপ-অনুকূল ক্ষেত্রে পারফরম্যান্সকে ক্ষতি করতে পারে" ... তবে এটি বিস্তারিতভাবে বলা যায় না। এই মামলাগুলি কি কোন ধারণা? আমার একটি কেস আছে যেখানে আমার জ্যামিতিটি প্রতিটি ফ্রেমে আপডেট করা দরকার, তাই আমি ভাবছি যে কোনও ভার্টেক্স অ্যারে সেই ক্ষেত্রে কোনও ভিবিওর চেয়ে ভাল বা খারাপ হবে। ধন্যবাদ.
পাশেরউইঞ্জুই

1
পড়া opengl.org/sdk/docs/man/xhtml/glDrawElements.xml এবং opengl.org/wiki/GlDrawElements - প্রান্তবিন্দু অ্যারেগুলির অবচিত কিংবা মুছে নয়, তারা এখনও যেমন OpenGL 4.x হিসাবে সমর্থিত; আপনার বিষয়গুলি সোজা হয়ে

1
@ ভ্যাক্সকুইস ক্লায়েন্টের দিকের ভার্টেক্স অ্যারেগুলি হ্রাস করা হয়েছে। সার্ভারের দিকের ভার্টেক্স অ্যারেগুলি নেই। ভিএওগুলি আলাদা জিনিস এবং রাষ্ট্র বাঁচানোর উদ্দেশ্যে বোঝানো হয়। পোস্টে কিছুই ভুল ছিল না, যদিও এটি ক্লায়েন্টের পক্ষ থেকে জানানো হলে আরও সঠিক হতে পারে। তবে আমার ধারণা এটি অন্তর্নিহিত ছিল।
ধারণা

1
"ক্লায়েন্টের পার্শ্বের ভার্টেক্স অ্যারেগুলি অবচিত করা হয়েছে Server সার্ভারের দিকের ভার্টেক্স অ্যারেগুলি নেই" " "ভার্টেক্স অ্যারেগুলি এগুলি ওপেনগিএল-এ 3.0 এর আগে পাওয়া যায়, 3.0 এ অবমানিত, এবং 3.1+ এ গেছে" " "আপনি উল্লম্ব পৃথক অ্যারেগুলি পূর্বনির্ধারিত করতে পারেন (...) এবং এটিকে একক কল দিয়ে আদিম অনুক্রমের গ্লড্রাওএলিমেন্টে তৈরি করতে ব্যবহার করতে পারেন version.৪ সংস্করণে কোর" - আমি এই বিবৃতিগুলিতে বৈপরীত্য দেখছি।

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

11

(আমি এখানে ক্রিসের উত্তরটি অত্যন্ত অস্পষ্টের কারণে এটিকে যুক্ত করছি, যা দুর্ভাগ্যবশত মূল প্রশ্নের দ্ব্যর্থহীনতার কারণে However তবে আমি ধরে নিতে চলেছি ওপি-র প্রশ্নের শিরোনামটি হওয়া উচিত ছিল " ভিএওগুলি কখন ব্যবহার করতে হবে ) এবং কখন ভিবিও ব্যবহার করবেন "।)

ভী ertex বি uffer হে bjects (যা সত্যিই না অন্যান্য ধরনের থেকে বিসদৃশ বি uffer হে bjects, উদাহরণস্বরূপ ইউ niform বি uffer হে bjects) গ্রাফিক্স হার্ডওয়্যারে আপলোড প্রান্তবিন্দু ডেটার জন্য একটি উপায় প্রদান করে।

V ertex A rray O bjects টি VBO গুলি ছাড়াও ক্লায়েন্ট-সাইড (সিপিইউ-সাইড) পারফরম্যান্সের উন্নতি করতে ব্যবহৃত হবে, প্রতিটি বারের মতো প্রতিটি ভার্টেক্স বাফারকে পুনর্নির্মাণের জন্য প্রয়োজনীয় কলগুলির সংখ্যা হ্রাস করে এবং আপনি যখনই চান প্রতিটি পৃষ্ঠার বৈশিষ্ট্য পুনরায় সেট করতে পারেন একটি নির্দিষ্ট উপায়ে রেন্ডার পরিবর্তন। প্রতিটি ফ্রেমে সমস্ত কাজ করার পরিবর্তে, আপনি এটি একবার (আরম্ভের সময়) করুন, এবং তারপরে প্রতিটি প্রচ্ছন্ন অঙ্কনের কল (গুলি) এর জন্য উপযুক্ত ভিএও পুনরায় প্রত্যাবর্তন করুন যা সম্পর্কিত ভার্টেক্স গুণাবলী ব্যবহার করে।

এই স্বত্তেও, ব্যবহার VAOs করতে থাকার অতিরিক্ত দায়িত্ব থেকে প্রকাশ করে না glBindBuffer+ + glBufferDataযে কোনো ডেটার জন্য পরিবর্তন প্রতিটি ফ্রেম, উদাহরণস্বরূপ, খেলা সত্তা অবস্থানের / ঘুর্ণন / রুপান্তর ম্যাট্রিক্স জন্য। আপনার যখন সম্পূর্ণ স্থিতিশীল ডেটা থাকে কেবল তখনই আপনাকে glBindVertexArray(&vao) -> glDraw*(...) -> glBindVertexArray(0)রেন্ডার করতে হয়।


+1 ভিএও একটি ভয়ঙ্কর এবং বিভ্রান্তিমূলক নাম এবং এটি সর্বদা আমাকে একটি গোলমাল ওপেনজিএল কী হয়ে গেছে তা স্মরণ করিয়ে দেয়।
ধারণাগুলি

1
আমার মনে আছে এই প্রশ্নটি সম্পর্কিত একটি আলোচনা নিয়ে যাওয়া হয়েছে (এর বেশিরভাগটি মুছে ফেলা হয়েছিল)। আবার সমস্যাটি ওপেনজিএলের ভয়ঙ্কর পরিভাষা নিয়ে। আমি আরও নির্ভুল হওয়ার জন্য ক্রিস উত্তরটি সম্পাদনা করেছি।
ধারণা 3 ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.