الشبكة العربية لمطوري الألعاب

خبير مدير همام البهنسي مشاركة 1

السلام عليكم...
 
في مظللات GLSL لاحظت أنه عندي قيامي بتحديد قيمة لونية وإظهارها من خلال Vertex Shader تكون النتيجة مختلفة عن النتيجة في حال إظهرها من خلال Pixel Shader.
الصور التالية تظهر الفرق في اللون بين الحالتين:
 






طبعاً كما هو واضح من الصور، نتيجة الـ Vertex Shader هي الخطأ، كيف يمكنني جعل الـ Vertex Shader يعطي قيم لونية صحيحة كما أرجوا توضيح السبب في هذا الاختلاف إن أمكن.
 
أخيراً أود شكر الأخ محمد عبد الستار الذي شارك بمقالته الرائعة حول الـ OpenGL التي أغنت مكتبة الشبكة العربية بمرجع مهم عن هذه التقنية في صناعة الألعاب والتي تعلمت منها الكثير 😄
http://www.agdn-online.com/papers/bali_opengl.zip

مبتدئ  DoomAngel مشاركة 2

السلام عليكم..
ليست لدي الخبرة الكافية في برنامج ال XSI  ولكن أعتقد أن في ال VertexShader اللون المحدد لكل رأس م الرؤوس لن يكون هو اللون النهائي للسطح وإنما سيخضع في ما بعد في خط التصيير RenderPipeline إلى بعض العمليات مثل تطبيق حسابات الإضاءة وهنا الكثير من الإضاءات التي يمكن تطبيقها مثل الضوء الإفتراضي للمشهد ولون البيئة المحيطة إن وجد وما إلى ذلك لذلك لن يكون الخرج عن إستخدام ال VertexShader هو اللون المدخل تماما..
أما بالنسبة للون المعطى بال PixelShader فأعتقد أنه يسند بعد عملية حسابات الإضاءة أو بالأحرى تم هنا إهمال حسابات الإضاءة إن لم تضفها بشكل يدوي في برنامج ال PixelShader الذي قمت بكتابته..
أعتقد أن هذا هو سبب المشكلة..

مع تمنياتي بالتوفيق.

خبير مدير همام البهنسي مشاركة 3

وعليكم السلام...

شكراً جزيلاً على مساعدتك... بدأت بشكوك حول احتمال أن يكون الـ XSI يقوم بالتبرع بادخال حسابات الإضاءة أو أي عمليات أخرى على حسابات الـ Vertex Shader. والنتيجة كانت أنه ملتزم تماماً بالكود المكتبوب والذي لا يحوي أي شيء من هذه العمليات.
 
فيما بعد اكتشفت السبب الذي كنت في الحقيقة أنا المسؤول عنه 😳 . الخطأ الذي ارتكبته والذي تسبب في تغيير نتيجة الـ Vertex Shader هو أني قمت بربط عقدة إكساء (Texture Node) على كود GLSL دون تحديد كيفية التعامل معه ضمن الكود. هذا أدى إلى جعل الـ XSI يقوم بأخذ قيمة لونية من الإكساء وضربها باللون الأحمر الناتج من الـ Vertex Shader مما أدى للنتيجة السابقة.
 
شكراً مرة أخرى على الإفادة!

خبير مدير وسام البهنسي مشاركة 4

في 07/جمادى الثانية/1431 08:55 م، قال همام البهنسي بهدوء وتؤدة:

هذا أدى إلى جعل الـ XSI يقوم بأخذ قيمة لونية من الإكساء وضربها باللون الأحمر الناتج من الـ Vertex Shader مما أدى للنتيجة السابقة.

مما يعني أنك كنت قد حددت مظلل الرؤوس ولم تحدد مظلل البكسلات، مما يجعل أوبن جي إل يتوجه لخط المعالجة الثابت، والذي يقوم بضرب لون الإكساء المحدد باللون الخارج من مظلل الرؤوس افتراضياً على ما أعتقد.

وسام البهنسي
مبرمج في إنفيديا وإنفريمز