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

Translate object- openGL

مغلق
بدأه gmo في 6 مارس 2006 · 6 رد · 1,547 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا,,

في openGL فيه function جاهزة تعمل translate وهي

glTranslated, glTranslatef - multiply the current matrix by a translation matrix

وظيفتها تحريك الكائن من مكان لاخر ,,, سؤالي كيف اعمل أنا function تعمل نفس عمل translate ارسل لها القيم و تتخزن في matrix وبعد كذا استخدم

glMultMatrixd, glMultMatrixf - multiply the current matrix with the specified matrix

فيه أحد عنده خلفية يقدر يفيدني

GMO,,

#2

لازم تعرف كيف يتم بناء الـ matrix المستخدم في الازاحة

و هو في الحقيقة بسيط, اذا ذاكرتي صحيحة فهو الـ identitiy matrix حجم 4 * 4 باستثناء ان العمود في اقصى اليمين يحتوي على "متجه" يمثل مقدار الازاحة

#3

يا اخي صراحة سعدت بردك أحبطت لما ماشفت ردوود

بس في الحقيقة كـ، alograthim أنا فاهمتها انا راح اعمل function اسمها translate وراح ارسلها 3 parameter لل x,y,z واعمل عملية جمع في المواقع المخصصة لعملية translate لما اعمل مناداة لهذه الداله راح اخزن الناتج كمان في array وبعد كذا اعمل مناداة لل glMultMatrix(array);

بحيث تضرب array بالموجود الحالي اخر شئ عملته بالكود

بس لما اعمل implementation لها طلعت اخطاء واجد مؤة مسج انه array no defined ومرة array crupted ما اعرف وش المشكلة لان اذا ضبطت translate راح تكون نفسها rotation and scaling

واللي عنده حل plz help mee تراي متوهقة..

GMO,,

#4

جرب استخدام المعادلات البسيطة للازاحة اولاً

Xnew=Xold+dx

Ynew=Yold+dy

Znew=Zold+dz

delta مقدار الازاحة

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#5

مرحبا ,,

مشكورين عملتها وضبطت معاي

void translate(float dx, float dy, float dz)
{
	GLfloat *p;
	GLfloat tmatrix[16];  /* Translate Matrix */

    tmatrix[0] = 1.0;
	tmatrix[1] = 0.0;
	tmatrix[2] = 0.0;
	tmatrix[3] = 0.0;

	tmatrix[4] = 0.0;
	tmatrix[5] = 1.0;
	tmatrix[6] = 0.0;
	tmatrix[7] = 0.0;

	tmatrix[8] = 0.0;
	tmatrix[9] = 0.0;
	tmatrix[10] = 1.0;
	tmatrix[11] = 0.0;

	tmatrix[12] = dx;
	tmatrix[13] = dy;
	tmatrix[14] = dz;
	tmatrix[15] = 1.0;

	p = tmatrix;

	glMultMatrixf(p);

}

 void rotate(int theta, float dx, float dy, float dz)
{
	GLfloat *p;
	GLfloat rmatrix[16];  /* Rotate Matrix */

	if( dx == 1.0 ){

	rmatrix[0] = 1.0;
	rmatrix[1] = 0.0;
	rmatrix[2] = 0.0;
	rmatrix[3] = 0.0;

	rmatrix[4] = 0.0;
	rmatrix[5] = cos((GLfloat)theta * 0.017453292);
	rmatrix[6] = sin((GLfloat)theta * 0.017453292);
	rmatrix[7] = 0.0;

	rmatrix[8] = 0.0;
	rmatrix[9] = -sin((GLfloat)theta * 0.017453292);
	rmatrix[10] = cos((GLfloat)theta * 0.017453292);
	rmatrix[11] = 0.0;

	rmatrix[12] = 0.0;
	rmatrix[13] = 0.0;
	rmatrix[14] = 0.0;
	rmatrix[15] = 1.0;
	}

	if( dy == 1.0 ) {

	rmatrix[0] = cos((GLfloat)theta * 0.017453292);
	rmatrix[1] = 0.0;
	rmatrix[2] = -sin((GLfloat)theta * 0.017453292);
	rmatrix[3] = 0.0;

	rmatrix[4] = 0.0;
	rmatrix[5] = 1.0;
	rmatrix[6] = 0.0;
	rmatrix[7] = 0.0;

	rmatrix[8] = sin((GLfloat)theta * 0.017453292);
	rmatrix[9] = 0.0;
	rmatrix[10] = cos((GLfloat)theta * 0.017453292);
	rmatrix[11] = 0.0;

	rmatrix[12] = 0.0;
	rmatrix[13] = 0.0;
	rmatrix[14] = 0.0;
	rmatrix[15] = 1.0;

	}

	if( dz == 1.0 ) {

	rmatrix[0] = cos((GLfloat)theta * 0.017453292);
	rmatrix[1] = sin((GLfloat)theta * 0.017453292);
	rmatrix[2] = 0.0;
	rmatrix[3] = 0.0;

	rmatrix[4] = -sin((GLfloat)theta * 0.017453292);
	rmatrix[5] = cos((GLfloat)theta) * 0.017453292;
	rmatrix[6] = 0.0;
	rmatrix[7] = 0.0;

	rmatrix[8] = 0.0;
	rmatrix[9] = 0.0;
	rmatrix[10] = 1.0;
	rmatrix[11] = 0.0;

	rmatrix[12] = 0.0;
	rmatrix[13] = 0.0;
	rmatrix[14] = 0.0;
	rmatrix[15] = 1.0;
	}

	p = rmatrix;

	glMultMatrixf(p);



}


void scale(float sx, float sy, float sz)
{
	GLfloat *p;
	GLfloat smatrix[16];  /* Scale Matrix */


	smatrix[0] = sx;
	smatrix[1] = 0.0;
	smatrix[2] = 0.0;
	smatrix[3] = 0.0;

	smatrix[4] = 0.0;
	smatrix[5] = sy;
	smatrix[6] = 0.0;
	smatrix[7] = 0.0;

	smatrix[8] = 0.0;
	smatrix[9] = 0.0;
	smatrix[10] = sz;
	smatrix[11] = 0.0;

	smatrix[12] = 0.0;
	smatrix[13] = 0.0;
	smatrix[14] = 0.0;
	smatrix[15] = 1.0;

	p = smatrix;

	glMultMatrixf(p);
}

وقت المناداة

translate (2.0,0.3,1.0);
  rotate (day, 0.0, 1.0, 0.5);
     scale(1.6,1.1,1.6);
#7

شكرا بس لا يكبر راسي عليكم :P

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

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