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

تعقيباً على موضوع رسم دائرة ! لدي استفسار

مغلق
بدأه ساره** في 11 مايو 2007 · 2 رد · 1,856 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم::

اطلعت على أغلب الموضوعات التي تختص برسم دائرة في برنامج ++Visual C وليس Visual Studio

بمكتبة الــOpen Gl والحمد لله استطعت رسمها ولكن يبقى لدي سؤال؟؟؟

عندي شكل مجسم ((لكائن)) وأريد رسم ملامحه ( العينان والفم والأنف) ولم أستطع التحكم لابحجم الدائرة ومكانها داخل الكود؟؟

ياليت أحد يوضحلي ماهو السطر بالضبط في الكود هو اللي يتحكم بما أردت السؤال عنه؟؟؟

هذا الكود

#include <GL/glut.h>

#include <stdlib.h>

#include <cmath>

/* 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,1);

glLoadIdentity();

glTranslatef(1,0,0);

glCircle(1,8,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;

}

ولكم جزيـــــــــــــــــل الشكر::

تم تعديل هذه المشاركة بواسطة ساره** في 11 مايو 2007 في 15:56

#2

شكرا تم حل الاشكال

تم تعديل هذه المشاركة بواسطة ساره** في 15 مايو 2007 في 16:31

#3

شكل الاخت تضايقت لعدم الرد ,,

عموما .. ننفع غيرها ,,

هذه الاسطر هي التي تتحكم بالرسم

glLoadIdentity();
glTranslatef(-1,0,0);
glCircle(0.1,10,cp);

السطر الاول اعادة الرسم الى نقطة الاصل ( افهميها كذا ) .

السطر الثاني يحرك الشكل الى المكان الذي تريدين . ( حسب ما الاحداثيات التي تضعينها ).

السطر الثالث يرسم الدائرة . البارمتر الاول هو نصف قطر الدائرة ..بالتالي كلما زادت القيمة زادت المساحة .

اما البارمتر الثاني فهو لدقة الدائرة ( نعومتها).

ملاحظة :

أتمنى تغيير طريقة الاحداثيات الموجودة في الدالة reshape كالتالي .

glOrtho (-100, 100, -100,100, -10.0, 10.0);

لتتحكمي بالشكل بسهولة .

مثال :

لرسم أربعة دوائر بعدة احجام والوان ومواقع :

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

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,1); 
glLoadIdentity();
glTranslatef(20,0,0);
glCircle(20,10,cp);

// الدائرة الثانية
glColor3f(1,0,0); 
glLoadIdentity();
glTranslatef(-20,0,0);
glCircle(12,10,cp);

// الدائرة الثالثة
glColor3f(1,1,0); 
glLoadIdentity();
glTranslatef(-20,20,0);
glCircle(8,30,cp);

// الدائرة الرابعة
glColor3f(1,0,1); 
glLoadIdentity();
glTranslatef(-20,-20,0);
glCircle(4,30,cp);

glFlush ();
glutSwapBuffers();

}

//********************************************//
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho (-100, 100, -100,100, -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

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

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

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

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

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

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