Three.js: النقاط لا يبدو أن توهين حجم المادة يأخذ في الاعتبار مجال الرؤية

تم إنشاؤها على ٧ سبتمبر ٢٠١٧  ·  3تعليقات  ·  مصدر: mrdoob/three.js

أنا أستخدم PerspectiveCamera ونموذجًا يتضمن بعض النقاط باستخدام PointsMaterial. أنا أستخدم إصدارًا مخصصًا من OrbitControls.js للسماح بعرض نموذج كبير ومعقد. تتمثل إحدى التغييرات في أن وظيفة التكبير / التصغير تغير مجال الرؤية للكاميرا بدلاً من تقريبها. تتحرك الكاميرا لإظهار جزء محدد من النماذج. لقد لاحظت أن توهين PointsMaterial يتغير أحجامه عندما تتحرك الكاميرا بالقرب من النموذج ولكن ليس عند تغيير FOV.

أفترض أن خوارزمية الحجم تستخدم المسافة إلى الكاميرا ولكن ليس FOV؟ لم أنشر مطلقًا في هذا الريبو من قبل لذا اعذرني إذا فاتني شيء ما. حاولت اختبار IE ولكن لا يمكنني تحميل الصفحة في الوقت الحالي. وبالمثل ، لست متأكدًا بالضبط أي إصدار من Three هو عليه ولكن خلال العام الماضي.

الكود الذي يُنشئ PointsMaterial:

var texFlame = new THREE.TextureLoader().load("textures/flame.png");
mtlFlame = new THREE.PointsMaterial ({size: 2, sizeAttenuation: true, color: 0xffffff, transparent: true,  blending: THREE.AdditiveBlending, depthWrite: false, map: texFlame});

الكود الذي يغير مجال الرؤية غير مثير بالمثل:

this.camera.fov = fov;
this.camera.updateProjectionMatrix ();
إصدار Three.js
  • [] ديف
  • [] r87
  • [x] ...
المستعرض
  • [] كل منهم
  • [x] كروم
  • [x] فايرفوكس
  • [ ] متصفح الانترنت
نظام التشغيل
  • [] كل منهم
  • [x] ويندوز
  • [] macOS
  • [] لينكس
  • [ ] ذكري المظهر
  • [] iOS
متطلبات الأجهزة (بطاقة الرسومات ، جهاز VR ، ...)

لا أعرف ما إذا كان هذا خاصًا بالأجهزة ولكن يبدو من غير المحتمل. أنا أستخدم GeForce GTX950 في نظام التشغيل Windows 10.

Question

ال 3 كومينتر

PointsMaterial.size على وحدات بكسل - وليس وحدات عالمية. سيكون عليك ضبط الحجم بنفسك.

قد تكون هذه المشاركة ذات الصلة مفيدة: https://github.com/mrdoob/three.js/issues/10385#issuecomment -267789138.

احذر من أن gl_PointSize قد يكون محدودًا ، لذا قد لا يكون الحجم الذي تطلبه هو الحجم الذي تحصل عليه.

تضمين التغريدة لذا أحتاج إلى تغيير خاصية الحجم الخاصة بـ PointsMaterial عندما أقوم بتغيير FOV؟

لقد وجدت هذا المنشور قبل أن أسأل ولكني لا أتابع تمامًا سبب عمله بهذه الطريقة. أفهم أن الحجم بالبكسل ولكن التوهين بالفعل يجعله غير مرتبط بأجهزة البكسل وهذه العملية بالتأكيد يجب أن تتعلق بالمنظور الذي يجب أن يرتبط بـ FOV بمعنى ما؟

ومع ذلك ، هذا يفسر فقط عدم فهمي. أنا سعيد تمامًا بالحل الذي تقدمه. شكرا.

أتوقع أن يظل PointsMaterial.size في وحدات البكسل ، لذا كمرجع ، سأقوم بنشر هذا العمل هنا.

بناءً على إجابة تدفق التكديس هذه ، يمكنك قياس نقاطك باستخدام النمط التالي ، والذي يجب أن يعمل مع قيم معقولة لـ camera.fov .

var defaultSize = 10;
points.material.size = defaultSize / Math.tan( ( Math.PI / 180 ) * camera.fov / 2 );
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

fernandojsg picture fernandojsg  ·  85تعليقات

ghost picture ghost  ·  81تعليقات

QuaziKb picture QuaziKb  ·  73تعليقات

jonobr1 picture jonobr1  ·  95تعليقات

arctwelve picture arctwelve  ·  92تعليقات