كيف يمكنني رسم بكسل كما الملمس لمضلع في OpenGL؟

StackOverflow https://stackoverflow.com/questions/664698

  •  21-08-2019
  •  | 
  •  

سؤال

في C ++ برنامج OpenGL، وأريد أن ألفت كل بكسل يدويا (كما الملمس أفترض) إلى بسيطة مربع البدائية، أو في الواقع 2 المضلعات تشكيل مربع.

وليس لدي أي فكرة من أين تبدأ، أو ما العبارات للبحث عن. أنا أبحث عن إكساء أو إنشاء القوام؟ معظم الأمثلة لتحميل من ملف، ولكن أنا لا أريد أن تفعل ذلك.

ولقد حاولت قراءة بلدي برنامج OpenGL البرمجة كتاب دليل، ولكن لمجرد متاهة كما أنا جديدة تماما لبرنامج OpenGL. الرجاء المساعدة.

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

المحلول

ونلقي نظرة فاحصة على glTexImage2D. هذا هو النداء الذي يقوم بتحميل صورة في OpenGL ل2D الملمس.

وglTexImage2D يأخذ في الواقع مؤشر الخام إلى بيانات البكسل في الصورة. يمكنك تخصيص الذاكرة نفسك، وتعيين بيانات الصورة مباشرة (ولكن تريد)، ثم استدعاء هذه الدالة لتمرير الصورة إلى برنامج OpenGL.

وبمجرد إنشاء نسيج، يمكنك ربط ذلك للدولة بحيث المثلثات الخاصة بك استخدام هذا الملمس.

وليس هناك شيء في OpenGL يتطلب الصور مباشرة تستخدم مواد ليتم تحميلها من الملفات. مورد جيد للمواد يمكن أن يكون وجدت في هذه المقالة GameDev.

نصائح أخرى

إذا المربع الذي يتم رسم لهو 2 الأبعاد وليس استدارة، قد تكون تبحث عن <لأ href = "http://www.glprogramming.com/red/chapter08.html#name6" يختلط = "نوفولو noreferrer "> glDrawPixels . انها تسمح لك لرسم منطقة مستطيلة بكسل مباشرة إلى المخزن المؤقت دون استخدام أي المضلعات.

إذا كنت جديدا ثم أنصح بدءا من تعليمي واحد على من NeHe .

هل لاحظ أنه في حين يأخذ glTexImage2D() مؤشر إلى بكسل لتحميل، فإنه لا يهمه أي تغييرات على تلك البيانات بعد المكالمة. وهذا هو، يتم تحميل البيانات حقا من منطقة الذاكرة الذي تحدده، و OpenGL إنشاء نسخة من تلقاء نفسها.

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

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

int pixelIndex = 0;
GLubyte pixels[400];

for (int x = 0; x < 10; x++)
{
    for (int y = 0; y < 10; x++)
    {
         for (int channel = 0; channel < 4; channel++)
         {
             // 0 = black, 255 = white
             pixels[pixelIndex++] = 255;
         }
    }
}

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGBA, SIZE, SIZE, 0,
    GL_RGBA, GL_UNSIGNED_BYTE, pixels);

ولقد قرأت في كتاب برنامج OpenGL يمكنك استخدام مجموعة 2D للصور أحادية اللون، لذلك أفترض أنك يمكن أن تستخدم مجموعة 3D أيضا.

ما كنت تبحث عن ما يسمى عادة "تقديم لالملمس."

http://developer.nvidia.com/object/gdc_oglrtt.html

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top