ওপেনজিএল: ভিবিও বা গিলবেগিন () + গিল্যান্ড ()?


16

আমাকে সম্প্রতি এমন একজনের কাছ থেকে একটি টিউটোরিয়াল সাইটে এই লিঙ্কটি দেওয়া হয়েছিল যাকে আমি আসল ওজিএল রেডবুক দিয়েছি। তৃতীয় শিরোনাম নীচে টিপিক্যাল রেন্ডার পদ্ধতি হিসাবে glBegin () এবং glEnd () ভুলে যাওয়ার জন্য পৃথকভাবে বলে says আমি রেডবুকের পদ্ধতির মাধ্যমে শিখেছি, তবে আমি ভিবিওগুলিতে কিছু সুবিধা দেখতে পাচ্ছি। এটি কি সত্যিই যাওয়ার উপায়, এবং যদি তাই হয় তবে সহজেই রেন্ডার কোড এবং তারপরে শেডারগুলি ভিবিও এবং পরবর্তী ডেটাটাইপগুলিতে রূপান্তর করার কোনও উপায় আছে কি?

উত্তর:


27

আধুনিক ওপেনএল-এর ভিবিও'র উপায় হ'ল, ফিক্সড ফাংশন স্টাফগুলি (গ্লোব্যাগিন / গ্ল্যান্ড এবং এর মধ্যে থাকা স্টাফ সহ) 3.0 এর পরে অবহেলা করা হয়েছে এবং 3.1 থেকে অপসারণ করা হয়েছে।

ওপেনজিএল কোর প্রোফাইল, ওপেনজিএল ইএস 2.0+ এবং ওয়েবজিএল সহ আপনার পুরানো স্টাফ পর্যন্ত অ্যাক্সেস নেই।

কিছু লোক মনে করেন পুরানো জিনিসগুলি প্রথমে শেখা আরও ভাল কারণ এটি কিছুটা সহজ, তবে আপনি যে জিনিসগুলি শিখেন তা বেশিরভাগই অকেজো এবং তারপরে যে জিনিসগুলি আপনি শিখতে হবে তা নয়।

এটি কেবল ভিবিওর নয়, আপনাকে সমস্ত কিছুর জন্য শেডার ব্যবহার করতে হবে এবং ম্যাট্রিক্স নিজেকে রূপান্তর করতে হবে (বা জিএলএম ব্যবহার করুন)।

আপনি যদি 2.0 এর আগে ওপেনএল লক্ষ্য করতে চান তবে পুরানো জিনিসগুলি ব্যবহারের একমাত্র কারণ। যা ২০০৩ সালে ফিরে প্রকাশিত হয়েছিল। কয়েকটি সত্যই ক্রেপি এম্বেড করা নেটবুক চিপসেট রয়েছে যা 1.5 হয় তবে 1.5 এর মধ্যে ভিবিওগুলিকে সমর্থন করা উচিত কেবল শেডার নয়। বা ওপেনজিএল ইএস 1.x যা স্থির ফাংশন পাইপলাইনের উপর ভিত্তি করে (উদাহরণস্বরূপ এটি পুরানো আইফোনে ব্যবহৃত হয়)। বা ওপেনজিএল এসসি (সুরক্ষা সমালোচনামূলক সিস্টেমগুলির জন্য)।

নিম্নলিখিত সাধারণভাবে ব্যবহৃত ফাংশনগুলি সমস্ত হ্রাস করা হয়:

  • glBegin
  • glEnd
  • glVertex *
  • glNormal *
  • glTextCoord *
  • glTranslate *
  • glRotate *
  • glScale *
  • glLoadIdenity
  • glModelViewMatrix

Opengl-tutorial.org টিউটোরিয়াল কি আমি মনে করি যেমন OpenGL শেখার সম্পর্কে যেতে ভাল উপায় আছে। তারা কিছু উত্তরাধিকারের তুলনামূলক জিনিসগুলির উপর নির্ভর করে তবে তারা আসলে এটি আপনাকে শেখায় না। উদাহরণস্বরূপ আপনার শেডার ছাড়া কোনও কিছু রেন্ডার করার কথা নয় তবে এটি কাজ করে। এবং আপনাকে নিজেরাই ম্যাট্রিকেস অপারেশনগুলি (ঘোরানো, অনুবাদ করা ইত্যাদি) পরিচালনা করতে হবে তবে ডিফল্টরূপে আপনি একটি বেসিক ফ্ল্যাট 2 ডি ভিউপোর্ট পাবেন।

অবহেলিত স্টাফ এড়ানো ছাড়াও এমন অনেকগুলি ক্রিয়াকলাপ রয়েছে যা ওপেনএলকে কোডিংকে আরও ভাল করে তোলে তবে তাদের অনেকের সাথেই আপনি সিদ্ধান্ত নিতে হবে যে আপনি ওপেনএলএল এর নতুন 3.x + সংস্করণ এবং সামঞ্জস্যপূর্ণ হার্ডওয়্যার প্রয়োজন বোধ করেন ঠিক আছে কিনা।

আমি এখানে তৈরি একটি পোস্টে আরও তথ্য আছে

যদি কোনও কারণে আপনাকে পুরানো ওপেনজিএল সমর্থন করার প্রয়োজন হয়, আপনি যখন সম্ভব তখন ভিবিও ব্যবহার করতে পারেন এবং যখন এটি না হয়, তখন একটি ফ্যালব্যাক সরবরাহ করুন যা গ্লোবেগিন / গ্ল্যান্ড ব্যবহার করে এবং আপনার ভার্টেক্স ডেটা জুড়ে লুপ করবে।

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


7

ভিবিওগুলির সাথে আপনার সাধারণত দুটি বড় সুবিধা রয়েছে।

সুবিধা 1 সম্পূর্ণ স্থিতিশীল ডেটার সাথে সম্পর্কিত এবং জিপিইউর জন্য আরও অনুকূল যে মেমরিতে আপনার ভার্টেক্স ডেটা রাখতে সক্ষম হওয়া থেকে আসে।

সুবিধা 2 ডায়নামিক ডেটার সাথে সম্পর্কিত এবং রেন্ডারিংয়ের জন্য এটি ব্যবহারের আগে যে কোনও সময় আপনার ভার্টেক্স তথ্যটি নির্দিষ্ট করতে সক্ষম হওয়া থেকে আসে, যা পাইপলাইন আরও ভাল করতে পারে।

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

একটি ভাল (100% সঠিক নয় তবে আপনাকে ধারণাটি পেতে সহায়তা করার জন্য যথেষ্ট) এর সাদৃশ্যটি হ'ল আপনি যদি এমন এক বাস চালক হন যিনি 50 জন লোককে এক শহর থেকে অন্য শহরে নিয়ে আসতে হয়। আপনি এগুলি একবারে লোড করতে পারেন এবং 50 টি পৃথক ট্রিপ করতে পারেন - এটি গ্লোব্যাগিন / গ্ল্যান্ড। বিকল্পভাবে আপনি তাদের 50 টিকে বাসে রেখে কেবল একটি একক ট্রিপ করতে পারেন - এটি ভার্টেক্স অ্যারে বা ভিবিওগুলির সাথে জড়িত (ভিবিওর ক্ষেত্রে 50 জন ইতিমধ্যে বাসে উঠত;))।

এটি যদিও দামে আসে এবং এখানে দামটি হ'ল যে আপনি যখন প্রয়োজন হবে ঠিক তখনই ভার্টেক্স তথ্য নির্দিষ্ট করার ক্ষমতা হারাবেন। ঠিক আছে, ঠিক আছে, আপনি এটি করতে পারেন (কিছু অতিরিক্ত কাজ সহ), তবে আপনি আপনার কোডটি থেকে পুরো সম্পাদনা পাবেন না। পরিবর্তে আপনার আপনার ভার্টেক্স ডেটা সম্পর্কে আরও চিন্তা করা দরকার, এটি কীভাবে ব্যবহৃত হয়, কীভাবে (এবং যদি) এটি আপডেট করার দরকার হয় তবে কোনও অ্যানিমেশন শেডারে করা যায় কিনা (এভাবে ডেটা স্থিতিশীল রাখতে সক্ষম করে - ভিবিওগুলিকে সত্যিকার অর্থে ছায়ার প্রয়োজন অ্যানিমেশনের অনেকগুলি কেস ভালভাবে কাজ করতে পারে) বা প্রতিটি ফ্রেমে আপনার ভার্টেক্স তথ্য উপাত্তের প্রয়োজন আছে কিনা, আধুনিক আপডেটগুলি কার্যকর দক্ষতার কৌশল ইত্যাদি আপনি যদি এটি না করেন এবং কেবল একটি নিষ্পাপ রূপান্তর বাস্তবায়ন করেন তবে আপনার ঝুঁকির ঝুঁকি খুব বেশি রয়েছে শুধুমাত্র শেষ ফলাফলের জন্য প্রচুর কাজ করতে আসলে ধীর গতিতে!

আপনি যখন প্রথম মুখোমুখি হয়েছিলেন তখন এটিকে এক ভয়াবহ কাজের মতো মনে হতে পারে, তবে বাস্তবে তা হয় না। একবার আপনি এই জাতীয় চিন্তাভাবনার মোডে উঠলে আপনি দেখতে পাবেন এটি অবিশ্বাস্যরকম সহজ এবং প্রায় প্রাকৃতিকভাবে আসে comes তবে আপনি আপনার প্রথম কয়েকটি প্রচেষ্টা চালিয়ে যেতে পারেন এবং যদি তাই হয় তবে আপনাকে নিরুৎসাহিত করা উচিত নয় - স্ক্রু আপ করা আপনার ভুলটি কী থেকে শিখার সুযোগ।

কয়েকটি চূড়ান্ত চিন্তা।

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

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

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

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