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

كيفيه عمل الدوران حول .....

بدأه ahla elm في 2 يناير 2009 · 6 رد · 3,149 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ممكن اخواني عندي سؤال

الأن عندما نريد أن نعمل دوران حول نقطة ولكن غير نقطة الأصل

كيف اعمله

هل اعمل ازاحه للجسم لنقطه الأصل ولكن ماهي الخطوات بعده

بليز ياريت توضحولي كيف بالتفصيل بالنص

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

#2

فين المساعدات

بيلز محتاجه للإجابه في اسرع وقت من فضلكم

بلييييييييييز

#3

تكملة لسؤال عن الدوران

هل يسوجب دائما انه عند الدوران حول نقطة معينه

لا بد من استخدام الدوال المثلثه فيه؟ وماهي الدواال المثلثيه هذه

وكيف اعمل عندما اريد ان يدور الشكل حول نفسه

وحول نقطة الأصل

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

ارجو الرد على موضوعي كله بالتفصيل

#5

شكرا اخي على الرد

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

ولكن احتاج الرد والتوضيح ايضا من اخواني في المنتدى

احب ان اذكر

بأنني اعرف متغيرات الدوران وفاهمتها

ولكن سؤالي بالتحديد عن الدوران حول نقطه معينه ..كيف استخدم الدوال المثلثيه فيها

اريد الخطوات المستخدمه

ولماذا استخدم الدوال المثلثيه ؟وهل هذا الزامي عند الدوران حول نقطه معينه؟

انا فاهمه الإنسحاب والدوران والتحجيم للعلم فقط

ارجو التوضحي من فضلكم

#6

اعتقد انه لا توجد حاجة لاستخدام الدوال المثلثية في حركة بسيطة كهده

لجعل نقطة او جسم يدور حول نقطة معينة و لتكن فرضا و . يجب اولا ازاحة الجسم او النقطة بقيمة (و) , ثم يتم استدعاء دالة الدوران , ثم يتم ازاحة الجسم او النقطة بقيمة - و

glTranslatef(point.x, point.y, point.z);
glRotatef(angle, axis.x, axis.y, axis.z);
glTranslatef(-point.x, -point.y, -point.z);

point : هو المتجه الدي نريد ان ندور الجسم عليه

ارجو اني قد افدت

تم تعديل هذه المشاركة بواسطة virtual في 4 يناير 2009 في 18:16

#7

أولا معذرة على التأخر , و الاخوة ما قصروا ,

لم أقرأ كل الردود , ولكن رد الاخ virtual الاخير هو الاسهل حسب ما أظن :

مثال تطبيقي:

#include <windows.h>
#include <gl\glut.h>

// هنا نعين مصفوفة الاسقاط .. والمنفذ
void changeSize(int w, int h)
{

	glViewport(0, 0, w, h);
	if(h == 0)
		h = 1;
	float ratio = 1.0f * w / h;
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	// هنا نعين احداثيات اوبنجل .. فمثلا لو كانت أبعاد النافذة هي 400*400
	/*
					 y=200					  
					  |
					  |
					  |
  x=-200 -----------(0,0)-------------- x=200
					  |
					  |
					  |
					 y=-200
	*/
	gluOrtho2D(-w/2,w/2,-h/2,h/2);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();


}


float angle = 0;
void renderScene(void) {

	angle+=0.1;
	if(angle>360)
		angle=0;

 	glClear(GL_COLOR_BUFFER_BIT );
	glLoadIdentity();
	glColor3f(1,1,0);
	glPointSize(4);


	// النقطة التي سيحدث الدوران حولها
	glBegin(GL_POINTS);
	glVertex2f(50,50);
	glEnd();


	glLoadIdentity();
	// نتحرك الى تلك النقطة .. بالازاحة
	glTranslatef(50,50,0);
	// نقوم بالدوران
	glRotatef(angle,0,0,1);
	// نعمل ازاحة اضافية .. حتى نوسع قطر الدوران
	glTranslatef(30,30,0);
	glColor3f(1,0,0);
	glBegin(GL_POINTS);
	glVertex2f(0,0);
	glEnd();

	glutSwapBuffers();
	glutPostRedisplay();
}


int main(int argc, char **argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA);
	glutInitWindowPosition(100,100);
	glutInitWindowSize(400,400);
	glutCreateWindow("Rotation");
	glutDisplayFunc(renderScene);
 	glutReshapeFunc(changeSize);
	glutMainLoop();

	return(0);
}

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

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