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

مشكلة مع رسم الدائرة وتعبئتها بالالوان ( OpenGL)

مغلق
بدأه had في 29 مارس 2007 · 3 رد · 4,806 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي سؤال وهو لمن نرسم الدئره كيف نخليها ملونه من جوه وكأنها حقيقيه

وكمان الشكل البيضاوي ellipse انا ابغى ارسمه على شكل حشره ولمن عملته صار شكله

كأنه خطوط ومايتلون كمان بترتيب

وعندي برنامج اخدته من المنتدى نفسي اسوي زيه ولكن ماناي فاهمهته

يعني انا مستغربه من البرنامج لأنه رسم دائره ولكن ماحدد الأحداثيات يعني لو انا ابغى

اسوي زيو كيف اعرف جمها ومكانها

انا حنزلوا وممكن تفهمني فيه

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

وومكن تفــتح على الخــاص ضروري لأني ارسلتلك -- وانتظر الرد

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

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

/*  Initialize material property, light source, lighting model,
 *  and depth buffer.
 */
void init(void) 
{
   GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
   GLfloat mat_shininess[] = { 50.0 };
   GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };

   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_SMOOTH);

   glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);   // aledaah alfedi
   glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); //aledaah alfedi  
   glLightfv(GL_LIGHT0, GL_POSITION, light_position);

   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);
   glEnable(GL_DEPTH_TEST);
}
//************************************//
void display(void)
{
   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glutSolidSphere (1.0, 100, 16);
   glFlush ();
}

//********************************************//
void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity();
   if (w <= h)
	  glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,
		 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
   else
	  glOrtho (-1.5*(GLfloat)w/(GLfloat)h,
		 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}
//**********************************************//
void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
	  case 27:
		 exit(0);
		 break;
   }
}
//*************************************************//
int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize (500, 500); 
   glutInitWindowPosition (100, 100);
   glutCreateWindow (argv[0]);
   init ();
   glutDisplayFunc(display); 
   glutReshapeFunc(reshape);
  glutKeyboardFunc(keyboard);
   glutMainLoop();
   return 0;
}

تم تعديل هذه المشاركة بواسطة الشمري في 29 مارس 2007 في 22:01

#2
اقتباس
ندااااااء للمهندس الشــــــــمري, تكفون ساعدوني

أجل صرت مهندس :P .

اخي من قوانين المنتدى .. عدم توجيه السؤال لعضو محدد + اختيار عنوان مناسب .

قمت بتعديل العنوان ومحتوى الموضوع .. حتى لا يكون مخالف ..

مسألة الرسالة الخاصة ,,

سأغتنمها فرصة واقول ..

أنا لست متفرغا على الاطلاق .. هذا الاسبوع عندي اربع اختبارات ..متتابعة .. ولا اجد الوقت حتى لكتابة كود واحد.

اضافة الى أني لست محترفا كما تظنون ,,

ممكن اني اقدر اساعد في اساسيات OpenGL ..ولكن انا لا افهم شيء بالخوارزميات .. ( خوارزمية رسم دائرة - خط

- منحنى الخ) .

بالنسبة لاسئلتك :

اقتباس
1- عندي سؤال وهو لمن نرسم الدئره كيف نخليها ملونه من جوه وكأنها حقيقيه

وكمان الشكل البيضاوي ellipse انا ابغى ارسمه على شكل حشره ولمن عملته صار شكله

كأنه خطوط ومايتلون كمان بترتيب

تستطيع ترسم دائرة وتلونها من الداخل بعدة طرق ..

انا لا اعرف الطرق الخوارزمية .. كل ما اعرفه .. باستخدم اوامر OpenGL.

ستجد هذا المثال كتبته قبل مدة .. لعله يفيدك ..

/index.ph...51&hl=دائرة

2- المثال الذي أرفقته يرسم كرة وليس دائرة ..

glutSolidSphere (1.0, 100, 16);

حيث البارمتر الاول يمثل قطر الدائرة (او نصف قطرها لا اذكر بالظبط) وهو هنا 1 .

والبارمترات الباقية تمثل عدد المضلعات المرسومة حيث كل ما كثرت الملضلعات زادت نعومة الكرة ,

لكن الكرة تظهر على شكل دائرة لانك تستخدم اسقاط من نوع orthographic . وهو يستخدم عادة لاظهار اشكال ليس لها عمق ( ثنائية الابعاد) ..

قم بتغيير هذا السطر

	glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,
		 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);

بالسطر التالي :

 gluPerspective(45,w/h,.1,-100);

وايضا اكتب

   glTranslatef(0,0,-12);
   glutSolidSphere (1.0, 100, 16);

ليظهر الشكل الثلاثي الابعاد بوضوح .

--------------------

* اذا تتحكم بشكل الدائرة .. من خلال البارمترات للدالة glutSolidSphere

* واما موقعها فيكون افتراضي مالم تقم بتغييره .. وتستطيع تغييره عن طريق الدالة glTranslatef .

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

--

اضافة :

هناك نقطة نسيت اذكرها ..

أنت لا تستطيع تلوين شكل وانت تستخدم الاضاءة الا باستخدام الmaterial وهي موضوع اخر في OpenGL.

على العموم هذا مثال يستخدم المكتبة glut ( حيث الرابط السابق يستخدم Win32 API )

لرسم دائرة وتلوينها

#include <GL/glut.h>
#include <stdlib.h>
#include <cmath>
using namespace std;

/*  Initialize material property, light source, lighting model,
*  and depth buffer.
*/

struct CPOINT {
	float x,y;
};

CPOINT cp[360];

//--------------- Draw Circle -----------------
	void glCircle(float radian,unsigned int softness,CPOINT cp[])
	{
 		glBegin(GL_POLYGON);
		 for(int i=0;i<360;i+=softness)
			 glVertex2f(cp.x * radian,cp.y*radian);
		 glEnd();

	 }
//--------------- Init Points---------------



void init(void) 
{
   	 for( int degree =0;degree<360;degree++)
	 {

		 double d=(degree*(3.14/180));
		 cp[degree].x=sin(d);
		 cp[degree].y=cos(d);

	 }
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_SMOOTH);
   glEnable(GL_DEPTH_TEST);
}
//************************************//
void display(void)
{
   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   	glColor3f(1,1,0); 
	glLoadIdentity();
	glTranslatef(1,0,0);
	glCircle(1,22,cp);
   glColor3f(1,0,0); 
	glLoadIdentity();
	glTranslatef(-1,0,0);
	glCircle(0.1,10,cp);


   glFlush ();
   glutSwapBuffers();

}

//********************************************//
void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity();
   if (w <= h)
	  glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,
		 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
   else
	  glOrtho (-1.5*(GLfloat)w/(GLfloat)h,
		 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);

   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}
//**********************************************//
void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
	  case 27:
		 exit(0);
		 break;
   }
}
//*************************************************//
int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize (500, 500); 
   glutInitWindowPosition (100, 100);
   glutCreateWindow (argv[0]);
   init ();
   glutDisplayFunc(display); 
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);
   glutMainLoop();
   return 0;
}

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#4

اولا انا بنــــــــت مو ولد

ثانيا: ماني عارفه اش اقلك اخوي الشمري الله يسعـــــدك ويوفقك دنيا واخره

الله يسهلك امورك وتنجح في المواد الي تدرسها كلها بأعلى الدرجات

والله اني ادعيلك من قلبي

تسللللللللللم

هذا الموضوع مغلق.

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

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

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

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

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