الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ميثود جاهز لاعطاء اللون

بدأه بيان محمد في 2 ديسمبر 2009 · 6 رد · 895 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم، اريد أن أسأل عن الميثود الجاهز الذي يعطي لون البكسل الذي نضغط عليه على الwindow شكرا

#2

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

في OpenGL ، ما يظهر على النافذة أو جزء منها هو قادم من Frame Buffer ، الذي إحدى مكوناته حسب ما أعلم Color Buffer ،

لذلك السؤال بصيغة أخرى :

كيف أقرأ قيمة أو لون بيكسل في Color Buffer ؟

الجواب : باستخدام glReadPixels

void glReadPixels(	GLint 	x, 
 	GLint 	y, 
 	GLsizei 	width, 
 	GLsizei 	height, 
 	GLenum 	format, 
 	GLenum 	type, 
 	GLvoid * 	data);

لكن ستواجهك مشكلة معروفة ، حيث احداثيات OpenGL قد تختلف عن احداثيات النافذة ، وبالتالي قيم مؤشر الفأرة الذي يحصل عليه المبرمج لايمكن تطبيقه مباشرة على glReadPixels الا بعد عمل تعديلات ، بتطبيق معادلة ما ، اذا كان الاسقاط تم باستخدام glOrtho فالأمر بسيط ان شاء الله ،

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

شكرا اخي الشمري، ولكن عن ماذا تعبر كل من : format و dataو type الموجوده كباراميتر ،وما هي الارقومينت التي سأبعتها لهذه الباراميتر ؟؟؟؟

،

#4

موجود في الرابط :

http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml

في الغالب ستكون هذه هي الاختيار الافضل :

unsigned char *data = new unsigned char[4];
glReadPixels(      x, 
        y, 
         1, 
         1, 
         GL_RGBA, 
        GL_UNSIGNED_BYTE, 
                data);

الان ، سيكون لون البكسل مخزن في أول عنصر من المصفوفة ( اللون الكامل من العنصر صفر الى 3) ، طبعا مش متأأكد تماما من صحة لكود - لم اجربه

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

السلام عليكم،

اسفه لتأخري بالرد ولكن هذا بسبب الامتحانات :wacko: ،

اخي لقد كتبت برنامج حتى يقوم بعملية boundary fill واستعملت به glReadPixel ولكن بطريقه تختلف قليلا عن ما وضعته ولكنه لم ينفذ معي ،ارجو المساعده في اكتشاف الخلل بهادا الكود :wink: المرفق،

شكرا

collorr.cpp

#6

اسفه ، يوجد تعديل بسيط على الملف المرفق في الرد السابق :blush:

collorr.cpp

#7

هذا موضوع عن هذه الخوارزميات /

/index.php?showtopic=209322

الموضوع يستخدم بكسلات وهمية ( مربعات فقط ) ، ينما المطلوب في كودك هو التعامل مع بكسلات حقيقية باستخدام glReadPixel و ;وكتابة البسكل باستخدام glDrawPixels أو setcolor الموجودة في كودك .

بعد قراءة الموضوع السابق بتأني وفهمه ، يمكن تطبيقه على مثالك بسهولة .

ومشكلتك واضحة في تنظيم الاحداثيات ..

بعد قراءة الموضوع السابق ، يتضح أحد مكامن الخلل :

	glOrtho(-10.0,10.0,-10.0,10.0,-10.0,10.0);

حيث يجب أن نتعامل مع احداثيات مناسبة اذا أردنا الابتعاد عن معادلات ووجع رأس .

وأكيد فيه مشاكل ثانية .

بانتظار المحاولة .

تم تعديل هذه المشاركة بواسطة الشمري في 12 ديسمبر 2009 في 06:49

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

مواضيع مشابهة