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

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

بدأه std في 11 ديسمبر 2008 · 2 رد · 847 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

أولاً عيد مبارك وكل سنة وأنتم طيبين

أنا عضو جديد في المنتدى

أنا طالب في علوم الحاسوب ولدي home works كثيرة وكان منها كيف ارسم نقاط باستخدام الماوس باستخدام الاوبن جي ال في الفيجول سي ++ حاولت أحلها بس مش عارف ايش الخطأ في البرنامج(ما كان في تنفيذ).

وهذا هو الكود الذي قمت بكتابته، وكتبته في general ثم empty project

#include "windows.h"

#include "glut.h"

#include <iostream>

using namespace std;

const int screenWidth = 480; // width of screen window in pixels

const int screenHeight = 640;



void myInit()

{

	glClearColor(0.9,0.0,0.7,0.0);

	glColor3f(0.3,0.6,0.5);

	glPointSize(4.0);

	glMatrixMode(GL_PROJECTION);

	glLoadIdentity();

	gluOrtho2D(0.0,640.0,0.0,480.0);



}





void render(void) 

{

	glClear(GL_COLOR_BUFFER_BIT);

	  //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glFlush();



}





void drawDot(int x, int y)

{ // draw dot at integer point (x, y)

	glBegin(GL_POINTS);

	glVertex2i(x, y);

	glEnd();

}





void myMouse(int button, int state, int x, int y)

{

if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)

drawDot(x, screenHeight-y);

else if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)

//exit(-1);

drawDot(x, screenHeight-y);

}







void main(int argc, char** argv)

{

	glutInit(&argc,argv);

	glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB);

	glutInitWindowSize(640,480);	 // set window size

	glutInitWindowPosition(50,50);

	glutInitWindowPosition(100, 150); // set window position on screen

	glutCreateWindow("drow by mouse");

	myInit();

	glutMouseFunc(myMouse);

	glutDisplayFunc(render);

	glutMainLoop();
}

فارجو منكم إذا في أي ملاحظات تردوا علي

وشكراً

#2

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

وكل عام وأنتم بخير ,

- اذا أردت رسم أي شيء .. فيجب أن ترسم داخل الدالة render لانك انت اخبرت النظام .. أن هذه الدالة هي التي ستقوم بالرسم .

- لذلك .. عند النقر على زر الماوس .. قم بتخزيين الاحداثيات بمتغيرين .. ومن دالة الرسم ارسم تلك النقطة .

- لاحظ انه اذا اردت ان ترسم مجموعة نقاط .. فانه يجب ان تخزن احداثيات كل نقطة في مصفوفة ديناميكية ( أو ثابتة ) .. ثم تعمل loop داخل render لتقوم برسم تلك النقاط .

الزبدة : استبدل الدوال الثالث السابقة .. بالجديدة .. التالية ..

int xPos = 0;
int yPos = 0;

void render(void) 

{

	glClear(GL_COLOR_BUFFER_BIT);

	drawDot(xPos, yPos);

	glFlush();



}





void drawDot(int x, int y)

{ // draw dot at integer point (x, y)

	glBegin(GL_POINTS);

	glVertex2i(x, y);

	glEnd();

}





void myMouse(int button, int state, int x, int y)

{

if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
xPos = x;
yPos = screenHeight - y;
}
else if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)

//exit(-1);
{
xPos = x;
yPos = screenHeight - y;
}
glutPostRedisplay(); //  تحديث 

}

- طبعا البرنامج يرسم نقطة واحدة فقط في كل نقرة , اذا اردت الاحتفاظ بالنقطة المرسومة .. يجب تخزن كل نقطة في مصفوفة أو vector .. ثم تعمل loop مثل ما قلت سابقا ’

تم تعديل هذه المشاركة بواسطة الشمري في 11 ديسمبر 2008 في 20:09

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

بصراحة المنتدى رائع واستفدت الحمد لله

طبعاً البرنامج اتنفذ عندي بعد ما عدلت مثل ما قلت وصار يرسم في كل نقرة نقطة

وإن شاء الله سوف أحاول ارسم اكثر من نقطة على نفس الشاشة باستخدام الـ loop

وهذا هو الكود بعد التعديل

#include "windows.h"
#include "glut.h"

const int screenHeight = 480; // height of screen window in pixels

int xPos = 0;
int yPos = 0;


void myInit()
{
	glClearColor(0.9,0.0,0.7,0.0);
	glColor3f(0.3,0.6,0.5);
	glPointSize(4.0);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0.0,640.0,0.0,480.0);
}


void drawDot(int x, int y)
{
	glBegin(GL_POINTS);
	glVertex2i(x, y);
	glEnd();
}


void render(void) 
{
	glClear(GL_COLOR_BUFFER_BIT);
	drawDot(xPos, yPos);
	glFlush();
}


void myMouse(int button, int state, int x, int y)
{
   if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
   {
	xPos = x;
	yPos = screenHeight - y;
   }
   else if(button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
   exit(-1);
   glutPostRedisplay(); //  تحديث 
}


void main(int argc, char** argv)
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB);
	glutInitWindowSize(640,480);	 // set window size
	glutInitWindowPosition(100, 150); // set window position on screen
	glutCreateWindow("draw by mouse");
	myInit();
	glutMouseFunc(myMouse);
	glutDisplayFunc(render);
	glutMainLoop();
}

تم تعديل هذه المشاركة بواسطة std في 12 ديسمبر 2008 في 11:31

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

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

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

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

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