Three.js: حدد المستخدم مقطع الطائرة

تم إنشاؤها على ١٣ أكتوبر ٢٠١١  ·  5تعليقات  ·  مصدر: mrdoob/three.js

أرغب في استخدام طائرات قص يحددها المستخدم.
في برنامج OpenGL سأستخدم:

glClipPlane(GL_CLIP_PLANE0, planeEq);
glEnable(GL_CLIP_PLANE0);

كيف يمكنني فعل الشيء نفسه مع webGL؟

Question

التعليق الأكثر فائدة

شكرا جزيلا يا شباب !!

جعلتني اقتراحاتك أعيد النظر في المشكلة ، ولاحظت أنه لا يوجد تأخر "عام" ، ولكن كان هناك وميض فقط عندما يتغير مستوى المقطع القريب (موضع المرآة مقارنةً بموضع الكاميرا العاكسة).

لذلك ، كنت تقريبًا هناك WestLangley : إنها مصفوفات الكاميرا

النتيجة: لا مزيد من "التأخر": http://jsfiddle.net/slayvin/PT32b/2/ : مبتسم:

ربما يمكننا تجريد هذا في موضوعه الخاص.

نعم ، لقد فكرت في الأمر. سيكون من الرائع أن يكون لديك new THREE.mirror() يتعامل مع كل شيء. سأحاول ترميز شيء ما ...

ال 5 كومينتر

يجب أن تكون قادرًا على الحصول على سياق WebGL باستخدام renderer.context .
من هناك ، الأمر متروك لك ومواصفات WebGL :)

لقد واجهت مؤخرًا نفس المشكلة أثناء تنفيذ الأسطح المستوية العاكسة (المعروفة أيضًا باسم "المرايا": ابتسامة:) في ثلاثة ملفات.
بقدر ما أعلم ، لا يمكنك الحصول على طائرات قطع معرّفة من قِبل المستخدم مع WebGL ، على الأقل ليس باستخدام طريقة OpenGL "البسيطة" التي وصفتها.
الحيلة هي استخدام طريقة "Oblique View Frustum" الموضحة في هذه الورقة: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
الغرض من هذه الطريقة هو استبدال مستوى القصاصة القريب من الكاميرا العاكسة بواسطة المستوى المحدد بواسطة السطح العاكس.
حتى أن هناك بعض الكود المصدري متوفر (في C ++ رغم ذلك): http://www.terathon.com/code/oblique.html

لقد نجحت في نقل هذه الطريقة في three.js وهنا نموذج مشهد لإظهار هذا مباشرة: http://jsfiddle.net/slayvin/PT32b/

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

أي فكرة عن كيفية إصلاح هذا؟ هل أحتاج إلى تنفيذ نوع من طريقة التخزين المؤقت المتعدد ، أم أنه ببساطة لأنني لا أقوم بتحديث مصفوفة الكاميرا بعد تعديل frustum؟ إذا كان الأمر كذلك ، فكيف أفعل ذلك؟

هممه ... لقد حاولت تعيين scene.autoUpdate إلى false واستدعاء scene.updateMatrixWorld() يدويًا للتأكد من أن جميع العارضين لديهم نفس الأشياء ولكن لا يبدو أنهم يحلون أي شيء ... لم يتم استدعاء mirror.updateMatrix() قبل استخراج التدوير من هناك ...

رائع رغم ذلك! ربما يمكننا تجريد هذا في موضوعه الخاص.

حلو.

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

mirror.updateMatrixWorld();

camera.updateMatrixWorld();

camera.matrixWorldInverse.getInverse( camera.matrixWorld );

شكرا جزيلا يا شباب !!

جعلتني اقتراحاتك أعيد النظر في المشكلة ، ولاحظت أنه لا يوجد تأخر "عام" ، ولكن كان هناك وميض فقط عندما يتغير مستوى المقطع القريب (موضع المرآة مقارنةً بموضع الكاميرا العاكسة).

لذلك ، كنت تقريبًا هناك WestLangley : إنها مصفوفات الكاميرا

النتيجة: لا مزيد من "التأخر": http://jsfiddle.net/slayvin/PT32b/2/ : مبتسم:

ربما يمكننا تجريد هذا في موضوعه الخاص.

نعم ، لقد فكرت في الأمر. سيكون من الرائع أن يكون لديك new THREE.mirror() يتعامل مع كل شيء. سأحاول ترميز شيء ما ...

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات