سؤال

أنا أكتب راي راي (باستخدام الإحداثيات اليسرى، إذا كان ذلك يحدث فرقا). من أجل تعليم نفسي المبادئ، لذلك أنا لا أستخدم OpenGL أو ميزات معقدة مثل عمق الحقل (حتى الآن). يمكن أن تحتوي الكاميرا على وضع وتعسفية؛ أشير إليهم عن طريق ثلاثة ناقلات، location, look_at, ، و sky, ، والتي تتصرف مثل مكافئ بنف راي ناقلات. وبعد لها "فيلم" لديه أيضا width و height. وبعد (ال focal طول ضمنيا من المسافة من position ل look_at.)

مشكلتي هي أنه لا تعرف كيفية إلقاء الأشعة. لدي كم كميتان، vx و vy, ، تشير إلى المكان الذي يجب أن ينتهي به أشعة. يتغير كلاهما من -1 إلى 1. إذا كانوا على حد سواء -1، فأنا ألقي الأشعة من موقف الكاميرا إلى الزاوية العلوية اليسرى من "الفيلم"؛ إذا كلاهما 1، اليمين السفلي؛ إذا كانوا كلاهما 0، المركز؛ والباقي واضح.

أنا لست مألوفا بما فيه الكفاية مع الحساب المتجه لاستخلاص معادلة ل Ray. وأود أن أقدر شرحا لكيفية القيام بذلك.

هل كانت مفيدة؟

المحلول

لقد وصفت بما يجب القيام به جيدا بالفعل. يتم تحديد مجال عرض الخاص بك عن طريق المسافة بين الكاميرا والفيلم الخاص بك "فيلم" الخاص بك الذي ستلقي أشعة الخاص بك. الحد الأقصى للكاميرا من الفيلم، وهو الحقل الضيق الخاص بك هو.

تخيل الفيلم كصورة نقطية تشير الكاميرا إليها. قل أننا نضع الكاميرا وحدة واحدة بعيدا عن الصورة النقطية. بعد ذلك، يجب أن يلقي أشعة رغم كل من البكسلات النقطية.

المتجه بسيط للغاية. إذا وضعنا موقع الكاميرا إلى (0،0،0،0)، وفيلم النقطية أمامه مباشرة مع مركزها في (0،0،1)، ثم راي إلى أسفل اليمين هو - Tada - (1، 1،1)، والآخر إلى أسفل اليسار هو (-1،1،1).

وهذا يعني أن الفرق بين اليمين السفلي واليسرى هو (2،0،0).

افترض أن قرارك النقطية الأفقية يجب أن يكون 1000، ثم يمكنك التكرار من خلال البكسلات القاع كما يلي:

width = 1000;
cameraToBottomLeft = (-1,1,1);
bottomLeftToBottomRight = (2,0,0);

for (x = 0; x < width; x++) {
    ray = cameraToBottomLeft + (x/width) * bottomLeftToBottomRight;
    ...
}

إذا كان هذا واضحا، فأنت فقط أضف حلقة خارجية مكافئة لخطوطك، ولديك جميع الأشعة التي ستحتاج إليها.

يمكنك بعد ذلك إضافة المتغيرات المناسبة لمسافة الكاميرا للفيلم والدقة الأفقية والرأسي. عندما يتم ذلك، يمكنك البدء في تغيير متجه مظهرك وعالي ناقلاتك مع تحويلات مصفوفة.

إذا كنت ترغب في التفاف رأسك حول رسومات الكمبيوتر، الكتاب المقدس يمكن أن يكون مساعدة كبيرة. انا إستعملت هذا في الكلية، وأعتقد أنني أحببت ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top