اللون الاستيفاء في جزء تظليل غلسل?
-
02-01-2020 - |
سؤال
أحتاج إلى تعيين قيمة عددية للون يتراوح من 0 إلى 1.سوف ينتقل من الأخضر إلى الأحمر (من 0 إلى 1) الاستيفاء الخطي باستخدام إحداثيات النسيج (يتراوح أيضا من 0 إلى 1)
أنا جديد على برنامج أوبنغل و غلسل ، حتى الآن لقد أحسب أنني بحاجة إلى كتابة قيمة اللون في
gl_FragColor
وهو ناقل البعد 4.لست متأكدا كيف يمكنني حساب قنوات ر ، ز و ب ل غلفراغكولور فقط من خلال قيمة عددية واحدة تتراوح من 0 إلى 1.0 (سيكون من الأخضر إلى الأحمر وعند 0.5 سيكون أبيض)
المحلول
أو يمكنك تذوق نسيج ذي 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.