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

دالة LookAtLH

مغلق
بدأه Whale في 3 يونيو 2006 · 4 رد · 1,308 مشاهدة · في DirectX
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هل يمكن احد الاخوان يشرح الدالة التالية و خصوصا الوسيط الثالث cameraUpVector

public static Microsoft.DirectX.Matrix LookAtLH(Microsoft.DirectX.Vector3 cameraPosition,
	Microsoft.DirectX.Vector3 cameraTarget , Microsoft.DirectX.Vector3 cameraUpVector )

تحياتي لكم

:)

#2

اخى انا لا اعلم الكثير فى directx و لكن فى ال opengl الجزء الاول لمكان الكاميرا و الجزء الثانى للمكان الذى تنظر اليه الكاميرا و الثالث اسف اخى ولكنى لا اذكره

#3

اخي ان تعلم ان الكاميرا في الثلاثة ابعاد تتكون من ثلاث متجهات LookAt, up , Right (للنظر علي نقطة في العالم) .. Up ( للنظر فوق و تحت ) و Right و لليمين و الشمال و هو عمودي علي متجه UP ..

و هناك اخر و هو للموضع اي موضع الكاميرا في الفراغ CameraPosition .

لكي تنشىء الكاميرا تقوم بضرب اتجاهي للمتجهين Right×Look ليعطي الناتج UP .. و هذه العملية يقوم بها الDirectX في الدالة المذكورة .

post-40521-1149501351_thumb.jpg

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#4

عذراً إخي أحمد و لكن لي سؤال و أرجو أن توسع الشرح لي :

في لعبتي عندما يريد المستخدم أن يلتف يميناً فإني استخدم glrotate و هذا لا يؤدي إلى نتيجة مرضية لأنه عند الدوران تختلف الإحداثيات أي لنقل أن الحيط يمتد من x=100 Ygn x=190 و عند الدوران تختلف الإحداثيات عندها يصبح من x=10 إلى x=20 و هذا ما أعانيه .. فهل lookat تحل مشكلتي ؟

و إذا كانت أرجو أن تتفضل بشرح كود بسيط لعملية استدارة إلى اليمين و إلى اليسار ... أرجو أن لا أكون قد أثقلت عليك

#5

دالة gluLookAt() اسهل بكثير من التحويلات transformations التي تستخدمها

اول ثلاث بارامترات تحدد موضع الكاميرا ، ثاني ثلاث تحدد النقطة التي تنظر عليها الكاميرا و ثالث بارامترات تحدد المتجة UP انظر إلي الرسمه ..

void Rotate(float ang) {

	lx = sin(ang);
	lz = -cos(ang);
	glLoadIdentity();
	gluLookAt(x, y, z, 
			  x + lx,y + ly,z + lz,
			  0.0f,1.0f,0.0f);
}

هذا كود للدوران ـ لاحظ استخدمنا الاحداثيات القطبية للدوران

lx = r * Sin (angle)
lz = r* -Cos(angle)

و قمنا بتعبيء مصفوفة العالم التي تنظر من خلالها بقيم الاحداثيات عن طريق LoadIdentity

ثم الدالة gluLookAt تضع موضع الكاميرا x,y,z و البارامترات الاخري تزيح موضعك علي lx لكي تدور علي الجانبين ، و ايضاً علي المحور Z ، ثم تضع متجه UP بالاحداثيات الافتراضية له 0,1,0 لاحظ وجود 1 لانه ينظر إلي اتجاه المحور Y هذا المتجه يحدد مستوي الارتفاع و الانخفاض من نقطة موضع الكاميرا .

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

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

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