هل يمكنني استخدام صورة رمادية مع وظيفة برنامج OpenGL glTexImage2D؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

ولدي الملمس التي لديها سوى 1 قناة كما انها صورة رمادية. عندما أمرر بكسل في لglTexImage2D، فإنه يخرج الأحمر. (من الواضح لقناة 1 حمراء، RGB)

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGBA,
    dicomImage->GetColumns(), dicomImage->GetRows(),
    0, GL_RGBA, GL_UNSIGNED_BYTE, pixelArrayPtr);

هل يمكنني تغيير GL_RGBA؟ إذا كان الأمر كذلك، ماذا؟

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

نصائح أخرى

ويبدو أنني يجب أن تستخدم GL_LUMINANCE بدلا من GL_RGBA الوسيطة 3RD.

تحرير (ردا على تعليق):

عند I تعيين الوسيطة 7th ل GL_LUMINANCE (وكذلك 3)، فإن الصورة يذهب مشوهة تماما. مع شكل DICOM بكسل، يبدو أن حجة 7TH يجب GL_RGBA لسبب ما.

والسلوك الغريب لأنني باستخدام معيار DICOM . القارئ DICOM معين أستخدمه مخرجات صحيح القيم بكسل (كما قد تتجاوز القيم بكسل الحد الأقصى الطبيعي 255). لسبب غريب مزيج من قول برنامج OpenGL أن أستخدمه شكل RGBA، ولكن يمر في القيم صحيحة المقدمة صورة مثالية.

ولأنني كنت اقتطاع القيم بكسل DICOM> 255 على أي حال، يبدو من المنطقي لنسخ القيم في لمجموعة GLbyte. ومع ذلك، بعد القيام بذلك، وهو SIGSEGV (خطأ تجزئة) وقعت عندما تدعو glTexImage2D. تغيير المعلمة 7th ل GL_LUMINANCE (كما هو مطلوب عادة) عاد وظيفة إلى وضعها الطبيعي.

وغربة إيه؟

وهكذا، مذكرة إلى جميع المطورين باستخدام شكل صورة DICOM: أنت في حاجة لتحويل مجموعة عدد صحيح إلى صفيف حرف قبل تمريرها إلى glTexImage2D، أو مجرد تعيين الوسيطة 7th ل GL_RGBA (في وقت لاحق وربما لا مستحسن).

وفي FragmentShader، يمكنك كتابة:

uniform sampler2D A;
vec3 result = vec3(texture(A, TexCoord).r);

في ملف حزب الشعب الكمبودي، يمكنك كتابة:

glTexImage2D(
GL_TEXTURE_2D, 0, GL_RED,
dicomImage->GetColumns(), dicomImage->GetRows(),
0, GL_RED, GL_UNSIGNED_BYTE, pixelArrayPtr);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top