سؤال

لقد كنت تحاول أن تجعل GL_QUAD (وهو على شكل شبه منحرف) مع مربع الملمس.أود أن محاولة استخدام OpenGL فقط إلى سحب هذا قبالة.الآن الملمس هو الحصول على مشوهة بشكل كبير وهو أمر مزعج حقا.

في العادة أنا تحميل الملمس حساب homography ولكن هذا يعني الكثير من العمل إضافية البرمجة الخطية المكتبة/المباشرة الخطي تحويل وظيفة.أنا تحت انطباع OpenGL يمكن تبسيط هذه العملية بالنسبة لي.

لقد بحثت في جميع أنحاء شبكة الإنترنت و رأيت "وجهة نظر صحيحة التركيب ، س الإحداثيات ، GLSL" و "منحرفة/المنفصمة نسيج الخرائط في برنامج OpenGL".

كل هذه يبدو أن تفترض أنك سوف تفعل بعض نوع من homography حساب أو استخدام بعض أجزاء من OpenGL أنا جاهل ...أي نصيحة ؟

تحديث:

لقد تم قراءة "التنقل ثابت البيئات باستخدام الصور الفضائية تبسيط تتحول" [PDF] - الصفحة 9 التذييل ألف.

يبدو أنهم تعطيل تصحيح المنظور بضرب (s,t,r,q) نسيج التنسيق مع قمة نموذج عالم الفضاء ض المكون.

وذلك من أجل إعطاء الملمس تنسيق (s, r, t, q) عن رباعية ذلك على شكل شبه منحرف ، حيث 4 عناصر هي:

(0.0f, 0.0f, 0.0f, 1.0f),
(0.0f, 1.0f, 0.0f, 1.0f),
(1.0f, 1.0f, 0.0f, 1.0f),
(1.0f, 0.0f, 0.0f, 1.0f) 

هذا هو سهلا كما glTexCoord4f (svert.z, rvert.z, t, q*vert.z)?أو أنا في عداد المفقودين بعض الخطوة ؟ مثل العبث مع GL_TEXTURE glMatrixMode?

تحديث #2:

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

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

المحلول

هنا هو تفسير جيد من قضية & الحل.

http://www.xyzw.us/~كاس/qcoord/

جزئيا نسخ مقتبس من الرابط أعلاه, تم إنشاؤها بواسطة كاس

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

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

برنامج OpenGL سوف تقسم رباعية في المثلثات وحساب المنحدرات من نسيج الإحداثيات (ds/dx, ds/dy, dt/dx, dt/dy) واستخدام تلك يقحم نسيج تنسيق أكثر داخل المضلع.على الجانب الأيسر السفلي من المثلث dx = 1 و س = 1 ، ولكن الجزء العلوي الأيمن مثلث, dx < 1 في حين ds = 1.وهذا يجعل ds/dx العليا الحق في مثلث أكبر من ds/dx على أقل واحد.وتنتج هذه صورة كريهة عندما نسيج معين.

نسيج الفضاء ليس مجرد 2D أفيني الطائرة على الرغم من أننا عادة ترك r=0 س=1defaults وحده.انها حقا كامل حتى اسقاطي الفضاء (P3)!هذا أمر جيد لأنه بدلا من تحديد نسيج الإحداثيات العليا القمم كما (s,t) إحداثيات (0, 1) و (1, 1), يمكننا تحديد لهم (s,t,r,q) إحداثيات (0, العرض, 0, العرض) و (العرض, العرض, 0, العرض)!هذه الإحداثيات تتوافق مع نفس الموقع في نسيج الصورة ، ولكن انظر ماذا حدث ds/dx - انها الآن نفسه لكل مثلثات!!كلاهما لديهم نفس dq/dx و dq/dy كذلك.

علما أنه لا يزال في z=0 الطائرة.يمكن أن تصبح مربكة جدا عند استخدام هذا الأسلوب مع منظور الكاميرا الإسقاط بسبب "كاذبة تصور عمق" أن هذا ينتج.ومع ذلك ، فإنه قد يكون أفضل من استخدام فقط (s,t).هذا هو بالنسبة لك أن تقرر.

نصائح أخرى

أعتقد أن معظم الأشخاص الذين يرغبون في ملاءمة نسيج مستطيل على شبه منحرف يفكرون في إحدى نتيجتين:

  1. إسقاط المنظور: يبدو شبه المنحرف كمستطيل يُرى من زاوية مائلة.
  2. التحول "القابل للتمدد": يشبه شبه المنحرف قطعة مستطيلة من المطاط تم شدها / تقلصها إلى شكل.

تندرج معظم الحلول هنا في SO ضمن المجموعة الأولى ، بينما وجدت نفسي مؤخرًا في المجموعة الثانية.

أسهل طريقة وجدتها لتحقيق التأثير 2. كانت تقسيم شبه المنحرف إلى مستطيل ومثلثات قائمة.في حالتي ، كان شبه المنحرف منتظمًا ، لذا تم حل المشكلة باستخدام رباعي ومثلثين.

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