মূলত, 2D বিটম্যাপগুলি কীভাবে রেন্ডার করা হয়?


9

মনে করুন আমাদের কাছে একটি -৪-বিট শব্দ-ঠিকানাযোগ্য কম্পিউটার রয়েছে এবং আমরা এটি একটি বাইনারি চিত্র বিটম্যাপ হিসাবে সঞ্চিত একটি 5x7 অক্ষর (যেমন নীচের মতো) একটি মেমরি-ম্যাপযুক্ত ডিসপ্লেতে আউটপুট করতে প্রোগ্রাম করতে চাই।

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

যেহেতু আমাদের প্রতি অক্ষর 5 x 7 = 35 পিক্সেল রয়েছে, তাই আমরা একক শব্দে 35 বিট ব্যবহার করে একটি অক্ষর সংরক্ষণ করতে পারি। সঙ্গে অন্তত উল্লেখযোগ্য শব্দ বামদিকে এবং ইমেজ মধ্যে প্রতিটি পিক্সেল দিয়ে শুরু বিট দ্বারা প্রতিনিধিত্ব করা হচ্ছে এন উপরে দেখানো তম বিট সংখ্যা "3" উপরের মতো মেমরি সংরক্ষণ করা হবে: 01110100010000100110000011000101110, 29 অব্যবহৃত দ্বারা অনুসরণ বিট সেট 0।

পুরানো / আধুনিক কম্পিউটারগুলিতে অক্ষরগুলি কীভাবে / সংরক্ষণ করা হয়েছিল? অথবা এর পরিবর্তে তারা পিক্সেল প্রতি একক বাইট / শব্দ ব্যবহার করে?

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

  1. একটি নির্দিষ্ট রেজিস্টারে আপডেট হওয়ার জন্য বর্তমান পিক্সেলের জন্য এক্স এবং ওয়াই ডিসপ্লে সমন্বিত সঞ্চয় করুন।
  2. দুটি নির্বাচিত আরজিবি মান (এই ক্ষেত্রে সবুজ রঙের জন্য 0,255,0 এবং কালো জন্য 0,0,0) দুটি অন্য পৃথক রেজিস্টারে সংরক্ষণ করুন।
  3. চিত্রের বর্তমান সারি এবং কলামটি রেকর্ড করার জন্য আরও দুটি নিবন্ধক কাউন্টার হিসাবে 5 এবং 7-এ আরম্ভ করা হিসাবে কাজ করুন।
  4. কলামের রেজিস্টার যদি 0 হয় না তবে পরীক্ষা করুন যদি এটি না হয় তবে বিটম্যাপের এলএসবি 1 তে সেট করা আছে কিনা পরীক্ষা করুন এবং তারপরে ফলাফলের উপর নির্ভর করে এক্স এবং ওয়াই স্থানাঙ্কের রেজিস্ট্রারের সাথে সম্পর্কিত আরজিবি মান রেজিস্টার করুন, তারপরে ফলাফলটি এমওভি করুন প্রদর্শন আউটপুট রেজিস্টার।
  5. সারি কাউন্টার রেজিস্টারটি 1 দ্বারা হ্রাস করুন, এটি 0 হয় কিনা তা পরীক্ষা করে দেখুন, তবে এটি আবার 5 এ সেট করুন এবং y এর স্থানাঙ্ককে 1 দ্বারা বৃদ্ধি করুন এবং কলামের কাউন্টারটি 1 দ্বারা হ্রাস করুন।
  6. বামদিকে বিটম্যাপটি 1 বিট ধারণ করে নিবন্ধকটি স্থানান্তর করুন।
  7. জেএমপি নির্দেশনা 4।

এটি করার সহজ বা আরও কার্যকর উপায় আছে? দেখে মনে হচ্ছে এমনকি একটি ছোট ছোট পাঠ্য অক্ষরের রেন্ডারিংয়ের মতো সাধারণ কিছুও যথেষ্ট পরিমাণে ক্রিয়াকলাপ গ্রহণ করে এবং প্রায় 200 সিপিইউ চক্র গ্রহণ করতে পারে।

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


3
গ্রাফিক্স প্রোগ্রামিং ব্ল্যাক বুক অবশ্যই একটি ক্লাসিক মূল্য পড়া। এতে প্রচুর পুরাতন স্কুল ব্ল্যাক-ম্যাজিক;)
গ্ল্যাম্পার্ট

হ্যাঁ, আমি মাইকেল আবরাশের বইটি দ্বিতীয় করছি। এটি একটি মহান পঠিত. এই বইতে যা লেখা আছে সে সম্পর্কে আরও অনেক কৌশল রয়েছে তবে এর পেছনের দর্শন গুরুত্বপূর্ণ (এমনকি আজও!)
রোমেন পাইকোইস

উত্তর:


7

আপনাকে আপনার মেশিনের গ্রাফিক্স বোর্ডের পাঠ্য এবং গ্রাফিকাল মোডগুলি আলাদা করতে হবে।

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

আজকাল, একটি উচ্চ-রেজোলিউশন রাস্টার বাফার সরবরাহ করা হয়, যা পিক্সেল অ্যাক্সেসযোগ্য এবং আপনি কিছু সমর্থিত বিন্যাসে রঙের তথ্য লেখেন ("সর্বোচ্চ" মোডে, প্রতি পিক্সেল 3 বাইট (আরজিবি), একটি মেগাপিক্সেল বা আরও বেশি)।

মূলত, বিভিন্ন আকারের সিম্পল (প্যাকড) বাইনারি বিটম্যাপগুলি ব্যবহার করা হয়েছিল এবং সম্ভাব্য বিন্যাসের অনুবাদ সহ ডিভাইস ড্রাইভারের কাছে একটি অনুরোধের মাধ্যমে রাস্টার মেমরিতে " blittted " ব্যবহার করা হয়েছিল ।

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

রেন্ডার আউটপুট দ্রুত প্রদর্শনের জন্য আবার ব্লিট করে ক্যাশে করা যায়।

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


1

সংক্ষিপ্ত উত্তর হ্যাঁ, আপনার ফর্ম্যাটটির প্রয়োজন হলে আপনি অনেক বিট ম্যানিপুলেশন করা এড়াতে পারবেন না।

বিটম্যাপ আঁকার অর্থ মূলত কোনও উত্স থেকে গন্তব্যে একটি পিক্সেল অনুলিপি করা এবং আপনাকে এটি করতে যা করতে হবে তা করতে হবে। (ক্যাপ্টেন স্পষ্ট উদ্ধৃতি দিয়ে)

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

হ্যাঁ যাইহোক, পুরানো দিনগুলিতে একক পিক্সেল লেখার জন্য অনেকগুলি সিপিইউ চক্রটি টোক করা উচিত যখন অদ্ভুত এনকোডিং এবং ছোট মেমোরির আদর্শ ছিল। :-) তবে এটি 8 মেগাহার্টজ সিপিইউযুক্ত 16/32 বিট মেশিনকে এ জাতীয় কাজ করতে নিষেধ করেছিল: https://www.youtube.com/watch?v=GWwPJU6pp30 (এবং সিপিইউর একটি বড় অংশও ব্যবহৃত হয়েছিল সংগীত জন্য)

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

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