Lecture7
طب يلا احنا نبدأ عشان وقتنا. احنا هنكمل في الـ topic بتاع النهاردة ان شاء الله Three Dimensional Viewing والـ projection على الـ 2D بردو viewing اللي احنا كنا خدناه قبل الـ midterm.
فاكرين الviewing pipeline اللي اتكلمنا عنه بال2D لما قلنا الobjects بتاعتى ال data بتاعتها اللي هي ال vertices بتاعتها بتعدى على اكتر من transformation عشان تتنقل لاكتر من phase يعني اول حاجة عندي ان انا برسم object في الmodeling transformation برسم object في الmodel space وبعد كده ب apply  عليه الmodel transformation او الobject transformation علشان تنقل الobject ديه من الاحداثيات بتاعت الmodel للاحداثيات بتاعت مين
وكنت بسمي الـ transformation دي modeling transformation. بعد كده الـ vertices دي دلوقتي اصبحت معرفة دلوقتي في الـ world coordinates، وابتدي بعد كده apply عليها viewing with some orientation and some position، بحط view بـ position و orientation معين.
Based على الـ View بتاعي، ببتدي apply transformation اللي هي اسمها الـ Viewing transformation، عشان تديني الـ current coordinates بتاعت الـ objects بتاعتي في الـ Viewing coordinates.بعد كده كنت بكمل اللي فوق ده الـ 2D Viewing بعد كده كنت بكمل على الـ step بتاعت الـ normalization علشان اروح بعد كده اعرض على اي device او screen.
الـ 3D viewing pipeline هو the same as 2D viewing pipeline، بس باختلاف حاجتين. أول حاجة وأهم حاجة هي الـ Projection transformation، ودي new step دلوقتي هنعملها في الـ pipeline، ودي الهدف منها إنها تحطلي الـ Objects اللي هي المفروض 3D دلوقتي، معرفة as a third dimension.
على الـ 2D plane بتاعي أو الـ image plane أو الـ screen اللي أنا بعرض عليها without losing the effect of the third dimension. طب كمان في حاجة عايزين نتكلم عنها النهاردة وهي الـ Viewing transformation، لأن هنعمل فيها extra technique أو extra steps علشان نقدر نجيب الـ Viewing coordinate system بتاع الكاميرا بتاعي.
ف mainly كده هو ده مين؟ الـ 3D viewing pipeline. إحنا هنتكلم عن أنهي جزء؟ هنتكلم على الـ Viewing transformation الأول نعرف إزاي بعرف الـ coordinate system بتاع الـ viewing بتاعي، وبعدين نتكلم على الـ Projection techniques. وبعد كده الـ pipeline بيكمل زي الـ 2D بالظبط، إن إحنا بنعمل الـ normalization وبعد كده نرجع
ok يا شباب طب في الـ 3D dimension الصورة بتاعتي، لو أنا بصيت مثلاً على صورة vehicle زي دي أو عربية زي دي، هلاقي إن أنا مكان ما أنا واقفة ببص على الصورة دي، بيديني صورة مختلفة تماماً للـ Objects اللي معايا. غير كمان الـ 2D، الـ Third dimension ده بيخليني لو أنا واقفة هنا، فالمفروض الصورة اللي هرسمها دلوقتي على الشاشة تبقى بالشكل ده.
بس لو أنا واقفة هنا هتبقى مختلفة تماماً. لو أنا واقفة هنا، بص الصورة عاملة إزاي؟ لو أنا واقفة هنا.. طب لو واقفة هنا.. في كل مرة أنا الصورة اللي المفروض أرسمها بتبقى مختلفة Based على مين الـ viewing بتاعي؛ لأني بطفو بقى بالكاميرا في الـ 3D World كله خلاص. فأنا يهمني إيه؟ يهمني مبدئياً إن أنا أعرف أجيب الصورة دي إزاي
والصورة دي عشان أجيبها صح، لازم أبقى عارفة أحول الـ transformation بتاعتي من الـ World للـ Viewing. اللي هو based أنا واقفة فين، هاخد دلوقتي الـ Objects بتاعتي وأحولها للـ Viewing coordinates بتاعتي. حلو؟ فدي step 1 عايزين نعرفها. طب قبل ما نعرفها، هنا بيقولي لو إنت واخد بالك الـ Object اللي هو زي الابريق ده
الابريق ده لو أنت اخترت النقطة دي إنك تبص عليها with different views، فلو أنت واقف هنا هتلاقي دي الصورة اللي المفروض تاخدها للـ view دلوقتي بتاعك من النقطة دي. طب لو الـ view بتاعك خلفي هتبقى دي الصورة، لو الـ view بتاعك أمامي هتبقى دي الصورة. طب عايز يقولي كده ليه؟ عايز يقولي إن الـ different views بتختلف أوي في حالة الـ 3D، وده بيديني
applications كتيرة أوي تستخدمها بيه. الـ Most common و similar application اللي إحنا كلنا عارفينه اللي هي الـ 3D Movies. الـ 3D Movies أصلاً فكرتها بتبقى زي فكرة الـ 3D Viewing هنا، لأن هو بيديك two images لنفس الـ Scene بس كل واحد منهم من view مختلف. النظارة اللي إحنا بنلبسها جوه الكاميرا، جوه السينما علشان نشوف بيها الـ Movie هي وظيفتها بتعمل إيه؟ بتحجب عن كل عين واحدة من الـ views دي
وتديك لكل عين منهم view واحدة بس. ييجي بقى المخ بعد كده هو ياخد الـ two views دول المختلفين ويركبهم على بعض فيديك الـ effect بتاع الـ 3D ده. فدي كانت من أحد التطبيقات بتاعة مين؟ الـ 3D viewing. طب هنتكلم الأول على الـ General idea بتاعة الـ Projection، وبعدين ندخل على الـ Viewing transfor
الـ Projection ده معناه إيه؟ معناه هو الحاجة أو الـ Technique اللي أنا بستخدمه علشان أطلع المشهد اللي هو 3D زي المشهد بتاعي ده كده، على 2D plane زي الـ Image بتاعتي أو الـ screen بتاعي. إزاي أدّي من هنا إحساس الـ 3D وأنا الـ plane اللي أنا برسم عليه 2D؟
في هنا بقى الـ Technique اللي اسمه Projection هو اللي بستخدمه علشان يديني الإحساس ده أو الـ Feeling ده. الـ General idea بتاعة أي Projection بيقولي إيه؟ لو أنا افترضت إن الـ Viewing بتاعك هنا، يعني دي الكاميرا اللي أنت باصص منها على المشهد بتاعك، هبتدي بقى أعرف لك شوية terminologies كده هتكمل معانا عشان تبقى عارف معنى كل حاجة فيهم.
أول Terminology هو الـ Center of projection. الـ Center of projection بقصد بيها النقطة اللي أنا واقفة ببص منها على الـ Scene بتاعي. يبقى الـ Viewing place بتاعي، النقطة الـ B اللي عندها الـ Position بتاع الكاميرا بتاعتي أو الـ Eye بتاعي. فأنا هنا بقول، لو دي الكاميرا، يبقى ده المكان بتاع الـ Center of projection بتاعي.
اللي بيحصل إن إحنا بنعمل Rays كده، زي اللي هي الـ Dashed lines اللي أنتم شايفينها دي، توصل ما بين كل الـ Vertices بتاعة المشهد والـ Center of projection اللي أنت واقف عنده. والـ 2D plane اللي أنت المفروض هتطبع عليه الصورة بتاعتك، هو الـ Image plane اللي أنت شايفه في النص ده. فكلمة Image plane هي الـ Screen اللي أنت هتطبع عليها
الصورة. فاللي هيجيلك هنا هي دي الصورة اللي هتظهر على الشاشة دلوقتي. اعتبرها زي الكاميرا فيلم كده، عارفين الكاميرات بتاعة زمان لما كان عندك فيلم كده بيطلع عليه شكل الصورة؟ هو ده اعتبره الكاميرا فيلم دلوقتي. هي حتى الكاميرا دي تحسها عتيقة أوي من أيام الستينات لما كانوا بيقفوا تحت الستارة ويعملوا الفلاش ومش عارفة إيه... زيها كده. فافترض إن ده الكاميرا فيلم بتاعك وده الـ Image plane بتاعنا بالنسبة لنا إحنا يعني كـ Technique، وده اللي هيطلع عليه الصورة اللي هتظهر على الشاشة. فاللي بيـ
هو بيقولي أنا هعدي Rays كده between الـ Center of projection وكل الـ Vertices بتاعة المشهد بتاعي، والـ Rays دي وهي خارجة، هتقطع الـ Image plane بتاعي في نقطة. يعني النقطة بتاعة الـ Vertices دي مثلاً اللي أنا هسميها B، لما أوصل ما بينها وما بين الـ Center of projection، قطعت الـ Image plane في النقطة دي. النقطة دي، هي النقطة B بس بعد ما حصلها projection على الـ Image plane بتاعي.
فهل ده هينفع؟ وهل ده هيديني الـ Effect بتاع الـ 3D؟ آه. هنتكلم بقى كمان شوية أكتر بـ Technique. يعني هنفصص الـ Technique ده مع بعض وهنقول ليه أداني إحساس الـ 3D، لكن Mainly هي دي الـ Idea بتاعي. أنا بطلع Projector lines كده بتوصل between كل الـ Vertices والـ Center of projection. مكان ما تقع كل الـ Vertices على الـ Image plane بتاعي، هو ده المكان الـ Projected بتاع الـ Vertices دي على الـ Image plane.
إزاي بحسبه هنشوفه كمان شوية. وليه بيديني الـ Effect بتاع الـ 3D برضه هقولكم كمان شوية. وده كمان مش الـ Example الوحيد للـ Projection، يعني ده كده Example لنوع من أنواع الـ Projection اسمه Perspective، فإحنا هندرس الـ Perspective وهندرس الـ Parallel. بس Mainly يعني دي الفكرة بتاعته.
أه... لأ معرفش متدقش طيب، خلينا هنا بقى نتكلم على مين؟ على الـ Viewing transformation.إحنا كنا فاكرين من أيام الـ 2D قلنا إيه؟ قلنا الـ 2D كان بيعمل viewing transformation إزاي؟ حد فاكر لما قلت لما بكون عايزة أبص على الـ Scene بتاعي بـ View معين.
فعشان أوصل لنفس الـ View ده كنت بعمل يا ده يا ده. كان حد فاكر كان إيه بقى؟ في حالة الـ 2D، مش إحنا كنا بنقول فاكرين الصورة بتاعة العربية؟ لما كنت قلت العربية مشيت يمين شوية، فأنا ممكن أحصل على الـ Image بتاعة العربية إن هي مشيت يمين شوية، يا إما أحرك الكاميرا يمين يا إما أحرك العربية شمال؟ فاكرين القصة دي؟ وقلنا ساعتها إن الـ Graphics library بتعمل إيه؟ بتحرك هي الـ Objects عكس حركة مين؟ الكاميرا. صح؟
آه. فنفس بقى الفكرة هنا برضه. هو أنت اللي بيحصل إيه actually؟ أنت بتقولها أنا عايز الكاميرا مثلاً عند positive 3. اللي بيحصل actually إن هي بتجيبلك الكاميرا بالـ Scene كله بالـ Objects كلها وترجعها تاني عند الـ Origin بعكس حركة مين؟ الـ Movement. فرجعت الكاميرا عند الـ Object، ورجعت عند الـ Origin، ورجعت الـ Objects كمان معاها بعكس الحركة بتاعتها فأداك نفس مين؟ الـ m.
الكلام ده بنسميه مين؟ بنسميه coordinate systems transformation. هو بيـ transform من الـ world coordinates للـ viewing coordinates عن طريق إن هو بيرجع الـ coordinate system بتاع الـ viewing اللي هي بتاعة الكاميرا لمكان بالظبط الـ coordinate system بتاع الـ world. بيقعد بيجيب الـ origin من هنا يروح حاطه على الـ origin ده ويطمن إن الـ direction بتاع الـ axes زي بعضها، يبقى أنا ضمنت إن أنا خلاص رجعت عند الـ origin فهي دي actually الـ transformation اللي هتتم على
علشان تديك نفس الـ viewing مين؟ اللي انت طلبته. طب هو بيظبط نفس الاتجاه مع بعض، الـ Object والكاميرا؟ Speaker: آه، انت مش بتشوفها، آه انت مش بتشوفها، ده بيتم internally يعني. هو هيديك في الآخر الـ Image بتاعة الـ View بتاعك، لكن actually what... يعني اللي هو بيعمله internally إن هو بيمشي الكلام ده كله عكس مين؟ الـ Movement. علشان هو عايز الكاميرا أصلاً عند الـ Origin، عشان الـ Next step في الـ Pipeline تشتغل صح، هو عايز الكاميرا عند الـ Origin
فاللي بيحصل إن هو بيجيب كل المشهد بالكاميرا، يرجعه عند الـ Origin تاني. هو بيعمل كده، هو بيعمل عكس الـ Transformation اللي انت إديتها للـ Viewing. فبيضمن إن الـ Scene بتاعك هو هو اللي انت شايفه دلوقتي صح. وعلشان الكلام ده mathematically يبقى صح، فأنت هتتخيله هيبقى إيه؟ هو بيجيب الـ Origin بتاع الكاميرا ويروح مرجعه للـ Origin بتاع الـ World
والـ Axes ولو فيه أي orientation يظبطها. فيجيب الـ X-axis ده بتاع على الـ X-axis ده، عشان كده كنا بنقول بنعمل إيه؟ عكس الـ Transformation وعكس الـ Rotation بتاع مين؟ الكاميرا بتاعي. فلما يتطابق الـ Coordinate system بتاع الكاميرا على الـ Coordinate system بتاع الـ World، يبقى انت كده تمام، انت كده عملت الـ Transformation دي صحيحة. حلو؟ طب هنا برضه في الـ 3D نفس الشئ
بس أنا دلوقتي عندي الـ Move بتاعة الكاميرا dynamic. المفروض إنتوا خدتوا Hint عن الكلام ده في الـ Labs. إنت بتتحرك دلوقتي في الـ 3D World وممكن تتحرك بالـ Keyboard وممكن تتحرك في أي مكان، صح؟ طب أنا عايزة بقى automated technique يقولي في أي مكان، فين الـ Direction أو الـ Coordinate system بتاع الـ Viewing بتاعي. يعني الكاميرا اللي إنت عمال تتحرك بيها دي، كل مرة إنت بتتحرك بيها بتغير الـ Orientation وبتغير الـ Position وبتغير كل حاجة.
فإنت بتغير في الـ Coordinate system بتاعها. أي Coordinate system هو عبارة عن إيه؟ Origin point والـ Axes بتاعتك الـ Directions بتاعها فين. فإنت عايز automated technique يقولي في أي مكان إزاي أقدر أجيب الـ Coordinate system بتاع الـ Viewing ده، علشان أبتدي أستخدمه جوه الـ Transformation matrix وأعمل بيه الـ Viewing transformation.
فهعمل كده ازاي؟ هبتدي أقول هنا الـ P node دي هو الـ Position اللي أنا موقفة عنده الكاميرا دلوقتي، يبقى ده الـ Position بتاعي. الـ P node طبعاً هي Point ليها إحداثيات في الـ X والـ Y والـ Z دلوقتي لأن إحنا 3D dimension. حلو كده؟ طيب، الـ... الأزرق اللي انتوا شايفينه ده هو ده الـ View plane يعني دي المشهد اللي أنا باصة عليه، ده الـ View plane
إيه أقدر أجيبه من إحداثيات الـ Viewing بتاعي بطريقة سهلة؟ أنا عارفة خلاص الـ Origin اللي هي اللي أنا واقفة عندها دلوقتي اللي هي الـ P node، ناقصلي أجيب اتجاهات الـ X والـ Y والـ Z بتوع مين؟ بتوع الـ Viewing ده. طب في حاجة منهم سهلة أقدر أجيبها directly؟ آه، إيه هي؟ الـ Z dimension. ليه؟ لأن أنا دايماً ببص على الـ Scene كده.
فأنا دايماً اتجاه الـ Viewing بتاعي في اتجاه الـ Depth، في اتجاه العمق بتاعي، اللي هو الـ Z direction بتاعي. فببساطة بعرف أبص، أعرف أجيب الـ Z dimension عن طريق إن أنا بقول مكان ما أنا واقفة على المكان اللي أنا باصاله، لو طرحت الـ Two points دول من بعض هيديني Vector، هو ده الـ Direction بتاع الـ Z direction بتاعي. okay؟ فده كده أول axis عرفت أجيبه بسهولة.
بس إحنا دلوقتي مش هنسميه Z، إحنا دلوقتي هنسميه N. ففي الـ Coordinate system بتاع الكاميرا هنبتدي نديهم رموز U و V و N. استنى هرجعلكوا تاني... هنديهم رموز إيه؟ U, V, N. حلو؟ الـ N ده اللي هو مين؟ الـ Z direction. الـ U اللي هو يساوي الـ X direction، والـ V تساوي الـ Y direction.
طيب نرجع هنا للـ Slide دي، إحنا كنا بنقول أهو، أول حاجة أعرف أجيبها بسهولة هو الـ N. طب الـ N small اللي هي الـ Z direction إيه علاقتها بالـ N capital؟ الـ N capital ترمز للـ Normal على الـ Plane بتاعي. ما هو إنت وأنت باصص على الـ Plane، إنت في نفس الوقت أنت في الـ Direction بتاع الـ Normal، العمودي على الـ Image plane بتاعك
فهو بيقولك الـ N capital اللي هو الـ N الـ Normal على الـ Image plane بتاعك، هو هو الـ N small بتاعك. okay؟ فمن هنا بقول إيه؟ الـ N capital اللي هو العمودي على الـ Plane بتاعي، هو ده أقدر أجيبه عن طريق إني أطرح الـ P node بتاعتي اللي هي النقطة اللي أنا واقفة عندها minus الـ P reference، والـ P reference هنا هي النقطة اللي أنا باصة عليه
فيديني من هنا Vector، الـ Vector ده Normal على الـ Plane وهو هو الـ Z direction بتاعي. تمام؟ فأنا كده خلصت من أول axis. طب عايزة أجيب الـ Two axes التانيين، أجيبهم إزاي؟ والله أنا عندي piece of information واحدة بتقولي إن المفروض أي Coordinate system الـ Axes بتوعه بيبقوا عموديين على بعض، يعني إيه عموديين على بعض؟
يعني الـ Plane اللي إنت بتكونه من أي Two axes منهم، الـ Axis التالت يبقى عمودي عليه. يعني لو إنت معاك U, V يبقى الـ N عمودي على الـ Plane بتاع U, V. لو إنت معاك V, N لو عملت منهم Plane يبقى الـ U عمودي على الـ Plane بتاع الـ V, N ده، وهكذا. طب هل أنا معايا أي axes تانية أعرف أـ form منه Plane عشان أجيب واحد من التانيين اللي ناقصني؟ لأ
بس هيعملوا حاجة، هيعمل إيه؟ هيفترض، هيـ assume إن أنت الـ Up vector بتاعك، الـ View up vector بتاع الكاميرا اللي هو الـ Y direction بتاعها، هو هو الـ Up vector بتاعنا الـ Normal اللي باصص لمين؟ لفوق. طب هيستخدم المعلومة دي في إيه؟ هيستخدمها إن هو هيجيب منها الـ Plane الـ U, N. إنت معاك N
فلما تجيب الـ Plane U, N دلوقتي... sorry الـ V, N دلوقتي، تعرف تجيب الـ U اللي هو عمودي على الـ Plane ده. طب هو الـ V اللي إنت افترضتها مش الـ V الحقيقية بتاعة الكاميرا؟ آه، بس هو بيقولي الـ V الحقيقية بتاعة الكاميرا واقعة جوه الـ Plane ده. فـ It's okay إن أنا أستخدم الـ Plane ده عشان أجيب العمودي عليه، وبعد كده هبقى أرجع أجيب الـ Accurate V بتاعتي.
okay؟ فهو هيـ assume إن الـ View up vector بتاعي اللي هو الـ V direction بتاع الكاميرا، هو الـ Y direction العادي بتاعنا اللي باصص لفوق. هيجيب Plane من الـ V, N اللي معاه دلوقتي، يجيب العمودي عليه فالعمودي على plane يديه الـ U direction. كده يبقى أنا جبت الـ U ومعايا الـ N، أعرف بعد كده آخد الـ U والـ N دول أجيب العمودي عليهم فيديني الـ Accurate V direction
تمام؟ okay؟ يعني هي بتتعرف كده بس ما تقلقوش يعني، هي ببساطة هو بيفترض V، بيجيب Plane، يجيب العمودي عليه يبقى U، وبعد كده يرجع يجيب الـ Accurate V تمام كده؟ طيب، في حاجة كمان، الـ Directions أو الـ Axes بتاعة الكاميرا Coordinate كلها Unit vector يعني Vector طوله واحد
فعشان أجيب Unit vector من أي Vector أنا بعمله، بقسم الـ Vector ده على الـ Magnitude بتاعه. فتلاقي هنا بيقولك إن الـ N، الـ N اللي إحنا لسه جايبينها من شوية هي عبارة عن الـ N capital اللي إحنا قلناها divided الـ Magnitude بتاع الـ N ده، فيديني الـ N في صورة الـ Unit vector بتاعه. طيب الـ U... الـ U اللي إحنا قلنا إن إحنا هنجيبها عن طريق إن أنا افترضت V capital
وبعدين هجيب Plane عبارة من الـ V والـ N وأجيب الـ U العمودي على الـ Plane ده. mathematically بقى speaking عشان أجيب Vector عمودي على Plane عن طريق إن أنا بعمل Cross product للـ Two vectors اللي انت عايز تعمل منهم الـ Plane. فلما أعمل Cross product between الـ V والـ N، يبقى أنا بجيب الـ Vector العمودي على الـ Plane بتاع V, N
ده. okay؟ فلما أقولك U = V cross product N، يبقى الـ U هي الـ Vector العمودي على الـ Plane المكون من الـ V times N. ماشي؟ الـ Equation بتاعة الـ Cross product هبقى أكتبها لكم في الـ Sheet ما تقلقوش، وممكن تبقى given كمان في الامتحان يعني مش دي الحاجة اللي تؤرقك يعني. المهم إن انت بتعمل Cross product تبقى فاهم معناه إيه، معناه إن هو بيعمل Plane من الـ Two vectors دول ويجبلك العمودي عليهم عشان انت قلت الـ U بتساوي الـ V times مين؟ الـ N.
طب ليه تاني قسمت على الـ V times N؟ عشان برضه أنا عايزة ده Unit vector، فبقسم برضه على الكلام ده. وساعات كمان بنقسم على الـ V بس علشان الـ N already جايالي من هنا هي Unit vector. okay؟ فبس ده بيديك شكل مين؟ الـ U as a Unit vector. طب نرجع بعد كده نجيب الـ Accurate V. أنا معايا خلاص الـ U ومعايا الـ N، فهقول بس هي عبارة عن الـ Cross product between الـ N times الـ U.
وبما إن ده Unit vector وده Unit vector فمش هقسم خلاص تاني. يبقى أنا كده جبت الـ Vector الحقيقي بتاع الـ V عن طريق إني جبته عمودي على الـ Plane ده. طب أنا بعمل كل ده ليه نفتكر؟ عشان أجيب الـ 3 axes المكونين للـ Coordinate system بتاع الـ Viewing.طب ليه أنا بعمل كده؟ عشان دول مهمين في الـ Viewing transformation اللي هبص بيها أو هضربها في الـ Objects فتديني الـ Current positions جوه الـ Viewing علشان أبص على المشهد ويديني الـ Accurate مين؟ Image
بتاعتي. okay؟ يبقى من هنا أهو ده الـ View plane بتاعي، قلنا ده الـ Normal عليه ده الـ Viewing position بتاعتي، وده الـ U والـ V والـ N اتجاهات مين؟ الـ Coordinate system بتاع الـ Viewing. طيب، تعالوا نبص بقى على الـ Transformation matrix. زي ما اتفقنا في الـ 2D بالظبط، انت المفروض هتعمل Translation وبعديها مين؟ Rotation.الـ Translation قلنا بإيه؟ بعكس المسافة اللي مشيتها
طب أنا هنا مشيت مسافة إيه؟ المسافة اللي واقفة عندها الكاميرا. المسافة اللي واقفة عندها الكاميرا اللي هي النقطة P node، فاللي هي إحداثياتها مين؟ X node, Y node, Z node. فلما ترجع تاني تمشي عكس الـ Translation دي هتبقى تمشي negative X node و negative Y node و negative مين؟ Z node. طيب الـ Rotation بقى Matrix هي اللي مختلفة شوية. الـ Rotation Matrix هتلاقي جواها الـ Components بتاعة مين؟ الـ U والـ V والـ N اللي إحنا لسه جايبينهم.
عرفت بقى إحنا كنا بنجيبهم ليه؟ عشان انت هنا محتاجها عشان تعمل بيها الـ Transformation بتاعة الـ Viewing. فتلاقي هنا الـ Rotation Matrix هتلاقي أول Row واخد الـ 3 Components بتاعة الـ U، وتاني Row فيه الـ 3 Components بتاعة الـ V، وتالت Row فيه الـ 3 Components بتاعة الـ N. طيب الكلام ده... أنا مش فاهم الـ Rotation دي منين.
عشان لو انت الكاميرا بتاعتك oriented يمين أو شمال لاففها يمين أو شمال، فالمفروض إن الـ Object اللي انت باصص عليه صورته هتختلف based على الـ Orientation بتاعك. طب عشان تجيب الـ current image صحيحة بتعمل إيه؟ بتعمل الـ Orientation اللي انت عملتها دي as a matrix تضربها في الـ data بتاعتك فيديك الـ current.
image صحيحة بتاعت الـ Object وانت باصصله وأنت ملفوف كده. فهمت؟ ما هو انت بصيتله وهو ملفوف فالـ image اتغيرت. الـ image اتغيرت دي معناها إيه؟ كل الـنقط دي إحداثياتها اتغيرت. فعشان تجيب الإحداثيات الجديدة اللي هي تديك الـ image اللي انت المفروض باصص عليها، بتضرب الإحداثيات القديمة في matrix. فين بقى الـ Matrix..."
هي دي بقى دي اللي بتجيبها هنا دلوقتي.تمام. يعني ممكن يحصل أي transformation يعني ممكن يكون الـ scaling برضه. وهكذا ولا؟ آه الـ scaling حصل في الأول من الـ Modeling للـ World. انت عملت scaling هناك. خلاص؟ انت دلوقتي بتلف تبص بس على المشهد بـ view مختلفة. ok؟ وأنت هتحس بـ effect الـ scaling لو انت مقرب أوي أصلاً من.
ok؟ بس مش هيبقى scaling هيبقى كأنك عامل جزء zoom كده عليه، فانت في الـ transformation في الـ translation اللي انت بتعملها انت لو قربت أوي هتاخد حتة معينة اللي انت شايفها دلوقتي فهتحس إن هي كبرت، بس عشان انت قربت منها أوي. طيب، يبقى احنا دلوقتي بنتكلم على composite matrix واحدة اللي هي هتعملي الـ transformation من الـ World coordinate للـ Viewing coordinate، اللي هي حاصل ضرب الـ Two matrices اللي احنا لسه قايلنهم.
.بس هنا هتلاقيها في compact form شوية. يعني دي نفس الـ Factors بتاعت الـ Rotation اللي احنا لسه قايلنها، بس الـ Column الرابع ده مش translation factors. هتلاقيه هو أصبح دلوقتي negative U dot product P، و negative V dot product P، و negative N dot product P. طب هو ليه ما حطش translation factor؟ هو صحيح هما هماهم الـ translation factors بس يعني لو عايز ترجع لأصلها، لما تضرب الـ Translation دي في الـ Rotation دي، فهتلاقي فعلاً الـ Column ده لما يتضرب في الـ Row ده، يديك كل الـ.
القصة دي. فالقصة دي هي هياها الـ X بتاعت الـ P0 مضروبة في الـ Ux، والـ Y بتاعت الـ P0 مضروبة في الـ Uy، والـ Z بتاعت الـ P0 مضروبة في الـ Uz، فكأنك بس دمجتها في الشكل ده. اللي لأن كل ده كان المفروض يبقى أول Factor هنا. فعشان ما نقعدش نكتب كل ده هنا، فقلنا هو عبارة عن الـ negative U dot product مين؟ الـ P0 بإحداثياتها الثلاثة.
لكن انت عشان تحسبها هتفك الكلام ده للـ multiplication ده كله أو للـ term ده كله. طيب الـ Matrix دي بتتحفظ؟ لا، انا زي ما اتفقت معاك الـ Matrices دي هتبقى given بالنسبة لك في الامتحان. أمال أنا ممكن أتسأل عليها إزاي؟ ممكن أتسأل عليها إن أنا هديك مثلاً الـ Viewing position اللي انت واقف عنده اللي هي الـ P0، وهديك الـ position النقطة اللي انت باصص عليها اللي هي الـ P reference.
فانت منها تعرف تطلع الـ N، ومنها تعرف تحسب الـ U والـ V بالـ Cross product عادي، وتيجي تملى الكلام ده هنا جوه الـ Matrix، وتبقى برضه تملى الكلام ده. وبعدين لو انت معاك نقطة هتضربها بقى في الـ Matrix دي، هتجيب منها الإحداثي الجديد بتاعها جوه الـ Viewing. وهنشوف exercise عليها بس وقت النهاردة ممكن ما يسعفناش، إن شاء الله المحاضرة الجاية هنبتديها بـ exercise على الجزء.
ده. ok يا جماعة؟ طيب ده كان إيه؟ كان الـ Viewing transformation. خلصنا منها بقى نبتدي نخش على الـ Projection techniques. طب زي ما اتفقنا الـ Projection techniques دي علشان تديني الإحساس بتاع الـ 3D على 2D plane. في عندي نوعين من الـ Projection techniques ممكن أعملهم. حاجة اسمها الـ Parallel projection وحاجة اسمها الـ Perspective projection.
Parallel projection هي هياها كلمة Orthogonal projection هي هياها Orthographic، Orthonormal و Orthographic. الثلاثة terms دول هما نفس المعنى. طب في حاجة؟ ok. طب إيه... إيه الفرق بين الصورة اللي ممكن يديهاني الـ Parallel projection عن الصورة اللي بيديهاني الـ Perspective projection
أيوه، الـ Parallel projection مبيديكش الـ realistic look بتاع إن إنت لو واقف قريب فإنت شايف الاجسام كبيرة، لو واقف بعيد فإنت شايف الاجسام صغيرة. يعني إحنا حتى كبني آدمين، لو إنت واقف تحت جنب العربية بتاعتك، إنت شايف العربية إيه؟ كبيرة، لو إنت واقف جنب العربية فإنت تقريبًا كل الرؤية بتاعتك هي كل الجنب بتاع العربية، هو blocking لـ بقية الـ scene بالنسبة لك.
طب لو إنت طلعت وقفت جوه المدرج وبصيت من الشباك، هل العربية بتاعتك دلوقتي بتـ block الرؤية بتاعتك؟ هل إنت شايفها بنفس الحجم اللي كنت شايفه وإنت واقف دي جنبها؟ طب هل العربية حجمها اتغير؟ هل إنت حجمك اتغير؟ طب أمال إيه اللي حصل؟مخك هو اللي عملك projection بشكل مختلف.
هو اللي استخدم المعلومات بتاعة المسافات ما بينك وما بين الـ objects عشان يعرض لك الـ image دي في دماغك بشكل يتناسب مع المسافة اللي إنت واقف عليها. ودي بالظبط فكرة عمل الـ perspective projection، إحنا بنـ mimic الجزء ده عندنا في البني آدمين. يبقى هيشتغل على قصة مين؟ الأجسام القريبة كبيرة، أما الأجسام البعيدة كل ما بتبعد عني كل ما بتبقى الـ الحيز بتاعها أو الـ...
إسمها إيه؟ الجسم بتاعها أصغر شوية. ok الـ Orthographic ده مبيعمليش كده. الـ Orthographic ده بيقول لي هديكي كل المسافات والأبعاد كما هي. علشان إيه بقى؟ علشان ده يستخدموه المهندسين والمعماريين في الـ applications والتطبيقات بتاعتهم، ده مهم ليهم.
لأن الناس دي مش المهم ليها إنها تشوف realistic look، لكن مهم ليها إنك لما تديها مبنى وعايزة تقيس حاجات معينة في المبنى ده، تشوف جميع الأبعاد بتاعة المبنى ده صحيحة سواء بصاله من أي اتجاه. فده ليه استخدام وده ليه استخدام. فالـ packages بتاعة الـ graphics بتديني فرصة إن أنا أعمل الـ two types of.
الـ projection دول. لو تيجي تبص هنا، المفروض الـ 3 bubbles دول نفس الجسم ونفس الحيز ونفس الأبعاد. هنا في الـ Orthographic بينهم لك كأنهم قد بعض بالظبط. لكن لما تيجي تعملهم بالـ Perspective هتلاقي لأ، الأقرب أكبر، والأبعد أصغر، والأبعد أصغر كتير. كمان الـ lines اللي هي إنتوا شايفينها في الـ background دي واخدين بالكوا هنا كلها parallel إزاي؟
أمال إزاي هنا حصل إن هما كلهم كأنهم كده هيتقاطعوا في الآخر في نقطة واحدة؟ ده برضو أحد الـ effects بتاعة الـ perspective وهنقول ليه بيحصل كده.دي برضو مثال تاني، لينا إحنا حتى بنشوفه دايما، عارفين القضبان بتاعة القطر كده؟ لما إحنا بنبقى واقفين باصين عليها
هل القضبان دي في الحقيقة هيتقاطعوا في نقطة بعيد كده؟ لأ، المفروض إن هما parallel على طول الخط. طب ليه حصل كده؟ علشان إحنا برضو بيحصل عندنا الـ effect بتاع إن الـ lines دي كلها بتـ converge at some point، الـ projection بتاع الـ lines دي بيحصل كأنه بيـ converge at some point، لكن هو في الحقيقة مش بيحصل عليه الـ convergen ده.
طب نتكلم عنه بقى mathematically شوية. الـ technique بتاع الـ perspective projection بيشتغل إزاي؟ ده اللي إحنا خدنا عنه idea في أول المحاضرة. لما قولنا هنا أنا واقفة ببص على الـ scene بتاعي، وقولت النقطة اللي أنا واقفة عندها بسميها Center of projection أو برمز لها COP، وأبتدي أخرج منها projector lines كده بتتقاطع مع الـ image plane اللي أنا هعرض عليه الصورة، وتوصل على كل الـ vertices بتاعة المشهد بتاعي.
الـ projector lines دي، الشكل بتاعها اللي هو كله عامل كده، هو ده اللي بيديني في الآخر الـ image اللي أنا عايزة أحصل عليها صحيحة. لأن هما مش parallel، لو هما parallel زي الـ... بصوا هوريكوا بصوا في حالة الـ parallel projection، كل الـ lines دي خارجة parallel من إيه؟ من الـ object بتاعي لغاية ما أنا واقفة.
الـ Parallel lines دي بتحتفظ بالأبعاد، فتخلي كل vertices من هنا بتقع على نفس النقطة تقريبًا على الـ image plane. والـ vertices دي هتقع على نفس النقطة دي، والـ vertices ده هيقع على نفس النقطة دي. فيديني طول الخط ده هو هواه طول الخط المنعكس هنا، وطول الخط ده هو هواه طول الخط المنعكس هنا. فالـ parallel lines دي احتفظتلك بالأبعاد والـ measure.
لكن في حالة الـ perspective لأ، الـ rays اللي طالعة من الـ center of projection دي، خلاص على حسب بعدها وقربها من بعض، هتبتدي تديك مين؟ الـ effect بتاع الصورة المنطبعة هنا تكبر أو تصغر على حسب مين؟ بعدك وقربك منها. أوكي؟ النقطة اللي أنا واقفة عندها دي اللي بنسميها الـ vanishing point، ليه؟ لأن كل النقط دي بتتجمع عندها في الآخر، فده بيديني برضو الـ effect بتاع إن النقط. إن الأجسام دي somehow في.
كده في المطلق هتبتدي إن هي تتقاطع مع بعضها. طب يبقى تاني بقى الـ perspective projection الخصائص بتاعته إيه؟ بيقولي إن الـ objects further from the viewer are projected smaller than same object size closer to the viewer. وده بيديني realistic look. وده بيعملي حاجة اسمها الـ non-uniform foreshortening. اعرف الـ term ده، non-uniform foreshortening. يعني إيه non-uniform foreshortening؟ اللي هو الأجسام القريبة بتبقى أقرب بتبقى أصغر و.
sorry أكبر والأجسام البعيدة مين؟ أصغر. طب ده بيتم إزاي؟ بيتم لأن الـ projector lines دي، لما بتقع على الـ image plane بتاعي، شايفين الخط ده؟ لما وقع على الـ image plane بتاعي وقع بشكل مين؟ أصغر. لكن لو أنا قربت الـ image plane ده شوية على الـ projector line. على الـ line ده هيحصل إن هو إيه؟ هيكبر. بصوا، هو نفس الـ line لما كان قريب من الـ image plane كان إيه؟ نفسه طوله تقريبًا، لكن لما بعدت الـ line ده أوي عن الـ image plane فاصبح.
إن الانعكاس بتاعه أو الـ projected line بتاعه على الـ image plane إيه؟ أصغر. ده الـ effect اللي بنسميه الـ non-uniform foreshortening. طيب الكلام ده كله اللي إحنا قولناه.الـ Parallel projection زي ما اتفقنا، إحنا بنعمل parallel rays كده.
ودي بتسقط على الـ image plane بتاعي بشكل parallel فتديني نفس الأبعاد بالظبط. فلو أنا خدت مثلًا side view من المبنى ده بالـ parallel projection، هلاقي إن الـ view بتاعي طلع بالشكل ده. كل الخطوط دي اللي هي ده وده وده طالعين متساويين، لأن هما في الأصل برضو في نفس المبنى ده متساويين. وفي الـ up view هتلاقي برضو الخطوط كلها متساوية.
وفي الـ front view برضو هتلاقي إن الخطوط كلها مين؟ طالعة بنفس التساوي والأبعاد والـ measurements بتاعتها. وقولنا ده مين بيستخدمه أكتر؟ المهندسين والمعماريين عشان ياخدوا بيه إيه؟ أكتر من view للـ buildings بتاعتهم، لإنه بيحافظ على مين؟ الـ measurements بتاعتي. طيب نتكلم بقى.
على إزاي هحسب الـ projection ده، الـ matrices بقى اللي هتعملي الـ projection ده، فين هي؟ في حالة الـ orthogonal projection بيقولي إيه؟ بيقولي والله لو ده الجسم بتاعك فهو already هيقع على الـ image plane بنفس الـ X والـ Y بتوعه. يعني هنا بيقولي الـ X projected بتاعتك هي هي الـ X بتاعت مين؟ الـ point دي، الإحداثيات بتاعتك هي هي. فالـ X Y هنا هي هي الـ X projected والـ Y projected هنا، اللي محصلش عليهم حاجة.
لأ مش بيضربها في الـ identity، هو هيضربها في matrix بس هيحتفظ بالـ X والـ Y بتوعك، ok؟ طب والـ Z direction هنا هيروح فين؟ مش هستخدمه دلوقتي في الـ projection، لكن هستخدمه في next steps هنتكلم عنها في المحاضرات الجاية، اللي هي هنا بيقولي الـ visibility determination procedure، اللي هو أنا شايف مين من الأسطح دلوقتي. شايف مين من الأسطح دلوقتي ده بتعتمد على مين في وشي ومين في ضهري، مين ورا مين ومين ورا مين ومين ورا مين. فالـ Z coordinate بتاعي يبقى ليه
استخدامات أخرى بعد كده. طب في حالة الـ parallel هو ما استخدمهوش، هو قالي الـ image بتاعتي كل نقطة فيها هي نفس الإحداثيات بتاعت النقطة بتاعتك. لكن في حالة الـ perspective لأ أنا هستخدم المعلومات بتاعت الـ Z في حساب الـ X projected والـ Y projected. لأن زي ما اتفقنا في الـ perspective أنا بعتمد على المسافة اللي ما بيني وما بين الـ object.
فعايزة ال Z dimension دي يبقى موجود معايا عشان احسد دي ال projection فهستخدم ال Z dimension ده في ال equations اللي بتاكسبني ال X و ال Y project طيب sleeping window احنا بعد ما بنعمل step بتاعت ال projection مفروض ان احنا بنعمل sleeping و normalization و هو بقية ال pipeline الطبيعي طيب انا هنا 3Z
فالـ clipping window لما خدناها كانت بتقص في حالة مين؟ الـ X والـ Y، لأن هي كانت plane كده بتقص في اتجاه الـ X هاخد من هنا لهنا، وفي اتجاه الـ Y هاخد من هنا لهنا، صح؟ طيب في حالة الـ 3D dimension، هل أنا هقص كمان في الـ third dimension ولا لأ؟ المفروض أه، لأن إنت أكيد حتى إنت كبني آدم مابتبصش تجيب كل حاجة إلى مالانهاية.
إنت ليك برضو حدود، فأنا برضو هنا بطبق نفس الكلام ده على الـ third dimension بتاعي. فهاجي أقول إيه؟ طب أنا برضو في الـ Z dimension هحدد الـ viewing بتاعي من كام لكام؟ من الـ Z near للـ Z near. Z far اللي هي أقرب نقطة Z أنا هبتدي أشوف منها، والـ Z far هي أبعد نقطة Z أنا هشوفها.
فما بين الـ Z near والـ Z far هي هياها الـ X minimum والـ X maximum والـ Y minimum والـ Y maximum، بس كأنك بتحطها في الـ third dimension. بس هنسميها Z near وZ far. أنا بشوف أي حاجة between Z near وZ far، أي حاجة قبل الـ Z near، أي حاجة بعد الـ Z far مش معايا. ok كده؟ فيبتدي نقول إيه، طب ما هو ده كانت الـ window أصلًا في الـ X والـ Y.
لو إنت حطيتلها كمان third dimension Z near هنا وZ far هنا، فكأن إنت دلوقتي شايف كل ما هو. ركب بقى التلاتة dimension على بعض، فكأنك شايف كل ما هو جوه الجسم ده. صح؟ الـ cuboid ده هو ده اللي بنسميه الـ view volume بتاعك، هو ده النت الـ volume اللي إنت شايف الـ view اللي جواه بس.
أي حاجة براه هيحصلها clipping. خن؟ فأصبح دلوقتي الـ view volume بتاعي بالشكل الـ parallel ده أو الـ cuboid ده. القريب ده بنسميه plane، بنسميه الـ Near plane أو الـ Near clipping plane، والبعيد ده بنسميه الـ Far clipping plane، اللي هو الـ plane اللي أنا معرفاه بالـ X والـ Y اللي هما كان حصل.بتوع الـ window plus الـ Z اللي أنا اخترتها.
ونفس الكلام ده هيبقى برضو بالـ X والـ Y اللي أنا معرفاهم بس بالـ Z far اللي أنا معرفاه.بختارها دلوقتي. فأصبح عندك clippers في الـ Z dimension اسمهم near clipping frame وfar clipping frame، وما بينهما هو الجزء اللي في الـ view volume بتاعي. طيب دي كده قصة الـ clipping. عايزة أعمل normalization.الـ normalization step لو نفتكر كانت الهدف منها إن أنا بحول جميع أبعاد الـ window بتاعتي بتاعة الـ clipping لـ من -1 لـ 1.
عملنا كده في الـ X والـ Y المرة اللي فاتت، فالمرة دي كمان هنعمل كده في مين؟ في الـ Z. فهتبتدي بقى تطبق هنا الـ transformation تحولك الشكل اللي إنت شايفه دلوقتي ده للـ normalized shape بتاعه اللي هو بـ -1 لـ 1 في جميع الاتجاهات. وده هنسميه الـ normalized view volume بتاعي. فين بقى الـ matrix اللي هتعملي الكلام ده كله؟ هي الـ matrix.
اللي اسمها OrthoNorm. هي شبه الـ matrix بالظبط اللي إحنا خدناها في الـ 2D بس دلوقتي أصبحت 4 by 4. لو تفتكروا الـ derivation اللي إحنا عملناه ساعة الـ 2D، هو هواه نفس الكلام اللي موجود هنا، بس بدل ما كنت بستخدم بس الاتنين دولت علشان يبقوا scaling في الـ X والـ Y، لأ بقى عندي كمان scaling في الـ Z، وبقى عندي مين؟ الـ translation offsets دي ليها برضو translation offset تالت فين؟ في الـ Z dimension.
ok؟ فالـ matrices دي كلها هي اللي هتعملي مين؟ الـ transformation. من إيه؟ من الـ viewing للـ normalized. أوكي؟ فلما نيجي نقول إحنا عايزين نعمل orthographic projection، يبقى إنت تعمل إيه؟ تجيب الـ coordinates بتاعتك اللي كانت في الـ world أو كانت في الـ viewing وتروح ضاربها في مين؟ في الـ matrix .
حلو؟ طب لو إحنا بقى هنجيبها من أول الـ World؟ من أول الـ World أنا عملت إيه في الـ Object؟ ضربتها في الـ Viewing transformation، وبعد كده المفروض هضربها في الـ Orthographic transformation دي. فلما أقول بقى على بعضها، فإني لو أنا عايزة أجيب كل الـ transformation من الـ World coordinates لـ الـ Orthogonal projection coordinates، يبقى أنا همسك الـ Viewing transformations اللي هي الـ Translation والـ Rotation matrices اللي إحنا شفناها في الأول، وبعدين جمعناها في matrix واحدة.
Times مين؟ الـ Matrix اللي فوق دي. ok كده؟ في حد عنده مشاكل يعني؟ طب المهم تبقوا فاهمين الـ Concept بتاعة الـ Projection، وكده كده الـ Matrix لو إنت مش فاهم أي derivation، الـ Matrix بتقوملك بالمهمة يعني. تبقى عارف الـ Matrix دي دورها إيه بالظبط. ماشي يا جماعة؟ أصحوا يا جماعة. الصيام وكلنا تعبانين.
أه، بتبقى given. إحنا اتفقنا من بعد الـ basic transformation، أي matrix هتبقى given بالنسبة لك. إنت تحفظ الـ basic بس.طيب، الـ Perspective projection بقى عنده شوية شغل. الـ Perspective projection عشان يجيب الموقع اللي سقطت فيه أي نقطة زي النقطة دي P مثلًا على الـ image plane بتاعي
بيستخدم قولنا إيه؟ معلومات الـ Z-dimension. إن إنت واقف قريب ولا بعيد من الـ image plane عشان بناء عليه هديك هنا مين؟ النقطة الجديدة بتاعتك. طيب، الأول نبص كده على اللي قدامنا ده نفهمه. أنا هنا ده الـ view بتاعي، يعني المكان ما أنا واقفة ببص، دي النقطة اللي أنا ببص منها، اللي إحنا قولناها من أول المحاضرة بكلمة Center of projection
طيب، في term تاني يوازي الـ Center of projection هو مين؟ الـ Projection Reference Point، ودي بنرمز لها بـ PRB. لما تسمعوا المحاضرة تاني وتكرروها كذا مرة هتثبت في دماغكوا بقى الـ terminologies دي كلها. فـ PRB هي مين؟ الـ Projection Reference Point اللي هي برضو النقطة اللي أنا واقفة ببص منها. فدي الإحداثيات بتاعتها. وده الـ Image plane بتاعي. أما الـ P دي فهي النقطة الأصلية اللي كانت في الـ Scene بتاعي، اللي أنا عايزة أجيب دلوقتي لما تقع على الـ Image plane هتقع في أنهي position.
فالـ Position اللي هي هتقع فيه هنا هسميه XB, YB, Z بتاع الـ VP. مين Z VP؟ الـ Z اللي بيقع عليها الـ View plane بتاعي ده. ok؟ طيب. هنيجي نقول بقى إيه؟ هيحسبهالنا إزاي الـ XB والـ YB دلوقتي؟ هيقول لي الـ XB هي عبارة عن الـ equation دي. الـ equation دي بتقول إيه؟ بتقول لي إن الـ X projected هي عبارة عن الـ X بتاعة النقطة الأصلية.
Times الـ factor ده + X بتاعة النقطة اللي إنت واقف عندها كـ viewer times الـ factor ده. فكأنه إيه؟ قبل ما أبص على الـ factor ده كده، هو الـ factor ده لو بصيت عليه كله هو ده معلومات عن الـ Z. هو بيعمل إيه actually؟ بيديك شوية من الـ X بتاعة ده على شوية من الـ X بتاعة ده، based على إيه؟ based على الـ View plane بتاعك فين؟ فهيطلع في الآخر الـ output بتاع.
صح. طب الشوية اللي بيجيبهم دول بيجيبهم منين؟ بيجيبهم بالـ equations دي. الـ equation الأولانية بتاعة الـ Z دي بتقولي الـ X دي أنا هضربها في factor عبارة عن المسافة دي. تانية، أنا عارفة إن الـ X هنا، بس الـ X دي مش هضربها في المسافة ما بينها وبين الـ View plane لأ، هيضربها في المسافة ما بين الـ View plane والـ viewer على الـ total مسافة، على الـ ratio بتاعتهم. يعني ديه.
على الـ total. فكأنها ratio مضروبة في الـ X. ويعكس الناحية التانية، يجيب الـ X PRB دي ويضربها في الـ ratio المقابلة بس من الناحية التانية، اللي هي المسافة دي على الـ total. هو بيعمل حاجة زي الـ Color blending كده. عارف إنت لما تبقى عندك مثلًا نقطة هنا حمرا ونقطة هنا خضرا وإنت واقف في النص، فإنت المفروض هتاخد شوية لون من ده وشوية لون من ده.
فإنت based على اللون اللي إنت أقرب منه، هتاخد لون أكتر منه شوية، صح؟ بس علشان تحقق المعادلة بتاعة إن اللي أنا أقرب منه هاخد منه شوية لون أكتر، هتلاقي نفسك بتقول إن اللي أنا أقرب منه مسافتي معاه أصغر. فاللي أنا أقرب منه عشان أخد منه أكتر، هضربه في المسافة البعيدة، اللي هي عكس المسافة اللي أنا واقفة بيها منه.
مش هضرب في المسافة اللي أنا واقفة جنبه عشان دي المسافة الأصغر، أنا هضربه في المسافة اللي بتاعة التاني اللي أنا واقفة بعيد عنه عشان دي المسافة الأكبر، فاهمين؟ فهو بيضرب، بيعمل كده بالظبط، بياخد جزء من الـ X مضروب في المسافة الكتيرة، أو يعني بياخد الـ X، يعني كل واحد منهم بيضربه في المسافة التانية علشان الأقرب ياخد منه أكتر. حاجة بالـ concept ده كده، بالمعنى ده كده.
أوكي؟ طب والـ ratio، ليه ratio؟ ليه قسم على ال total مسافة؟ علشان هو في الآخر مش عايز يطلع بره حدود الـ X's دي. فكأن أي ratio، كأنك باخد شوية من ده على شوية من ده، بس مش بـ scale الكلام ده برقم كبير، باخد منه شوية factor و factor بس. طيب، لو إنت مش مستوعب الكلام ده كله، إحنا عارفين، أنا بفهمك الـ concept بتاع الـ matrices جت منين. إنت مش مستوعب، it's okay، استخدم الـ matrix على.
على طول. تمام؟ فدي الطريقة اللي حسب بيها الـ X projected، ونفس الكلام حسب بيه مين؟ الـ Y projected. وزي ما اتفقنا، الـ ZVP اللي إنت شايفها هنا دي، الـ Z اللي واقف عندها الـ view plane بتاعك دلوقتي.طيب قبل ما نشوف الـ Matrix، هل أنا لازم أكون ملزمة بـ 1
center of projection عشان أـ view الـ scene بتاعي أو أعمله projection؟ لأ، إنت actually، إنت عينك الاتنين أصلًا بتـ form as two points of projection، دي عين دي واقفة عند position بتشوف scene وده. ودي بتشوف scene، ومخك هو اللي بيركب لك الصورتين على بعض. فبنفس المثال أنا أقدر يبقى عندي 1 point perspective أو 1 point center of projection، أو يبقى عندي 2 points، أو يبقى عندي مين؟ 3 points. طب شكل.
كبني آدمين يعني؟ إيه؟  الـ 3 point perspective ده.لأ، إحنا كبني آدمين ما عندناش عين تالتة، لكن كـ graphics library تقدر تعملهالك. أوكي؟ يعني إنت في الـ techniques بتاعة الكمبيوتر تقدر، لكن إنت بعينك الاتنين إنت عندك اتنين بس. أوكي؟ طيب، ناخد مثال كده، لو أنا عندي 1 point أو 2 point أو 3 point هيبقى شكل الـ image إزاي؟ الـ image اللي إنتوا شايفينها في النص دي بـ 1 point of projection، ليه؟ هو يدوبك جايب الـ front view بس، يعني جايب الـ foreshortening effect، القريب أكبر والبعيد أصغر.
هنا يديك مثلًا side view متركب مع front view، فده يديني مين؟ شكل الـ image بالـ 2 point perspective. لو أنا جيت قولتلك المبنى ده، لأ، المبنى ده معمول بـ 3 point perspective، ده جايب side وfront وup ومركبهم على بعض. أوكي؟ طيب الـ viewing volume، أنا هه... هنقول الـ matrix بس بعد ما نقول النقطة دي. الـ viewing volume في حالة الـ perspective projection عامل إزاي؟ فاكرين في حالة الـ parallel لما قولنا هو الصندوق اللي هو زي الـ cuboid ده عشان الـ rays كلها كانت.
Parallel؟ طب هنا الـ rays مش parallel، هنا الـ rays كلها عاملة كده، طالعة منك عاملة كده، طالعة من الـ center of projection عاملة كده. فتتوقع الـ view volume بتاعك هيبقى عامل إزاي لو أنا برضو خدت الـ window بتاعتي وكملت وراها قولت في الـ third dimension أو في الـ Z dimension أنا هنقي Z near مثلًا هنا وZ far هنا. فعشان أقص بقى الكلام ده كله على بعضه، يبقى الـ view volume اللي أنا شايفاه دلوقتي هو عبارة عن إيه؟
الشكل ده. إنت أصلًا عامل شكل هرم، إنت طالع كده عامل شكل هرم، صح؟ وإنت اخترت تقص من الهرم ده من الـ X دي للـ X دي، من الـ Y دي للـ Y دي. وجيت اخترت كمان من الـ Z دي للـ Z دي. فلما تاخد الـ X Y Z على بعضهم يديك مين؟ الـ first plane ده والـ second plane ده. هتبقى ما هو بين الـ two planes دولت إنت شايفه.
فيصبح دلوقتي الـ view volume بتاعك بالشكل ده. الشكل ده بنسميه frustum، اللي هو الهرم إلا حتة كده متاكلة منه. فده بنسميه مين؟ الـ frustum viewing volume بتاع مين؟ الـ perspective projection. فبرضو خلي بالك إنت في حالة الـ parallel كان عندك near وfar clipping frames، عشان السنة اللي فاتت سألتهم السؤال ده ومعرفش ليه اتلخبطوا فيه كلهم.
يبقى في الـ parallel وفي الـ perspective في الحالتين إنت عندك near وfar clipping frames في حالة الـ Z dimension، مش واحد بس دونًا عن التاني، صح؟ بس هناك أداك shape وهنا أداك مين؟ shape تاني. أوكي؟ طيب. هل أنا الـ viewing بتاعي أو الـ frustum بتاعي ده معتمد بس على أبعاد الـ window؟ لأ، هو معتمد على factor تاني اللي هو مين؟ الـ angle of view أو الـ field of view angle بتاعتي، اللي هي الزاوية اللي أنا بشوف بيها، أو الزاوية اللي ما بين الـ.
rays بتاعتي دي. الـ field of view angle دي كل ما أنا بزودها كل ما الـ frustum بتاعي بيكبر، اللي هي الزاوية ما بين مين؟ الأشعة الخارجة مني. بصوا كده على ده، بصوا الـ field of view angle كل ما بتتغير فوق، الـ frustum بتاعك بيزيد إزاي؟ فكل ما بتزود الـ field of view angle اللي هي الـ angle اللي between rays دي، كل ما الـ frustum بتاعك بيكبر، كل ما الـ view volume بتاعك بيكبر، كل ما الـ object description اللي إنت بتدخل معاك في الـ view volume بتاعك بتكتر وبتشوف حاجات أكتر.
فالـ field of view angle دي factor مهم في حساب مين؟ الـ viewing frustum بتاعي. فلما نيجي هنا بقى نقول إيه؟ نرجع بقى تاني للجزء بتاع مين؟ الـ equation اللي إحنا حسبنا فيها الـ projected point الـ XB والـ YB. هنا بس هيقولي إيه؟ عشان أجيب من الشكل ده matrix، أنا هبص على الكلام ده على إنه homogeneous representation.
الـ term اللي هو تحت ده، ده common denominator اللي هو Z PRB minus Z، هو هتلاقيه common هنا وهنا وهنا وهنا. فهياخد الـ term ده يقولي أنا هعتبره ده الـ homogeneous coordinate وهبص على اللي فوق ده كله على إنه X homogeneous. فيجي الكلام ده كله يحطه على matrix، فيقولي إيه؟ بصوا.
يقولي دلوقتي الـ transformation هتتم على two steps. أول مرة هعمل الـ matrix بتاعتي وأضربها في الـ point بتاعتي، بس الخارج مش الـ point projected، الخارج هي الـ Ph. وبعدين أرجع أقسم الـ Ph دي على الـ h اللي هنا ده، على الـ h اللي هنا اللي هو الـ factor اللي تحت ده، فيديني مين؟ الـ X projected.
فيصبح دلوقتي هو بيقولي الـ matrix اللي أنا هديهالك دي مش هتشتغل direct، لأ، الـ matrix دي اللي هي الـ M perspective دي هتضربها في الـ point بتاعتك هتديك مين؟ الـ point في الـ homogeneous، ترجع تقسمها على الـ h factor تديك الـ projected مين؟ point. أوكي؟ طيب، ما تقلقوش أنا مش يعني الكلام ده.
complicated عليكوا شوية. نادرا ما بسأل في الحتة دي، فـ it's okay عشان الناس بتتخض منها أوي بس خليك فاهم الـ concept بتاعتها. إيه ما فيهاش حاجة يعني. بس يعني احتياطيا خليكوا في ضرب الـ matrices بس. طيب، هنا بقى بيقولي إيه؟ بيقولي الـ viewing frustum ده أنا مبعرفش أشتغل عليه. أنا لازم أحوله لشكل مين؟ parallel كده علشان أعرف أشتغل عليه وأعمله clipping بعد كده.
فأبتدي أعمل الكلام ده كله برضو بـ matrix هتحوله لشكل مين؟ الـ parallel ده. بصوا، استنوا قبل ما نقول الجزء ده، هي الـ clipping window علشان تبقى بالشكل ده ويحصل عليها normalization هعملها مين؟ في الـ matrix اللي اسمها XY scale. طيب، قبل ما نعمل كده، بيقولي في عندي special case من الـ frustum اللي هو الـ symmetric frustum. لو الـ frustum بتاعي ده symmetric، يعني هنا عندي الـ center line بيقطع الـ X والـ Y في المنتصف بتاعهم.
طب هستفاد أنا إيه يا سيدي من إن هو يبقى symmetric؟ لأ، هو هيشتغل عليها بالـ equations بتاعت الـ trigonometric ويديني هنا الـ height يحسبه بطريقة معينة ويديني الـ width بطريقة معينة، فيروح الكلام ده يعوض بيه جوه الـ matrix بتاعت الـ symmetric فيحسبها بطريقة تانية. أهي، الـ NormPerspective بقى matrix اللي بتشتغل في حالة الـ symmetric frustum هتلاقيها matrix مختلفة باستخدام مين؟ باستخدام الـ angle of view وباستخدام مين؟ الـ ratios اللي هو.
حسبها بالـ trigonometry دلوقتي. أوكي؟ طيب، افترضنا إن إحنا خلاص عملنا projection وطبقنا الـ matrices بتاعتنا، عايزين نعمل إيه بعد كده زي ما اتفقنا؟ بنعمل الـ clipping اللي هو الـ normalization اللي بتحولي للشكل الـ normalized بتاع الـ view volume بتاعي. طيب الـ matrix دي اللي إحنا اتفقنا خلاص هتعمل الكلام ده، وادي الـ matrix اللي هتعمل الـ normalization.
هتضرب الكلام ده كله في الـ point بتاعتك فتديك الإحداثيات بتاعتها في الـ normalized مين؟ window. وده في حالة الـ symmetric يبقى هتضربها في الـ matrix دي. طب الـ total بقى transformation على بعضها؟ لو أنا جبتها برضو من أول الـ world coordinates في حالة الـ perspective projection يبقى أنا هعمل إيه؟ هضرب في نفس الـ matrices بتاعت الـ viewing transformation والمرة دي بس هضربها في مين؟ في الـ matrices بتاعت الـ perspective، سواء هي هتبقى symmetric يبقى هضربها في الـ norm symmetric، أو العادية يبقى هضربها في الـ norm perspective العادية.
أوكي؟ في حد عنده سؤال؟ طيب انتوا متنحين. بصوا المحاضرة دي تقيلة، أنا معترفة. هي أتقل محاضرة في الـ term. يعني الباقيين أسهل بكتير إن شاء الله ما تقلقوش. فاضلنا two topics لسة، الـ visible surface detection والـ elimination ودول لطاف جدًا. هي النهاردة بس الـ matrices بتاعتها كتيرة شوية، بس أنا عايزاك تبقى فاهم الـ concept.
متقلقش من الامتحان، عايزاك تبقى فاهم. والمفروض إن إنتوا طبقتوا الـ projection في الـ labs، طبقتوه ولا لسة؟ طيب، فهمتوا حاجة طيب وإنتوا بتشتغلوا بإيديكوا ولا الدنيا برضو صعبة؟ تمام؟ طيب ماشي. خبر حلو بقى إن شاء الله الأسبوع الجاي هيبقى التلات اللي هو ليلة العيد، فـ.
عشان تجهزوا للعيد بقى وتحضروا العيد براحتكوا، وإن شاء الله نشوف بعض التلات اللي بعده. في بس كده يعني بعد 2 أو 3 weeks هيبقى في online quiz، ده هيبقى 10 MCQ على المنهج كله، فاللي حابب يجهز يعني من بدري براحته، بس هنعمل طبعًا التفاصيل قبلها، هيبقى يوم جمعة الصبح بعد الصلاة كده نص ساعة ولا حاجة، لكن تبقى عندك فكرة يعني من دلوقت.