سؤال

أحتاج إلى تعيين قيمة عددية للون يتراوح من 0 إلى 1.سوف ينتقل من الأخضر إلى الأحمر (من 0 إلى 1) الاستيفاء الخطي باستخدام إحداثيات النسيج (يتراوح أيضا من 0 إلى 1)

أنا جديد على برنامج أوبنغل و غلسل ، حتى الآن لقد أحسب أنني بحاجة إلى كتابة قيمة اللون في

gl_FragColor

وهو ناقل البعد 4.لست متأكدا كيف يمكنني حساب قنوات ر ، ز و ب ل غلفراغكولور فقط من خلال قيمة عددية واحدة تتراوح من 0 إلى 1.0 (سيكون من الأخضر إلى الأحمر وعند 0.5 سيكون أبيض)

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

المحلول

giveacodicetagpre.

أو يمكنك تذوق نسيج ذي 3 بكسل 1D.

نصائح أخرى

إذا تم تسمية القيمة الخاصة بك في النطاق من 0 إلى 1 val:

if (val < 0.5)
{
    gl_FragColor = vec4(2.0 * val, 1.0, 2.0 * val, 1.0);
}
else
{
    gl_FragColor = vec4(1.0, 2.0 * (1.0 - val), 2.0 * (1.0 - val), 1.0);
}

أو إذا كنت ترغب في تجنب بيانات الفرع:

gl_FragColor = vec4(min(2.0 * val, 1.0),
                    min(2.0 * (1.0 - val), 1.0), 
                    2.0 * min(val, 1.0 - val),
                    1.0);

لست متأكدا مما إذا كان هذا سيكون أسرع بالفعل.كما أشار @ جيسي ، يمكن تبسيط ذلك إذا كان المخزن المؤقت للون يحتوي على تنسيق طبيعي ، لأن ألوان الإخراج يتم تثبيتها تلقائيا إلى نطاق [0 ، 1] في هذه الحالة ، مما يجعل زوجين من min المكالمات غير ضرورية:

gl_FragColor = vec4(2.0 * val,
                    2.0 * (1.0 - val), 
                    2.0 * min(val, 1.0 - val),
                    1.0);

لا داعي للقلق بشأن اللقط اليدوي، لأن GL_FRAGCOLOR يتم فرضه بين 0-1.

giveacodicetagpre.

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