المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: كيف اعمل تحريك للشكل بواسطه Glmulmatrix وليس باستخدام Gltranslate
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات لغات البرمجة العام > منتدى برمجة الألعاب والجرافيكس والتصميم > قسم : برمجة الألعاب والجرافكس باستخدام مكتبة OpenGL .
basma11




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

انا كنت عايزه اعمل تحريك لشكل مربع بس من غير
gltranslatef()
انا عايزه باستخدام ضرب المصفوفات
glmultmatrixf()
بس مش عارفه ازاى اطلع الناتج وارسمه


[/b]

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

سأجاوب على السريع .

تحتاج الى انشاء مصفوفة عادية بالسي .. وتعديل بيانات تلك المصفوفة مباشرة ... ( بدلا من الاعتماد على glTranslate التي تعدلها لك)

مثال عام :
ضعي قيم الاحداثيات المطلوبة
كود
float x = 0.1f;
float y = 0.1f;
float z = 0.0f;
float m[ ]={ 1, 0 , 0, x,
                    0, 1 , 0, y,
                    0, 0 , 1 , z,
                    0, 0 , 0 , 1};

glMatrixMode(GL_MODEL_MATRIX);
glLoadIdentity();
glMultMatrixf(m);

glBegin(........);
....
...
glEnd(....);


هذه لمحة عامة .. وقد تحتاج لتعديل بعض الأمور هنا وهناك .
basma11
جزاك الله خيرا

ولكن ازاى هرسم المصفوفه m
المفروض انا هعمل

glloadidentity()
glmultmatrix(m); //m is transformation form
glmultmatrix(n); // n is point we want to transform


ولكن المشكله ازاى اخد الناتج و ارسمه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
الشمري
لا يمكن أن نضرب متجه Vector ( أو نقطة كما كتبت ذلك ) .. بمصفوفة .. بشكل مباشر في OpenGL .. ولكن يمكن أن نضرب مصفوفة بمصفوفة ..

في المثال الذي وضعته .. أنا عدلت مباشرة على المصفوف m ( في قيم x و y و z ) .. حيث أن x و y و z هي احداثيات النقطة .

لذلك .. اذا أردت أن تظهر للدكتور .. أنك ضربت متجه في مصفوفة ..فيجب أن تكتب ذلك بشكل يدوي أيضا ..

بكتابة شيء شبيه بالتالي :

كود
float x = 0.1f;
float y = 0.1f;
float z = 0.0f;

float m[ ]={ 1, 0 , 0, 0,
                    0, 1 , 0, 0,
                    0, 0 , 1 , 0,
                    0, 0 , 0 , 1};
   m[12] = x;
   m[13] = y;
   m[14] = z;
   m[15] = 1.0f;

glMatrixMode(GL_MODEL_MATRIX);
glLoadIdentity();
glMultMatrixf(m);

glBegin(GL_POINTS)
glVertex3f(0,0,0);
glEnd();


أو يمكنك حتى أن تضرب مصفوفة بمصفوفة ,

كود
float x = 0.1f;
float y = 0.1f;
float z = 0.0f;

// اعتبر هذه المصفوفة هي transformation
// وعدل على قيمها .. بعد أن تقرأ عن المصفوفات في اوبنجل
float m[ ]={        1, 0 , 0, 0,
                    0, 1 , 0, 0,
                    0, 0 , 1 , 0,
                    0, 0 , 0 , 1};

float n[ ]={        1, 0 , 0, x,
                    0, 1 , 0, y,
                    0, 0 , 1 , z,
                    0, 0 , 0 , 1};
glMatrixMode(GL_MODEL_MATRIX);
glLoadIdentity();
glMultMatrixf(m);
glMultMatrixf(n);

glBegin(GL_POINTS)
glVertex3f(0,0,0);
glEnd();


مع العلم أني لم أجرب هذه الاكواد على أي مترجم ,, ولكن أظنها صحيحة ,

ابحث عن Matrix ( وتحديدا في OpenGL ) .. وستجد مقالات للأخ أحمد صالح مفهرسة في القسم العام .

وانظر مثلا لهذا المثال الذي يشرح طريقة استخدام Matrix خاصة بك :
http://www.ultimategameprogramming.com/zip...MatrixClass.ZIP
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.