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

مشكة فى تحديث الشاشة glClear

بدأه sookkaa في 10 ديسمبر 2010 · 9 رد · 1,205 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT)

الكود اللى فات ده بستخدمه فى تحديث الشاشه

يعنى لما ارسم مربع فى اى مكان فى الشاشه ولو كنت عايز احركه لازم بعد ما احط احداثيات المربع الجديده بستخدم الكود ده لمسح الشاشه لاعادة رسم المربع فى مكانه الجديد

لحد كده تمام اوى المشكله بقه ان انا لو عندى 50 مربع مرسوم على الشاشه و مربع واحد فقط هو اللى عايز اغير مكانه لازم اعمل عمليه مسح للشاشه و ارسم ال 50 مربع من جديد مع تغيير مكان المربع اللى انا غيرت احداثياته

يعنى لو انا عايز احرك مربع واحد او اعمله عملية تدوير لازم اعيد رسم ال 50 مربع كلهم

العمليه دى المشكله فيها البطء الشديد لان البرنامج مطالب يرسم الاشكال كلها اللى مرسومه عند تغير مكان اى شكل

ياريت من خبراء الاوبن جى ال لو كان فى حل للمشكله دى من غير ما اعيد رسم الاشكال كلها من تانى

#2

الإجابة بإختصار نعم!

و هذه مشكلة برامج و مكتبات الرسوميات جميعها وليس ال OpenGL حصرا.

لا أدري هل تواجه مشكله خاصة بشكل معين مع هذه العملية مثلا؟

#3

طبعا الموضوع ده عاملى مشكله جامده جدا لان انا فى البرنامج بحرك الاشكال عن طريق الماوس طبعا مع كل حركة ماوس بيعيد رسم الاشكال كلها لحد ما اقف بالماوس فى مكان الشكل اللى انا بحركه

يعنى لو عندى 50 مربع فى الشاشه وفى مربع فى اقصى يسار الشاشه و عايز احرك الشكل ده مثلا فى نصف الشاشه طبعا مع كل حركة ماوس لحد ما اوصل بالماوس لنص الشاشه هايرسم كل الاشكال تانى يعنى لحد ما اوصل بالماوس لنص الشاشه ممكن يكون رسم الاشكال كلها حولى 30 مره طبعا ده بيسبب مشكله كبيره فى بطئ البرنامج

ولو ما استخدمتش كود مسح الشاشه فى كل حركة ماوس الشكل اللى انا بحركه هايسيب اثر وراه يعنى شاشة الرسم كلها هاتبوظ فانا لازم استخدم كود مسح الشاشه وكود مسح الشاشه فى كل مره بيسبب المشكله اللى انا بقول عليها

ياريت لو فى حل للمشكله دى حد يقولى عليها

1
#4

السلام عليكم

ما تقولة نعم و لا في نفس الوقت, السبب الرئيسي لبطء الرسوميات هو عامل البيانات فكلما كان حجم البيانات كبير كلما زادت حدة المعالجة , و للتدخل في عمل المعالجة نستعين بخاصية glsl و هي لغة تمكنك من أن تكون أقرب للمعالج و البيانات و لا ننسى دور كائن الذاكرة buffer object فهو يلعب الدور الرئيسي في سؤلك أنت.

ما قلته أنت سابقا يسيئ إلى سمعة "الأوبن جي أل ", حاول الإحاطة بجميع جوانب الأوبن جي أل و فهمها فهما صحيحا و من ثم يتسنى لك نقدها. و عذرا لهذا التهجم.

تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

future.jpg
#5

كما قال الزملاء ..

شيء طبيعي أن تمسح وترسم كل شيء في كل مدة معينة ( أجزاء الثانية ) ، أو عند إعادة رسم النافذة .. هذا شيء طبيعي ومن المفترض أن لا يؤثر بالشكل الكبير ، لأن هناك مجسمات تحمل آلاف المثلثات ولم تتأثر بإعادة رسم النافذة ( مسحها ) كل مرة .. الأجهزة الآن حديثة .

فقط تأكد أنك تملك تعريف كرت شاشة جيد ومحدث .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

السلام عليكم, أردت فقط أن أنوه لكلام الأخ الشًّمري و الأخ سوكــا .

هذا من مقتطفات مقالة "كــــــــائن الذاكـــــــرة " :

اقتباس

الشيفرة البرمجية ممكن أن تكون صغيرة و لكن لها طريق طويل للوصول إلى الشاشة. سيقوم السيد أوبن جي أل بتحميل البيانات (بيانات النقاط و الألوان و إحداثيات الإكساء ووو ) إلى الذاكرة , وفي كل مرة يدخل تطبيقك أو لعبتك الحلقة يعيد السيد أوبن جي أل تحميل تلك البيانات إلى الذاكرة مرة أخرى.ففي حالة عمل مجسمات متحركة ( مثلا: علم يرفرف أو سطح البحر أو أو كوكب يدور أو كل مجسم يتطلب الحركة تلقائيا ) و بإحدى الأنواع التالية:

النوع الأول:عمل مجسمات متحركة, يتم تحديث بياناتها عن طريق دوال يوفرها مكتبة السيد أوبن جي أل.

النوع الثاني: عمل مجسمات متحركة, يتم تحديث بياناتها عن طريق دوال نوفرها نجن في تطبيقاتنا.

النوع الثالث: عمل مجسمات ثابتة, مثل الجدران و الأرض و كل شيء ثابت لا يتحرك و بمعنى أخر ليس لهذا المجسم بيانات متغيرة.

ففي النوع الأول و النوع الثالث يكمل الإشكال, بحيث أن السيد أوبن جي أل , سيقوم بإرهاق نفسه جراء التحميل المتكرر للبيانات من ذاكرة النظام نحو ذاكرة بطاقة الرسوميات.

أما النوع الثاتي فلا بأس به و يمكن إعتباره حل مقبول و لكن إن إستعملت ما نحن بصدده فذلك سيزيد من كفاءة التطبيق و يجعله متصلا إتصالا تاما مع بطاقة الرسوميات "graphic card".

و الحل هو إستعمال كائن الذاكرة "buffer object".

أرجوا أن يكون ما كتبته واضحا فهذا كان أساس المقالة ككل.

تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

future.jpg
#8

السلام عليكم و رحمة الله وبركاته

ده الكود اللى انا بستخدمه

 Dim B, M As Integer

        B = 5 'حسب عدد الاشكال المرسومه يتم تغيير هذا الرقم
        M = 0



        Gl.glLoadIdentity()
        Glu.gluPerspective(45.0#, (TopViewWidth) / (TopViewHeight), 1.0#, 800.0#)
        Gl.glEnable(Gl.GL_DEPTH_TEST)
        Gl.glClear(Gl.GL_COLOR_BUFFER_BIT Or Gl.GL_DEPTH_BUFFER_BIT)
        Gl.glViewport(0, 0, TopViewWidth, TopViewHeight)



        Gl.glEnable(Gl.GL_LINE_SMOOTH)
        Gl.glEnable(Gl.GL_BLEND)
        Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA)
        Gl.glHint(Gl.GL_LINE_SMOOTH_HINT, Gl.GL_NICEST)

        ' ''''''''''''''''

        Do While M <= B
            Gl.glPushMatrix()



'دالة الشكل المرسوم اللى عليه الدور فى الرسم





            M = M + 1



            Gl.glPopMatrix()
        Loop


        Gl.glFlush()
        Gdi.SwapBuffers(hDC)

ياريت حد يبص عليه يقولى الخطأ فين

وجزاكم الله خيرا

#9

محاولة تنعيم الخطوط باستخدام glBlend قد تكون هي السبب ، فلها تأثير واضح على الاداء ..لكن من المفترض أن هذا التأثير ما يكون تأثير قوي لو كانت مواصفات جيدة . لو جرّبت تلغي هذه الأسطر ، ممكن تحصل على أداء جيد :

        Gl.glEnable(Gl.GL_LINE_SMOOTH)
        Gl.glEnable(Gl.GL_BLEND)
        Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA)
        Gl.glHint(Gl.GL_LINE_SMOOTH_HINT, Gl.GL_NICEST)

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#10

السلام عليكم

حاول إلغاء الدالة التالية:

        Gdi.SwapBuffers(hDC)

و حاول الإستفاذة من الموقع :

هنـــــــــــــــــــــــــــــــــــــــــــــــــــــا

تم تعديل هذه المشاركة بواسطة 3ds max2010 في 16 ديسمبر 2010 في 22:33

تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

future.jpg

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