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

كيف اعمل تحريك للشكل بواسطه Glmulmatrix وليس باستخدام Gltranslate

بدأه basma11 في 31 أكتوبر 2008 · 3 رد · 980 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

انا كنت عايزه اعمل تحريك لشكل مربع بس من غير

gltranslatef()

انا عايزه باستخدام ضرب المصفوفات

glmultmatrixf()

بس مش عارفه ازاى اطلع الناتج وارسمه

#2

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

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

تحتاج الى انشاء مصفوفة عادية بالسي .. وتعديل بيانات تلك المصفوفة مباشرة ... ( بدلا من الاعتماد على 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(....);

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

تم تعديل هذه المشاركة بواسطة الشمري في 1 نوفمبر 2008 في 16:31

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

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

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

المفروض انا هعمل

glloadidentity()

glmultmatrix(m); //m is transformation form

glmultmatrix(n); // n is point we want to transform

ولكن المشكله ازاى اخد الناتج و ارسمه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#4

لا يمكن أن نضرب متجه 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

تم تعديل هذه المشاركة بواسطة الشمري في 4 نوفمبر 2008 في 07:22

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

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

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

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

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

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