سؤال

أقوم ببرمجة تطبيق لـ معالج 32 بت وذاكرة محدودة (512 كيلو فلاش، 32 كيلو رام).

ال عرض على هذا الجهاز هو 128 × 160 مع لون 16 بت، والذي يستهلك عادةً 40 ألف ذاكرة وصول عشوائي إذا قمت بتخزينه مؤقتًا على المعالج الخاص بي.ليس لدي الكثير من ذاكرة الوصول العشوائي، لذلك أبحث عن تقنيات ونصائح وحيل وأفكار لإنشاء بيانات الشاشة بسرعة.

الأشياء التي قد تساعد:

  • ربما تعرف مصدرًا لهذا النوع من القيود
  • ربما تكون قد قمت بإنشاء رسومات جذابة أثناء التنقل
  • هل هناك خوارزمية عامة قد أستخدمها لدمج العناصر الموجودة في ذاكرة البرنامج (بما في ذلك مزج ألفا) أثناء قيامي بمسح الشاشة ضوئيًا
  • تقنيات عرض متجهات بسيطة (أو مصدر مجاني (bsd/mit/Apache))
  • ???

لدي مضاعف، ولكن لا يوجد معالج الفاصلة العائمة.تحتوي الشاشة نفسها على وحدة تحكم وذاكرة بسيطة جدًا للشاشة - لكن عمليات القراءة والكتابة باهظة الثمن، لذا لا أريد استخدام ذلك كمساحة عمل خاصة بي إذا كان بإمكاني تجنب ذلك.

-آدم

هل كانت مفيدة؟

المحلول

بطريقة ما، أنت تقريبًا في نفس الوضع الذي كان فيه مطورو الألعاب في وقت Tandys وSpectrums وأجهزة الكمبيوتر الشخصية المبكرة.لذا، إليك توصيتي:

عليك بقراءة كتابات مايكل أبراش عن رسومات الحاسوب.لقد تمت كتابتها في وقت كان فيه المعالج المشترك للفاصلة العائمة قطعة اختيارية من الأجهزة، وهي تصف الكثير من التقنيات الأساسية (خطوط بريسنهام، وما إلى ذلك) المستخدمة في الأيام القديمة التي تم تقديم البرامج فيها (التي يُفترض أنها "سيئة") .

يمكنك قراءة معظم كتابه "الكتاب الأسود" هنا.

بالإضافة إلى ذلك، ربما يمكنك العثور على الكثير من ملفات BBS القديمة التي استخدمها معظم الأشخاص في الماضي لتعلم برمجة الرسومات هنا.ما عليك سوى البحث عن الرسومات والخطوط وما لا.

امل ان يساعد!

تحديث: وأذكر أيضًا استخدام هذا في محاولاتي الأولى لرسم الأشياء على الشاشة.لا أستطيع معرفة مقدار الوقت الذي قضيته في محاولة فهم الرياضيات وراء ذلك (حسنًا، لكي أكون منصفًا، كان عمري 15 عامًا في ذلك الوقت).مقدمة جيدة جدًا (وبسيطة) للعرض ثلاثي الأبعاد، وعرض أول لطيف جدًا حول التحويلات وحشوات المضلعات والاستيفاء.

نصائح أخرى

ما نوع البيانات التي ستعرضها على الشاشة؟

إذا لم تكن صورًا فوتوغرافية، فيمكنك التفكير في استخدام لوحة الألوان.على سبيل المثال:تتطلب لوحة الألوان المكونة من 256 لونًا والتي تستخدم 8 بتات لكل بكسل 20 كيلو بايت (بالإضافة إلى 256 × 2 بايت لجدول البحث) وهو أفضل من 40 كيلو بايت على الأقل.

أعتقد أن الأسلوب الأساسي للتعامل مع هذا النوع من المواقف هو تقسيم الشاشة إلى خطوط أفقية ضيقة، وتخزين شريطين فقط في ذاكرة الوصول العشوائي.سيتم عرض شريط واحد، بينما تقوم بعرض الشريط التالي لأسفل.عندما يضرب "شعاع" المسح الشريط التالي (ويطلق مقاطعة لتلتقطها)، يمكنك تبديل الاثنين والبدء في رسم الشريط التالي لأسفل.

أحد الآثار الجانبية السيئة لهذا هو أن لديك صعب حدود التوقيت على المدة التي يمكنك إنفاقها على عرض كل شريط.لذا أعتقد أنه سيكون من المغري الاستمرار في شيء ممل ولكن بأداء يمكن التنبؤ به، مثل العفاريت.

خارج الموضوع قليلاً ولكن هذه هي الطريقة التي تعمل بها أجهزة Nintendo DS 3D.يمكنك رؤيته إذا حاولت عرض عدد كبير جدًا من المضلعات حول نفس الإحداثي y - ستومض المضلعات بشكل عشوائي وتنقطع عندما يتفوق تحديث الشاشة على أجهزة العرض.

أيضًا، أؤيد اقتراح الملصق الآخر بأن تستخدم العرض الملون.من الصعب جدًا إجراء عمليات حسابية سريعة على 16 بت بكسل، ولكن بشكل أسرع في 8 بت إذا كنت ذكيًا في كيفية تخطيط لوحة الألوان الخاصة بك.

بعض الأفكار التي من شأنها أن تجمع بين الرسومات الجميلة والذاكرة المنخفضة:

  • تخزين الخلفيات والعفاريت في فلاش.
  • قم بتخزين الرسومات التي تم إنشاؤها ديناميكيًا في ذاكرة الوصول العشوائي (RAM) باستخدام لوحة ألوان تصل إلى نصف البايتات.
  • استخدم ميزة النوافذ الخاصة ببرنامج تشغيل شاشة LCD لتحديث جزء الشاشة الذي تحتاج إليه فقط.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top