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

طلب مساعدة: كيفية تحرك كائن تبعاً لحركة الماوس في 3d

بدأه Manal A في 4 مارس 2009 · 5 رد · 1,443 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا عضوة جديدة في المنتدى وهذا أول موضوع لي وأتمنى تساعدوني في أقرب فرصة

أبرمج لعبة Ping Pong في 3D باستخدام C++ And OpenGL

لم أجد ولا رابط في النت يشرح كيفية تحريك الكائنات باستخدام الفأرة مع مثال source code بفعالية، الcode تبعي حالياً شغال تمام في 2D ولكن ليس في 3D مع الأخذ في الاعتبار للPROJECTION.

أتمنى أجد منكم المساعدة قريباً، بقي يومين على تسليم المشروع ولم يبقى علي إلا هذا الشئ البسيط!

في انتظاركم:

void handle_mouse_motion(int x, int y)

{

if (g_leftButtonState == GLUT_DOWN) {

g_puddleCenter[0] -= g_leftButtonLastX - x;

g_puddleCenter[1] += g_leftButtonLastY - y ;

g_leftButtonLastX = x;

g_leftButtonLastY = y;

glutPostRedisplay();

}

}

void HandlePassiveMotion(int x,int y)

{

g_leftButtonLastX = x;

g_leftButtonLastY = y;

}

#2

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

- يوجد درس عن ping pong ,, لكن ثنائية الابعاد ( لم يكتمل الموضوع )

/index.ph...07&t=103477

- بالنسبة لاستقبال مدخلات الفأرة , فهناك مشكلة , حيث احداثيات الفأرة التي يعطيها النظام تختلف عن الاحداثيات التي يتبعها OpenGL , يمكن حل هذا الشكال بعدة طرق , منها أن تجعلي الاحداثيات مطابقة لاحداثيات الويندوز , أو بمكتابة معادلة ما لتحويل هذه الاحداثيات , أو استخدام الدالة

gluUnProject لتقوم بحل الاشكال ,

http://www.opengl.org/documentation/specs/.../unproject.html

الخلاصة , أنه لا يمكن استخدام احداثيات الفأرة مباشرة , الا بعمل تحويل الى قيم يمكن عرضها في opengl ,

- باالنسبة للـ picking يمكن استخدام أحد خدمات Opengl

http://www.lighthouse3d.com/opengl/picking/

تم تعديل هذه المشاركة بواسطة الشمري في 5 مارس 2009 في 02:43

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

السلام عليكم

أشكر لك الرد أخي الكريم،

في الحقيقة توصلت للحل، الكثير من الرياضيات لتحويل أو عمل mapping لاحداثيات الفأرة من Viewing Coordinates إلى Device Coordinate مروراً بـNormal Coordinate، ولكن زبدة الكلام هي أن الفأرة تتحرك في 3D في المستوى حيث قيمة z ثابتة، فيجب علينا ان نجد الفرق بين xmax and xmin ونفس الكلام لـymax and ymin ومن ثم نطرح الفرق من قيمة x للفأرة ومطرح منها xmin for clipping window وبعد ذلك نقسمها على الفرق، ونكرر الفعل لy. وهكذا.

بصيغة أخرى وللتبسيط للقارئ الكريم، تتحرك الفأرة في المستوى(z (Z normal coordinate ما بين قيمتين [-1,1] حيث -1 هي الركن الأيسر السفلي و1 هي الركن الأيمن العلوي، وأيّاً كان البكسل على الشاشة الذي يحدده المؤشر فإن نتيجة عمل mapping عليه ستكون بين هاتين القيمتين، فلو ضربنا قيمتي x,y للفأرة بقيمة صغيرة بينهما (يعتمد على مساحة الشاشة المستخدمة في الرسم) فسنحصل على حركة للكائن أكثر ما تكون مطابقة لحركة الفأرة.

g_puddleCenter[0] -= (g_leftButtonLastX - x)*0.25f;

g_puddleCenter[1] += (g_leftButtonLastY - y)*0.25f;

أرجو أن أكون أوضحت الصورة، الموضوع معقد للتحويل من الاحداثيات في الواقع لإحداثيات الشاشة وخصوصاً في 3d.

شكراً مجدداً.

#4

سلام عليكم

ايمكنك وضع المعادلات

او وضع فنكشن نعطيها ال x,y العائده من الماوس وتعطينا

vector يحمل النقطه المطلوبها

#5

وعليكم السلام

استخدم الدالة gluUnProject

مثال :

http://web.iiit.ac.in/~vkrishna/data/unproj.html

http://web.iiit.ac.in/~vkrishna/data/unproj.c

تعيد لك في النهاية الاحداثيات في المتغيرات objx, objy, objz .. لتستخدمها في برنامجك .. بالتوفيق أخي ..

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#6

انا شغال بيها فعلا

واستخدمتها مع ال terrain وكل شئ عندي تمام

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

الهي استخدمتها

----------

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

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

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

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

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