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

سؤال عن الألوان المفهرسة .... أرجو المساعدة عاجلاً

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

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

هذا البرنامج يوضح استخدام الضباب في الألوان المفهرسة البرنامج صحيح لكن المشكلة التي واجهتني لما اعمل لاتظهر نافذة الويندوز وتظهر النافذة السوداء فقط .... أنا قرأت معلومة أنه

عند استخدام الضباب في نمط الالوان المفهرسة لابد من تحميل واستخدام جدول الالوان ... أنا ماني فاهمة ايش الشيء اللي احمله و ايش يقصد بجدول الألوان وكمان قرأت أنه نقوم بتحميل 16

دليل متتابع في جدول الألوان يتراوح لونها بين لون الخلفية ولون الجسم هذه المعلومة لم افهمها نهائياً أرجو التوضيح بالتفصيل في العاجل القريب من فضلكم وجزاكم الله كل خير .

#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>



/* Initialize color map and fog. Set screen clear color

* to end of color ramp.

*/

#define NUMCOLORS 32
#define RAMPSTART 16

static void init(void)

{
int i;
glEnable(GL_DEPTH_TEST);
for (i = 0; i < NUMCOLORS; i++) {
GLfloat shade;
shade = (GLfloat) (NUMCOLORS-i)/(GLfloat) NUMCOLORS;

glutSetColor (RAMPSTART + i, shade, shade, shade);

}

glEnable(GL_FOG);

glFogi (GL_FOG_MODE, GL_LINEAR);

glFogi (GL_FOG_INDEX, NUMCOLORS);

glFogf (GL_FOG_START, 1.0);

glFogf (GL_FOG_END, 6.0);

glHint (GL_FOG_HINT, GL_NICEST);

glClearIndex((GLfloat) (NUMCOLORS+RAMPSTART-1));

}

static void renderSphere (GLfloat x, GLfloat y, GLfloat z)

{

glPushMatrix();
glTranslatef (x, y, z);
glutWireSphere(0.4, 16, 16);
glPopMatrix();
}

/* display() draws 5 spheres at different z positions.

*/

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glIndexi (RAMPSTART);
renderSphere (-2., -0.5, -1.0);

renderSphere (-1., -0.5, -2.0);

renderSphere (0., -0.5, -3.0);

renderSphere (1., -0.5, -4.0);

renderSphere (2., -0.5, -5.0);

glFlush();

}



void reshape(int w, int h)

{

glViewport(0, 0, w, h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

if (w <= h)

glOrtho (-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w,

2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);

else

glOrtho (-2.5*(GLfloat)w/(GLfloat)h,

2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity ();

}

void keyboard(unsigned char key, int x, int y)

{

switch (key) {

case 27:

exit(0);

}

}

int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_INDEX | GLUT_DEPTH);

glutInitWindowSize(500, 500);

glutCreateWindow(argv[0]);

init();

glutReshapeFunc (reshape);

glutKeyboardFunc (keyboard);

glutDisplayFunc (display);

glutMainLoop();

return 0;

}

تم تعديل هذه المشاركة بواسطة ahla elm في 23 مايو 2009 في 14:27

#2

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

- الألوان المفهرسة قديمة جدا .. انقرضت قبل أن نولد :) .

- حاولت تنفيذ البرنامج وظهرت لدي رسالة الخطأ :

"pixel format with necessary capabilities not found. "

- بعد البحث تبيّن أن المشكلة هي في أن الـ implementation الجديدة لمكتبة OpenGL لا تدعم فهرسة الألوان .. والاستثناء هو

" OpenGL 1.1 software implementation from Microsoft. "

وهو يزول عندما يتم تثبيت كرت شاشة وتعريفه ( مثل انفيديا - ATI ) ويأتي معه OpenGL Implementation .. لذلك لا أظن أنك قادرة على تنفيذ البرنامج .

- الفكرة وراء الألوان المفهرسة بسيطة .. وأظن أي دكتور في مبادئ برمجة الرسوميات .. يعطي نبذه تاريخية عنها ..

في نظام RGB لدينا ..R - G - B .. حيث كل مكوّن يملك 8 بتات ( عادة ) .. وبالتالي .. 24 بت لكل بكسل .

في نظام index .. لدينا عدد (في الغالب من 0 إلى 256 ) .. يعني 8 بت لكل index .. حيث كل Index يقابله لون معيّن RGB .

post-42837-1243183030_thumb.jpg

وهو بالظبط ما تفعله الدالة glutSetColor .. حيث نعيّن اللون لكل index .. قبل استخدام هذا الـ Index , مع العلم أنه أوّل 16 عنصر من جدول الألوان محجوز للنظام (على ما أذكر ) ..

- لا فائدة من الألوان المفهرسة الان مع تطوّر العتاد ..

تم تعديل هذه المشاركة بواسطة الشمري في 24 مايو 2009 في 19:43

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

اشكرك اخي الشمري على ردك

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

مع العلم أنه أوّل 16 عنصر من جدول الألوان محجوز للنظام (على ما أذكر ) ..

#4
اقتباس
مع العلم أنه أوّل 16 عنصر من جدول الألوان محجوز للنظام (على ما أذكر ) ..

أول 16 خانة .. تمثل palette (لوحة ألوان أساسية) الخاص بنظام الويندوز .. يعني يسمح لك بالتعديل على أي لون من ( 16 حتى 255 )

ولكن لا أعرف بالظبط هل هذا اجباري .. هل سينتج خطأ ... لا أعرف التفاصيل .

في الويندوز كل شيء مبني على Win32 APIs , وهي دوال النظام ( المكتبة GLUT تقوم بتغليف الجزء المطلوب من هذه الدوال للتسهيل وتحقيق امكانية نقل الكود على أكثر من نظام تشغيل ) , يمكن معرفة المزيد عن كيفية عمل Palette من خلال Win32 API .

يمكن الاطلاع على وثائق MSDN :

http://msdn.microsoft.com/en-us/library/dd183507(VS.85).aspx

http://msdn.microsoft.com/en-us/library/dd183450(VS.85).aspx

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…