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

اضافة كمبوبوكس لو ليست بوكس على الشاشه

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

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

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

ارجو الرد فى اسرع وقت للأهميه

#2

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

لا تستطيع أن تستخدم أدوات Windows داخل OpenGL Viewport ، ولكن تستطيع أن تستخدم OpenGL لإنشاء مكتبة رسومية GUI ، فتستطيع مثلاً أن ترسم مستطيل وتضع بداخل نص ( ترسم نص ) ، وعندما ينقر المستخدم على هذا المستطيل ( تكتشف موقع الماوس ) ، وإذا كانت بداخل المستطيل ، فافعل شيئاً ما .

عموماً ، الأفضل أن تستخدم مكتبة GUI جاهزة :

  • إذا أردت البساطة وما عندك وقت تبحث عن الأفضل ، وكنت تستخدم مكتبة glut ، فاستخدم المكتبة glui:
    Image1.gif
  • إذا تريد تتعلم شيء أفضل ، فلديك مثلاً :
    http://www.antisphere.com/
    http://www.bramstein.com/projects/gui/
    أو أن تختار هذه المكتبة المتقدمة والمعقدة قليلاً ( كثير من OOP و Patterns التي ستراها ) :
    http://www.cegui.org.uk/
    عموماً ، لو كنت مكانك لاستخدمت glui مع glut اذا كان الوقت ضيّق .. ولقد استخدمتها فعلاً في أحد المشاريع ، لو أردت أن تنظر لشكل البرنامج النهائي أو السورس كود ( سأعمل إعلان لموضوعي ) :
    /index.php?showtopic=210740

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

السلام عليكم

إستعمال مكتبة glui ضعيف جدا , و ستضطر إلى هجره مستقبليا فهو من الناحية الأساسية لا يستفيد من عمليات cpu العادية و إنما يزيد الطين بلة لأن جوهر glui يستخدم الدوال المهجورة مثل glvertex .

إن إستخدام opengl مع الواجهات الرسومية مثلا winAPI 32 أو QT أو gtk هو الحل الأنسب لتصميم برامج تستفيذ من تكنولوجية opengl و ستظطر إلى هجر glut لأن glut صممت لأغراض تعليمية و ليست لأغراض التطوير .

حاول البحث في موقع nehe لأنه الموقع الوحيد تقريبا الذي يستخدم الإجراءات winAPI 32 مع مكتبة OPENGL و الإضافات الباقية سهلة للغاية و هي كالمعتاد في عالم winAPI32 .

أو إستخدام qt فهو الأنسب حاليا للواجهاي الرسومية.

أتمنى التوفيق.

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

future.jpg
#4

لكن لا تستطيع أخ 3d max استخدام QT أو Win32 APIs داخل OpenGL Viewport ، فلو كانت لعبتك بملء الشاشة مثلاً ، فأين يمكن وضع الأزرار ؟ في الغالب ، الألعاب تستخدم مكتبة GUI مختلفة عن QT و Win32 APIs .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

السلام عليكم

اقتباس

لكن لا تستطيع أخ 3d max استخدام QT أو Win32 APIs داخل OpenGL Viewport

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

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

عذرا أخي الشمري على نقدي قد أكون متعصب شيئا ما تجاه glui.

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

future.jpg
#6

لماذا تعتذر ، أحب آخذ وأعطي معك فقط ، أما مكتبة glui فكلامك صحيح ، فهي سيئة المظهر والأداء لكنها " تمشي الحال " فقط ، أنا لا أمدحها كثيراً :D ،

الله يعافيك ..

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

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

ارجو الرد فى اسعر وقت للأهميه

#8

لايوجد الا موقع glui فقط / ستجد أمثلة ، حملها وحاول التغيير إلى أن تفهم ، هي بسيطة وسطحية بما يكفي لأن تفمهما بسرعة ، و المثال الذي ذكرته لك، أيضاً يحتوي على كود بسيط ، انظر الملف main.h وتحديداً هذه الدالة :

void initGLUserInterface()
{
	GLUI_Master.set_glutReshapeFunc( myGlutReshape );  
	GLUI_Master.set_glutKeyboardFunc( myGlutKeyboard );
	GLUI_Master.set_glutSpecialFunc( NULL );
	GLUI_Master.set_glutMouseFunc( myGlutMouse );



	  /*** Create the side subwindow ***/
	  gluiRight = GLUI_Master.create_glui_subwindow( main_window,GLUI_SUBWINDOW_RIGHT );
	  gluiRight->set_main_gfx_window( main_window );

	  /***** properties section *****/
	  properties = new GLUI_Rollout(gluiRight, " Shape Properties ",true );
	  GLUI_Checkbox *checkBox = new GLUI_Checkbox( properties, "Wireframe", &shapeAttributes.m_wireFrame,-1, control_cb );
	  GLUI_Checkbox *checkBox2 = new GLUI_Checkbox( properties, "Antialias", &shapeAttributes.m_antialias,-1, control_cb );
	  checkBox2->int_val = 1;
	  shapeAttributes.m_antialias = 1;
	  GLUI_Spinner *spinner = new GLUI_Spinner( properties, "Point Size:", &shapeAttributes.m_pointSize);
	  spinner->set_int_limits( 2, 15 );
	  spinner->set_alignment( GLUI_ALIGN_RIGHT );
	  GLUI_Spinner *scale_spinner = new GLUI_Spinner( properties, "Line Width:", &shapeAttributes.m_lineWidth,-1,control_cb);
	  scale_spinner->set_float_limits( 1, 15 );
      scale_spinner->set_alignment( GLUI_ALIGN_RIGHT );



		  /*** tools section ***/
		  GLUI_Rollout *tools = new GLUI_Rollout(gluiRight, "Tools", true );
		  GLUI_RadioGroup *group = new GLUI_RadioGroup(tools,NULL,ON_OPTION_CHANGE,control_cb);
			  pointRadio = new GLUI_RadioButton(group,"Draw Point");
			  lineRadio  = new GLUI_RadioButton(group,"Draw Line");
			  TriangleRadio  = new GLUI_RadioButton(group,"Draw Triangle");
			  rectangleRadio = new GLUI_RadioButton(group,"Draw Rectangle");
			  circleRadio  = new GLUI_RadioButton(group,"Draw Circle");
			  polylineRadio  = new GLUI_RadioButton(group,"Draw POLYLINE");
			  polygonRadio = new GLUI_RadioButton(group,"Draw POLYGON");

		  /**** options section ****/
		  new GLUI_StaticText( gluiRight, "other options" );


		  /*** Disable/Enable buttons ***/
		  new GLUI_Button( gluiRight, "Save to image...", ON_SAVE_PRESS, control_cb );
		  new GLUI_Button( gluiRight, "Clear All", ON_CLEAR_PRESS, control_cb );
		  undoButton = new GLUI_Button( gluiRight, "Undo", ON_UNDO_PRESS, control_cb );
		  redoButton = new GLUI_Button( gluiRight, "Redo", ON_REDO_PRESS, control_cb );
		  new GLUI_Button( gluiRight, "Quit", ON_QUIT_PRESS,(GLUI_Update_CB)exit );
		  new GLUI_StaticText( gluiRight, "Developed By :");
		  new GLUI_StaticText( gluiRight, "Abdullah AlShammari");
		  new GLUI_StaticText( gluiRight, "CSC476" );
		  new GLUI_StaticText( gluiRight, "GLPainter Project" );


  /*** Create the bottom subwindow ***/
  gluiBottom = GLUI_Master.create_glui_subwindow( main_window,GLUI_SUBWINDOW_BOTTOM );
  gluiBottom->set_main_gfx_window( main_window );
  infobar  = new GLUI_StaticText(gluiBottom,"");
  new GLUI_StaticText(gluiBottom,"Press : MIDDLE BUTTON to remove current points");
  infobar2 = new GLUI_StaticText(gluiBottom,"");
  infobar->set_text("add  points by click on left button");

}

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#9

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

ياريت تكمل الكلام اللى كاتبه للأخر لو سمحت

بص لو انا عندى الكود ده

#include <windows.h>

#include <gl\gl.h>

#include <gl\glu.h>

#include <gl\glut.h>

static void redraw(void);

int main(int argc, char **argv)

{

glutInit(&argc,argv);

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutInitWindowPosition(100,100);

glutInitWindowSize(400,400);

glutCreateWindow("Application11");

glutDisplayFunc(redraw);

glMatrixMode(GL_PROJECTION);

gluPerspective(45,1.0,10.0,200.0);

glMatrixMode(GL_MODELVIEW);

glutMainLoop();

return 0;

}

static void redraw(void)

{

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

glTranslatef(-20.0,0.0,-100.0);

glBegin(GL_TRIANGLES); // رسم المثلث

glVertex3f( 0.0, 10.0, 0.0); // النقطة العلوية

glVertex3f(-10.0,-10.0, 0.0); // النقطة السفلية اليسارية

glVertex3f( 10.0,-10.0, 0.0); // النقطة السفلية اليمينية

glEnd();

glColor3f(0.0,0.0,1.0);

glTranslatef(0.0,0.0,-10.0);

glBegin(GL_LINE_LOOP);//start drawing a line loop

glVertex3f(-1.0f,0.0f,-5.0f);//left of window

glVertex3f(0.0f,-1.0f,0.0f);//bottom of window

glVertex3f(1.0f,0.0f,0.0f);//right of window

glVertex3f(0.0f,1.0f,0.0f);//top of window

glEnd();//end drawing of line loop

glutSwapBuffers();

}

الكود ده كامل انا انشأته على الفيجوال سى ++ 2008 مع استخدام مكتبة الاوبن جى ال

المثال ده لما تشغله بيطلع شاشة خلفيتها اسود و مرسوم عليها المثلث او اى شئ اخر انا رسمته

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

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

لو تقدر تكتبلى كود اضافة زر فقط يبقى كتر خيرك وانا ان شاء الله هاعرف اضافة باقى الكونترول

لو فى مكتبة تانيه غير ال GLUI زى مثلا QT ياريت تقدر تشرحهالى لو مش هاينفع يبقى مكتبة GLUI

ومتشكر جدا مره تانية على تعبك معايا

تم تعديل هذه المشاركة بواسطة sookkaa في 20 سبتمبر 2010 في 00:37

#10
اقتباس

و فى مكتبة تانيه غير ال GLUI زى مثلا QT ياريت تقدر تشرحهالى لو مش هاينفع يبقى مكتبة GLUI

ومتشكر جدا مره تانية على تعبك معايا

أنظر هذه الوثيقة هي عبارة عن مشروع صغير جدا opengl من بدايتة إلى نهايته بالكيوتي.

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

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

future.jpg

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

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

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

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

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