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

طريقة صنع زر بواسط Open Gl

بدأه *cpu* في 4 يناير 2010 · 12 رد · 2,215 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

كيف اصنع زر بحيث اذا ضغطت عليه تظهر لي خيارات المنيو

و هل يوجد طريقة لجعل النظام يحتفظ بالألوان التي يحددها المستخدم من خيارات المنيو؟بحيث عندما يخرج من البرنامج و يفتحه من جديد يجد نفس الالوان التي اختارها سابقا

و شكرا لكم

#2

مرحبا

في عالم الأوبن جي أل يمكن ذلك و لكن ليس بشكل مباشر , الطريقة سهلة فقط حاول.

غالبا مايعتمد المبرمجون على إستعمال أدوات النظام مباشرة, عن طريق إنشاء أزرار و قوائم و و و, ففي لينوكس نستعين بمكتبة x أما في وين دوز نستعين بمكتبة windwos.

مكتبة glut توفر ذلك فهي تعمل عمل المكتبتين السابقتين و لكن ليس بشكل تام, و كذلك فيما يخص qt فهو أيظا يوفر لك ذلك( لم يسبق لي و أن إستعملته لذا ليس لدي أي فكرة عنه).

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

مثلا:

ننشئ مربعا ثم نطبق علبه خاصية " picking and selection" و هكذا.....

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

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

future.jpg
#3

شكرا لك على التوضيح

ولكن اتمنى معرفة الطريقة بالضبط حيث أني مبتدئه في الرسم باستخدام open gl

#4
*cpu* كتب:

شكرا لك على التوضيح

ولكن اتمنى معرفة الطريقة بالضبط حيث أني مبتدئه في الرسم باستخدام open gl

بسم الله الرحمن الرحيم

مرحبا

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

حاولي التصرف و إقرأي الكثير من الأمثلة. إذهبي هنـــــــــــــــــــــــــــــــــــا

و في حالة مشكل ما عودي لنساعدك....

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

تم تعديل هذه المشاركة بواسطة 3ds max2010 في 6 يناير 2010 في 00:51

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

future.jpg
#5

اضافة بسيطة :

كما قال الاخ 3ds max ،

أحد الطرق هو أن ترسم بنفسك زر ، باستخدا الدالة glRect مثلاً ، ويمكن اكتشاف التصادم بين مؤشر الفأرة و الزر - مستطيل الشكل - أيضاً ( حتى بدون استخدام دوال مخصصة لذلك )

الامر سهل جداً ، لمن يفهم اسس البرمجة ،

هذا مثال بسيط لرسم زر ، واضافة تاثيرات عليه ، وأحداث أيضاً .. تخيّل ذلك !

طبعاً ، المثال بسيط ومليء بالعيوب لمن يلاحظها ،

بانتظار مقال الاخ 3ds Max ، حتى يغطي الموضوع بشكل أفضل ان شاء الله

#include <windows.h>
#include <GL/glut.h>

// function prototypes
void display(void);
void mouse(int b,int s,int x,int y);
void mouse_2(int x,int y);
void reshape(int w,int h);
int rectangle_left = 10;
int rectangle_top = 10;
int rectangle_right = 100;
int rectangle_bottom = 40;

const int green = 1;
const int red = 2;
int color = green;

bool isPointInsideRectangle(int x,int y)
{
	if(x> rectangle_left && x < rectangle_right)
		if(y>rectangle_top && y < rectangle_bottom)
			return true;
	return false;

}
// window identifier
static int win;

int main(int argc, char **argv)
{

	// initialize glut
	glutInit(&argc, argv);

	// specify the display mode to be RGB and single buffering 
	// we use single buffering since this will be non animated
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);

	// define the size
	glutInitWindowSize(500,500);

	// the position where the window will appear
	glutInitWindowPosition(100,100);
	win = glutCreateWindow("Button");

	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutPassiveMotionFunc(mouse_2);
	glutMouseFunc(mouse);

	////////////
	// OPENGL //
	////////////

	glClearColor(0.0,0.0,0.0,0.0);



	// enter the main loop
	glutMainLoop();

	return 0;
}

void reshape(int w,int h)
{

	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0,w,h,0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}
void display(void){


	glClear(GL_COLOR_BUFFER_BIT);

	if(color == green)
	{
		glColor3f(0.5,1,0.5);
	}
	else if(color == red)
	{
		glColor3f(1,0.5,0.5);
	}
	glRectf(rectangle_left,rectangle_bottom,rectangle_right,rectangle_top);


	glutSwapBuffers();
}

void mouse(int b,int s,int x,int y)
{
	if(isPointInsideRectangle(x,y) && s == GLUT_DOWN && b == GLUT_LEFT_BUTTON)
	{

		MessageBox(0,"You Clicked Me...","Info",MB_OK);
	}


}

void mouse_2(int x,int y)
{

	if(isPointInsideRectangle(x,y))
	{

		color = red;
	}
	else
	{

		color = green;
	}

	glutPostRedisplay();
}

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

شكرا

تم تعديل هذه المشاركة بواسطة persoon في 7 يناير 2010 في 17:43

You CAN

#7

الاخ الشمري

جزاك الله كل خير .. مثال جدا رائع

سؤالي

هل أستطيع إضافة أحداث أخرى تحدث على نفس الرسمه

مثلا عند الضغط على الزر

يظهر مربع مرسوم أو يتغير لون الخلفيه

أو تظهر للمستخدم قائمه ليختار لون الخلفيه

#8

نعم بالطبع

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

future.jpg
#9

سؤال في السياق، هل يوجد مكتبة لتصميم ال GUI في ال OpenGL (لم أقرأ كل شيئ مكتوب في الموضوع لذلك قد تكون الإجابة موجود :D)

#10
اقتباس
سؤال في السياق، هل يوجد مكتبة لتصميم ال GUI في ال OpenGL (لم أقرأ كل شيئ مكتوب في الموضوع لذلك قد تكون الإجابة موجود :D)

بالطبع، هنالك الكثير بجميع مستويات التعقيد: (لم أجرب أي منها)

#11

فكرت للحظة عمل شيئ من هذا القبيل ولكن النتيجة كانت محبطه :D

تم تعديل هذه المشاركة بواسطة *خلدون خالد* في 7 يناير 2010 في 21:43

#12

مرحبا

حينما تنتقل لنمط اللعبة بشكل عام فإنه لا مجال هنا لكي ندعم الواجهات. بل كل شيء سيكون مبني على المكتبة gl.

تأتي مرحلة الواجهات قبل تصميم اللعبة , إذ يتوجب تصميم برنامج بواجهة لتصميم الشخصيات و وضع الإكساءات و تحريرها في ملفات إلى غاية ذلك, في هذا النوع من المحررات يتوجب إستعمال الواجهات لغرض التسهيل.

و مكتبة glut لم تأتي لغرض تكملة المكتبة gl بل لغرض تسهيل تعليم المكتبة gl.

أما باقي المكتبات أراها مشتقة من المكتبة glut و جاءت بعد فشل المكتبة glut في بعض الأشياء.

أرجوا أن لا يكون ما قلته خارج عن السياق و إعتبروه تكملة للنقاش لا غير.

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

future.jpg
#13

استخدمت GLUI سابقاً في مشروع .

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

اذكر من المكتبات الجيدة ، مكتبة ظهرت فيgamedev.net ولكن يبدو أن المشروع مات ، -أظن أن لدي نسخة من المكتبة-

مكتبات GUI سهلة وجميلة ، ولكن لكثرتها ، تكثر الحيرة ، فلا نستخدم أياً منها ،

اقتباس
فكرت للحظة عمل شيئ من هذا القبيل ولكن النتيجة كانت محبطه

تصميم مكتبة GUI ليست صعبة ، اذا كانت الأدوات التي تستخدم جاهزة ( مكتبة رسومية ( أصعب نقطة قد تكون في تطوير محرك خطوط ، وآليه لعمل Clipping ) - آلية للتعامل مع الأحداث ) ،

سنقوم بها في محرك الأندلس ان شاء الله :-) .

الأفكار كثيرة والوقت لايسمح لأن تظهر إبداعاات الأعضاء أخي خلدون :P

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

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