GLSL جزء خطأ في بناء الجملة تظليل
سؤال
وفشل بسيط كود جزء تظليل التالية، وترك لي مع رسالة غير المفيدة في السجل:
ERROR: 0:1: 'gl_Color' : syntax error syntax error
void main()
{
vec4 myOutputColor(gl_Color);
gl_FragColor = myOutputColor;
}
وحين يعمل أحد التالي:
void main()
{
glFragColor = gl_Color;
}
وهذا يحير عقلي، كما هو الحال في Lighthouse3D في gl_Color هو وقال ليكون vec4. لماذا لا يمكنني إسناد ذلك إلى vec4 آخر؟
المحلول
وحاول التنازل العادي. مثل هذا:
void main()
{
vec4 myOutputColor = gl_Color;
gl_FragColor = myOutputColor;
}
وتحرير:
والجواب الثاني تماما كما هو الصحيح حقا، ولكن ليس هناك أي حاجة لاستخدام منشئ vec4 ()، لأن كلاهما من نفس النوع. إذا كنت قد يتيح يقول (ص، ز، ب، ث) الصفوف (tuple) يمكن أن تكتب:
vec4 myOutputColor = vec4(r, g, b, w);
أو
// assuming myRgbColor is a vec3
vec4 myOutputColor = vec4(myRgbColor, w);
وغيرها
نصائح أخرى
وAparrently يجب عليك استخدام جملة مختلف قليلا
و(انظر جي إل إس إل مواصفات )
vec4 myOutputColor = vec4(gl_Color);
gl_FragColor = myOutputColor;
وهذا على عكس عينتك يجمع غرامة على بلدي ماشين (ويندوز، وبطاقة نفيديا)
لا تنتمي إلى StackOverflow