كيفية إنشاء نقطية من مجموعة صحيحة في C / برنامج OpenGL

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

  •  08-07-2019
  •  | 
  •  

سؤال

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

و bitmap = Bitmap.createBitmap( {int array name} , w, h, Config.RGB_565);

هل هناك وظيفة مماثلة التي يمكن استخدامها في C، أو الحل أن أتمكن من استخدام؟

وأيضا، إذا كان يهم، وأنا البرمجة لالروبوت.

وشكرا!

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

المحلول

وأنا لست على دراية تحديدا مع الروبوت ولكن إذا كنت أتذكر من الارتباطات برنامج OpenGL C بشكل صحيح لا يوجد هيكل نقطية. وبدلا من ذلك وظيفة نقطية مختلفة (أي glBindTexture()) تأخذ فقط مؤشرات GLuint (وC يعادل مجموعة).

في جاوة كل شيء هي فئة حتى نقطية لديها الطبقة المرتبطة به، ولكن الطبقة نقطية هو في الغالب مجرد غلاف (وبعض الوظائف) لمجموعة كثافة العمليات الذي يحتوي فعلا صورتك.

في برنامج OpenGL على وجه التحديد، ونحن في كثير من الأحيان ربط مجموعة مع glBindTexture وظيفة ، وظائف الملمس ثم أخرى تأخذ اسم انها ملزمة لمرجع "الدولة" الصحيحة ل OpenGL.

ومن ناحية أخرى إذا كنت تحاول ماس كهربائى هذه العملية يمكنك دائما استخدام <لأ href = "http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml" يختلط = " noreferrer نوفولو "> glTexImage2D

نصائح أخرى

وأنا الصيد من خلال وثائق لتنسيق BMP منذ فترة أن يؤلف هذا بيثون تنفيذ . يجب أن تكون قادرة على ميناء هذا C مع صعوبة تذكر.

وظيفة كنت تبحث عن ببساطة glTextImage2D(). فهو يحمل البيانات من مجموعة إلى برنامج OpenGL. تحديد صيغ المصدر والوجهة لديك وتريد، وأنه لا الباقي.

استخدم جنبا إلى جنب مع glBindTexture() لإنشاء إعادة استخدامها الكائن الملمس المخزنة، لذلك لا تحتاج إلى تحميل البيانات الملمس قبل استخدامه كل إطار.

وهنا هو ما تحتاج:

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , x_size, y_size, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)your_data );

ويجب أن يكون x_size وy_size صلاحيات 2. لهذا الرمز التي تحتاج إليها مجموعة من x_size <م> [إينتس] y_size 4 بايت (أو x_size y_size * 4 بايت). لاختبار مجرد محاولة:

unsigned char data[32*32*4];

for( int i=0; i< sizeof(data); ++i) data[i]=rand();
// Don't forget to #include <stdlib.h>

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , 32, 32, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)data );

والأشكال الأخرى المحتملة: GL_BGRA (لأمر بايت مختلفة)، GL_RGB (إذا لم يكن لديك ألفا). استخدام glGenTextures / glBindTexture أن نتذكر الإعداد الملمس لاستخدامها لاحقا.

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