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

مبتدئ  info_si مشاركة 1

السلام عليكم
حاولت رسم مستطيل باستخدام أوبن جي ل اليكم البرنامج


glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
  glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
  glVertex3f(1.0f, 1.0f,0.0f);
  glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
  glVertex3f(-1.0f, 1.0f,0.0f);
  glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
  glVertex3f(-1.0f, -1.0f,0.0f);
  glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
  glVertex3f(1.0f, 1.0f,0.0f);
  glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
  glVertex3f(-1.0f, -1.0f,0.0f);
  glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
  glVertex3f(1.0f, -1.0f,0.0f);
  glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
glEnd();
glFlush();
SwapBuffers(dc.m_ps.hdc);
 
لكنني لاأرى أي عرض في النافدة هل المشكل في البرنامج أم في طول النافدة وهو كالتالي


GLsizei width, height;
GLdouble aspect;

width = cx;
height = cy;

if (cy==0)
  aspect = (GLdouble)width;
else
  aspect = (GLdouble)width/(GLdouble)height;

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 500.0 * aspect, 0.0, 500);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDrawBuffer(GL_BACK); 

azqs

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

الإحداثيات المستخدمة في بناء المستطيل لا تشكل مستطيلاً. ففي التعليمة:


glBegin(GL_POLYGON);
 
نحن نقول لأوبن جي إل أننا سنرسم مضلعاً مكوناً من ثلاثة رؤوس أو أكثر. الآن، في كود تعريف الرؤوس، لاحظي أنك تقومين بتعريف ستة رؤوس، بينما المستطيل يتشكل من أربعة رؤوس فقط. هذا هو الخطأ الأول.
 
الخطأ الثاني المحتمل هو أن المضلع يدير ظهره للناظر. وكما نعلم، فإن أوبن جي إل يقوم عادة بتجاهل رسم المضلعات التي تدير ظهرها للناظر (backface culling).
 
السؤال هو كيف يعرف أوبن جي إل إن كان هذا المضلع يدير ظهره للناظر أم لا؟
 
لمعرفة هذه الحقيقة يتم رؤية إن كان الناظم على سطح المضلع يتعاكس مع اتجاه النظر أم لا. إن كانا متعاكسين تم الرسم، وإلا فلا.
الناظم على سطح المضلع يكون في الاتجاه المطلوب عندما تكون رؤوس المضلع مرتبة بحسب اتجاه سير عقارب الساعة.
 
لو رسمنا الرؤوس التي تقومين بتعريفها على ورقة وتتبعنا ترتيب ورودها للاحظنا أنك تقومين بتعريفها بعكس اتجاه سير عقارب الساعة، مما يعني كنتيجة نهائية أن هذا المضلع لن يظهر على الإطلاق.
 
لا أرى أية مشاكل ظاهرة في إعداد نافذة الرسم. أنصحكِ بإصلاح تعريف المستطيل أولاً وإن لم يظهر المستطيل بعد الإصلاح فأرجو ألا تترددي بطرح المشكلة هنا.

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