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

الدرس الأول Graphics In C++ Using OpenGL

رائج
بدأه Final Heaven في 6 مارس 2007 · 41 رد · 59,842 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#26

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

الطريقة التي إتبعتها في عمل برنامج Paint

أولا لقد قمت بكتابة كلاس لكل من أوامر الرسم من أمر رسم الخط و أمر رسم المربع و غيره

و كمثال هذا كلاس للنقطة و كلاس لرسم الخط:

#ifndef GLINTPOINT_H
#define GLINTPOINT_H

const int SCREEN_HEIGHT=480;
const int SCREEN_WIDTH=640;

class GLintPoint{
public:
	GLintPoint(){
		x=0;
		y=0;
	}
	GLint x, y;
};

#endif

#ifndef LINE_H
#define LINE_H

#include "glintpoint.h"

class Line{
public:
	GLintPoint linePoint;
	int LINE_WIDTH;
	int LINE_HEIGHT;
	Line(){
		LINE_WIDTH=40;
		LINE_HEIGHT=60;
		linePoint.x=50;
		linePoint.y=SCREEN_HEIGHT-20;
	}

	GLint getX(){
		return linePoint.x;
	}

	GLint getY(){
		return linePoint.y;
	}

	GLint getNextX(){
		return (linePoint.x+LINE_WIDTH);
	}

	GLint getNextY(){
		return (linePoint.y-LINE_HEIGHT);
	}

	void drawLineTool(){
		glBegin(GL_LINES);
		glVertex2i(80,(SCREEN_HEIGHT-30));
		glVertex2i(60,(SCREEN_HEIGHT-70));
		glEnd();
		glFlush();
	}

	void drawPressedLineTool(){
		glColor3f(0.0f, 0.0f, 0.0f);
		glRecti(getX(),getY(),getNextX(),getNextY());
		glColor3f(1.0f, 1.0f, 1.0f);
		glBegin(GL_LINES);
		glVertex2i(80,(SCREEN_HEIGHT-30));
		glVertex2i(60,(SCREEN_HEIGHT-70));
		glEnd();
		glFlush();
	}
};

#endif

الكلاس الأول سهل و مفهوم و لكن فيه أيضا متغيران لتحديد حجم الشاشة التي سأعمل عليها للرسم

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

int LINE_WIDTH

int LINE_HEIGHT

هذه لتحديد حجم المربع الذي سيرسم فيه الخط على شريط الأدوات

أما drawLine

فهي لرسم أدات الخط على شريط الأدوات بالشكل العادي

أما drawPressedLineTool

فهي تعنى برسم الأداة بألوان مغايرة عند الضغط عليها في شريط الأدوات

أما في الملف الرئيسي الذي يحتوي على Main

فهذا شكل Mouse Function

void myMouse(int button, int state, int x, int y)
{
	if(line.getX()<x && line.getY()>y && line.getNextX()>x && line.getNextY()<(SCREEN_HEIGHT-y) && button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){
		setFalse();
		linePressed=true;
		drawToolsRectangle();
		line.drawPressedLineTool();
		pointsNumber=0;
	}

	glColor3f(Red, Green, Blue);
	if(linePressed && x>100 && button == GLUT_LEFT_BUTTON && state == GLUT_DOWN){
		if(pointsNumber==0){
			linePoint.x=x;
			linePoint.y=y;
			glBegin(GL_POINT);
			glVertex2i(linePoint.x,SCREEN_HEIGHT-linePoint.y);
			glEnd();
			glFlush();
			pointsNumber++;
		}
		else if(pointsNumber==1){
			pointsNumber=0;
			glBegin(GL_LINES);
				glVertex2i(linePoint.x,SCREEN_HEIGHT-linePoint.y);
				glVertex2i(x,SCREEN_HEIGHT-y);
			glEnd();
			glFlush();
		}
	}

	if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN){
		myDisplay();
	}
}

و كما ترون قمت بتحديد الأداة التي قمت بالضط عليها عن طريق Boolean و التي هي linePressed

و من ثم أقوم بإعادة رسم شرط الأدوات كي أزيل أي أداة كنت قد ضغط عليها قبلا و أقوم بإعادة رسم الأدات التي

ضغط عليها بألوان أخرى كي تكون مميزة كما رأينا في الكلاس Line في الأعلى

و بعدها هناك أرى إن كان مكان الضغط على الماوس هو مكان الرسم أم لا

و أقوم بالرسم ، و هنا لأنني أقوم برسم خط بين نقطتين فقط فقد إحتجت إلى variable لحساب كلما

أرسلت نقطتين عن طريق الماوس أقوم برسم خط بينهما و الذي هو pointsNumber

أتمنى أن أكون قد أفدتكم بهذا

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#27

السلام عليكم

اقتباس
تقدر على تحميله مجانا من موقع Microsoft

من هذا الرابط يمكن تحميل dot net framwork 2.0

http://www.microsoft.com/downloads/details...;displaylang=en

من هذا الرابط يمكن تحميل dot net framwork 3.0

http://www.microsoft.com/downloads/details...;displaylang=en

اقتباس
إن شاء الله سأشرح طريقة عمله إن شاء الله و لكن إصبر علي أسبوعين حتى أنهي إمتحاناتي

إن شاء الله بالتوفيق

#28

شكرا لكم إخوتي

سأكمل هذه function التي أرسم بها شريط الأدوات في البرنامج و أستخدم فيها drawLineTool من كلاس Line

لرسم الخط في مكانه على شريط الأدوات

void drawToolsRectangle(){
	glColor3f(0.84f, 0.84f, 0.84f);
	glRecti(0,0,100,SCREEN_HEIGHT);

	glColor3f(1.0f, 1.0f, 1.0f);

	glBegin(GL_LINE_LOOP);

		glVertex2i(10,(SCREEN_HEIGHT-20));
		glVertex2i(90,(SCREEN_HEIGHT-20));
		glVertex2i(90,(SCREEN_HEIGHT-200));
		glVertex2i(10,(SCREEN_HEIGHT-200));

	glEnd();

	glBegin(GL_LINE_LOOP);

		glVertex2i(90,(SCREEN_HEIGHT-200));
		glVertex2i(90,(SCREEN_HEIGHT-260));
		glVertex2i(10,(SCREEN_HEIGHT-260));
		glVertex2i(10,(SCREEN_HEIGHT-200));

	glEnd();

	glBegin(GL_LINES);

		glVertex2i(30,(SCREEN_HEIGHT-200));
		glVertex2i(30,(SCREEN_HEIGHT-260));

		glVertex2i(50,(SCREEN_HEIGHT-200));
		glVertex2i(50,(SCREEN_HEIGHT-260));

		glVertex2i(70,(SCREEN_HEIGHT-200));
		glVertex2i(70,(SCREEN_HEIGHT-260));

	glEnd();

	glColor3f(0.0f, 0.0f, 0.0f);
	glRecti(10,(SCREEN_HEIGHT-200),30,(SCREEN_HEIGHT-260));

	glColor3f(1.0f, 0.0f, 0.0f);
	glRecti(30,(SCREEN_HEIGHT-200),50,(SCREEN_HEIGHT-260));

	glColor3f(0.0f, 1.0f, 0.0f);
	glRecti(50,(SCREEN_HEIGHT-200),70,(SCREEN_HEIGHT-260));

	glColor3f(0.0f, 0.0f, 1.0f);
	glRecti(70,(SCREEN_HEIGHT-200),90,(SCREEN_HEIGHT-260));

	glColor3f(1.0f, 1.0f, 1.0f);
	glBegin(GL_LINES);

		glVertex2i(10,(SCREEN_HEIGHT-80));
		glVertex2i(90,(SCREEN_HEIGHT-80));

		glVertex2i(10,(SCREEN_HEIGHT-140));
		glVertex2i(90,(SCREEN_HEIGHT-140));

		glVertex2i(10,(SCREEN_HEIGHT-200));
		glVertex2i(90,(SCREEN_HEIGHT-200));

		glVertex2i(50,(SCREEN_HEIGHT-20));
		glVertex2i(50,(SCREEN_HEIGHT-200));

	glEnd();

	glColor3f(0.0f, 0.0f, 0.0f);
	line.drawLineTool();
}

و كما ترون فقد بدأت برسم المستطيل الكبير لشريط الأدوات و من ثم قمت بتحديد و تقسيمها إلى مربعات عبر

رسم خطوط بيضاء لتحديد حدود كل أداة من الأدوات و في النهاية قمت برسم الخط و الذي هو كلاس Line

في مكانه الذي حددته له على شريط الأدوات كي أقوم بالنقر عليه و إستخدامه للرسم

و هذا هو الكود للبرنامج مع وجود LineTool فقط

Paint_Draw_Line.zip

تم تعديل هذه المشاركة بواسطة Final Heaven في 5 يوليو 2007 في 05:41

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#30

لدي سؤال بخصوص أوبن جي إل .....

هل تعمل تلك الأشياء في لينوكس ؟؟؟؟

#31

نعم تقدر على إستخدام OpenGL في Linux

و الأسهل من خلال بحثي إستخدامك ل JOGL و عن طريق Netbeans هناك تسهيل رائع

و يمكنك من إنشاء ذات البرنامج على عدّة نظم تشغيل و تراها من هنا:

https://netbeans-opengl-pack.dev.java.net/

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#32

Bouncing Ball

Ball_Bounce_Exe.zip

Ball_Bounce_SRC.zip

و كن فتى في ذرى العلياء همّته

يسمو بغاياته حتى على زحل

موقع خاص بي

My Website

قمت بتصميم لعبة بسيطة بإستخدام اللغة الجميلة الجافا

Plane Fighter Game

برنامج جميل بلغة الجافا يساعد على تنظيم المشاكل

The TS Organizer

#33

السلام عليكم

بارك الله فيك على هذا الشرح الرائع

ولكن اطلب منكم مساعدة اريد كود للماوس والكيبورد حيث عندما ارسم خط او اي شي وضغطت حرف d يعمل ديليت لاخر خط رسمتو او يمسحو كله

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

دعواتكم لاهلنا في غزة

#34

ياشباب أبغى اعرف كيف ارسم نجمة باللون الأحمر ونجمة على شكل

مضلعات

#35

أخي ,استخدم البحث حتى لا تضطر لسؤال أحد :) ..

عموما هنا المطلوب :

/index.ph...652&hl=نجمة

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#36

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

الله يجزاك خير أخوي العزيز

بس انا عندي مشكله اخوي

انا مشكلتي انو مكتبة OGL

ماهي عندي وانا من مستخدمي برنامج MVBC++ 6.00

وانت من الرابط اللي انت حاطه مو راضي يحمل معاي فياليت ترفعه على رابط ثاني او تشوف له حل

وتعلمني كيف اثبته؟؟ اوين؟؟

وايضا عندي مشروع واتمنى انك تساعدني فيه للجامعه واكون لك من الشااكرين وياليت ترد على رسالتي الخاصه عشان اقدر اتفاهم معاك اخوي وتحيااتي للجميع ،،،،،،،

#37

لو سمحتم اريد رابط ملف paint.zip

الرابط لا يعمل وانا محتاجه كثير... وجزاكم الله كل خير

#38

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

اريد شرح لحركات الفأرة والكيبورد

في opengl لكن win32 ليس كونسول

وطريقة استدعائها في main

ضروري

وشكرا

#39

راجع دروس علي الدعيج .....رحمه الله.

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

future.jpg
#40

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

#41

اخ 

Final Heaven   لو سمحت ابي اتواصل معاك ع الايميل لاني اريد اقدم مشروع بخصوص هالمهاده الرسم بالحاسب واريد مساعدتك لي جزاك الله خيرا لان دكتورتنا امرتنا ان نشرح كل كود واريد تتعاون معي لو سمحت بذالك
#42

شكر جزيلا على الشرح

 

ممكن تكمل شرح 

camera 

في  openGL

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