المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: كيف أحرك دائره بإستخدام الماوس
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى برمجة الألعاب والجرافيكس والتصميم > قسم : برمجة الألعاب والجرافكس باستخدام مكتبة OpenGL .
وريف
السلام عليكم ورحمة اللوبركاته
أنا رسمت كوره ولكن عجزت إني أحرك هذه الكوره
mouse function بإستخدام
بحيث إني إذا ظغط الزر اليسار في مكان معين
تتحرك الكوره لهذا المكان
وهكذا إذا ظغط في أي مكان


وشكرا
أرجوا المساعدة
الشمري
وعليكم السلام ورحمة الله وبركاته .

تختلف احداثيات OpenGL الثلاثية الابعاد عن احداثيات الماوس .. وهذا شيء طبيعي .. ظهرت عدة حلول .. أسهلها استخدام أحد دوال OpenGL .. وهي :
gluUnProject


بالامكان الاستفادة من هذه الروابط ./
http://pyopengl.sourceforge.net/documentat...Project.3G.html
http://www.gamedev.net/community/forums/to...?topic_id=65558

يوجد مثال بلغة البايثون ... أعتقد أنكم تبرمجون بلغة السي ...

اذا لم أنسَ .. سأضيف مثال هنا ..
وريف
شكرا لك أخي ولكني في برنامجي لم أستخدم ثلاثة أبعاد وإنما بعدين فقط
وهي تنحل بإستخدام
mouse function
ولكني لا أعرف كيف أقرأ نقطة x,y إذا نقرت بالزر اليسار للماوس على هذه النقطه حتى تتحرك الكره إلى هذه النقطه
الشمري
إقتباس
شكرا لك أخي ولكني في برنامجي لم أستخدم ثلاثة أبعاد وإنما بعدين فقط

اذا المشكلة صارت أسهل ..


إقتباس
ولكني لا أعرف كيف أقرأ نقطة x,y إذا نقرت بالزر اليسار للماوس على هذه النقطه حتى تتحرك الكره إلى هذه النقطه


مثال :

كود
void mouse(int button, int state, int x, int y)
{
    if (button == GLUT_RIGHT_BUTTON)
    {
if (state == GLUT_DOWN)
     cout << "Right button pressed"
     << endl;
else
     cout << "Right button lifted "
     << "at (" << x << "," << y
     << ")" << endl;
    }
}


في الmain

كود
glutMouseFunc(mouse);


شرحت هذه الدوال في هذا الموضوع :

دروس حول المكتبة glut


لكن تبقى مشكلة التحويل من والى نظام احداثيات OpenGL .

هناك حلين :

1- أن تجعلي احداثيات OpenGL مثل احداثيات أي نافذة في الويندوز .
2- ان تعملي معادلة بسيطة للتحويل من والى OpenGL .


مرة ثانية ..اذا رجعت للبيت عملت المثال ..( ان شاء الله ما أنسى هذه المرة regular_smile.gif ) .. حاليا في الجامعة ولا اظنهم مثبتين OpenGL ....
لكن اذا كان ممكن .. اضيفي الجزء الخاص بالمنفذ .. مثال :

كود
glViewport(.......); // ماهي القيم الموجودة هنا

glOrtho(...........);// ماهي القيم الموجودة هنا


حتى نعطيك من الاخر .
وريف
شكرا جزيلا لك على مجهودك
ولكني مبتدئه في open gl
فأرجوا أنك تحملني شوي

قبل ماأشوف ردك أستطعت أن أحرك الكوره ولكن بشكل عشوائي
كود
     #include <GL/glut.h>
#include <math.h>


const float PI = 3.14159;

void init (void)
{
glClearColor (1.0, 1.0, 1.0, 0.0);
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 400.0, 0.0, 300.0);
}
void displayiFcn (void)
{
glClear (GL_COLOR_BUFFER_BIT); // Clear display window.

glColor3f (1.0, 0.0, 0.0);

float theta;
float x , y;

glBegin (GL_POLYGON); // For a solid circle


for (theta = 0; theta < (2 * PI); theta += 2 * PI / 10000)
{
x = 200 + 50 * cos(theta);
y = 150 + 50 * sin(theta);
glVertex2f (x,y);
}
glEnd ( );
glFlush ( );
}

void displayFcn (void)
{
glClear (GL_COLOR_BUFFER_BIT); // Clear display window.

glColor3f (1.0, 0.0, 0.0);

float theta;
float x , y;

for (int i = 240; i >= 50; i--)
{

glBegin (GL_POLYGON);

for (theta = 0; theta < (2 * PI); theta += 2 * PI / 10000)
{
glVertex2f (x,y);
y = i + 50 * cos(theta);
x =i + 50 * sin(theta);

}

glEnd ( );
glFlush ( );
glClear (GL_COLOR_BUFFER_BIT); // Clear display window.
}


}
void mouse(int button, int state, int x, int y)
{

switch (button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)

glutIdleFunc (displayFcn);
break;

case GLUT_RIGHT_BUTTON:
if (state == GLUT_DOWN)
//glutIdleFunc(NULL);
break;
default:
break;
}
}

int main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition (100, 100);
glutInitWindowSize (400, 300);
glutCreateWindow ("Moving Circle");

init ( );
glutDisplayFunc (displayiFcn);

glutMouseFunc(mouse);

glutMainLoop ( );
return 0;
}


هذا الذي أنجزته حتى الآن
أعرف أن الكود يدل عدم الخبره
ولكن منكم نستفيد
وريف
السلام عليكم ورحمة الله وبركاته

أخي الشمري لقد أستطعت حل مشكلتي ولله الحمد
وجزاك الله خيرا على إهتمامك وجهودك

بارك الله فيك وزادك علما وعزا
zizo.h
بس ما بهو شي الكود يعني 75%
الشمري
عذرا أختي الكريمة على تأخري في الرد .. والله كنت مجهز الكود من حوالي الاسبوع .. لكن طروف حالة دون اضافته ,

عموما الكود بالمرفقات .. وهو قريب مما طلبتيه .. لعل شخص اخر يستفيد منه .
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.