วิธีเปลี่ยนแผนภูมิ 3 มิติเป็นสิ่งที่สามารถรับชมได้บนโทรทัศน์ 3 มิติ


9

สมมติว่าฉันมีพล็อตกระจาย 3 มิติใน R หรือเฟรมข้อมูลที่มี 3 ฟิลด์ที่เต็มไปด้วยข้อมูลตัวเลข

วิธีที่จะ "เปลี่ยน" เป็น "บางอย่าง" ที่สามารถรับชมได้บนโทรทัศน์ 3 มิติ (เช่นทีวีหน้าจอขนาดใหญ่แบบสุ่มจาก Samsung โดยใช้แว่นตาชัตเตอร์) คลิปคงที่ของพล็อตการกระจายนั้นหมุนรอบแกนหรือดีกว่าที่จะสามารถโต้ตอบกับพล็อตได้ (เลื่อน, หมุน, ... ) คุณต้องการใช้โปรแกรมห้องสมุดอะไรบ้าง

(ฉันเพิ่งนำ R ขึ้นมาเพราะนั่นคืองานที่ทำ แต่การแก้ปัญหาไม่จำเป็นต้องรวม R)


1
หากคุณมีการแสดงพล็อต 3 มิติแล้วสิ่งที่คุณต้องมีก็คือการสร้างมุมมองอย่างน้อยสองครั้ง มุมมองเหล่านี้จะต้องแตกต่างกันในสิ่งที่พวกเขาแสดงด้วยจำนวนน้อยที่สุด ดังนั้นหาก "กล้อง" ของคุณจะดูพล็อตจากมุมหนึ่งคุณจะเปลี่ยนกล้องเล็กน้อยไปทางซ้ายหรือขวาเพื่อให้ได้มุมมองที่สอง
slhck

1
และจากนั้นคุณต้องเข้ารหัสภาพในวิดีโอแบบหลายมุมมองที่ทีวีสามารถจัดการได้เช่น H.264 MVC หรือสเตอริโอแยก - คุณมีข้อ จำกัด อะไรบ้าง?
slhck

@slhck: ฉันไม่ได้เป็นตัวแทน 3 มิติของมัน ฉันสามารถแสดงมันด้วย R ในแบบ 3 มิติ นอกจากนี้การใช้กล้องสองตัวบน VRML อาจจะเป็นอุปสรรคต่อการโต้ตอบกับเนื้อเรื่อง ชอบปรับระดับหรือใช้ข้อมูลที่แตกต่างกัน : /
Raffael

1
อ้อเข้าใจแล้ว. นั่นจะซับซ้อน คุณต้องการกราฟิกที่แสดงผลที่สามารถแสดงผล 3D จริงจากการ์ดกราฟิกของคอมพิวเตอร์ของคุณ (เช่น NVIDIA ที่มีชุดวิสัยทัศน์ 3 มิติ) แต่ฉันไม่รู้สิ่งนั้น
slhck

1
คุณต้องการการ์ดกราฟิกที่สามารถแสดงผล 3D (เช่น NVIDIA และ 3D vision ที่กล่าวถึงไปแล้ว) จากนั้นโปรแกรมที่แสดงข้อมูลของคุณในวิวพอร์ต 3D ที่เร่งความเร็วด้วยฮาร์ดแวร์ (คล้ายกับวิดีโอเกม) กำลังดำเนินการ (processing.org) อาจช่วยคุณในเรื่องนี้
evilspoons

คำตอบ:


1

คุณสามารถสร้างภาพสองภาพ (สำหรับตาซ้ายและขวา) สำหรับแต่ละเฟรมภาพเคลื่อนไหวของคุณตั้งค่าแบบเคียงข้างกัน (เพื่อสร้างภาพที่กว้างมากหรือบีบในแนวนอน) และสร้างไฟล์วิดีโอด้วยวิธีนี้ . จากนั้นวางไฟล์นั้นลงในไดรฟ์ USB แล้วเสียบเข้ากับทีวี 3 มิติที่ทันสมัยและดูในเมนู 3D คุณควรพบตัวเลือก "เคียงข้างกัน" หรือ "SBS" ซึ่งจะเข้าใจวิธีการแสดงภาพ (ค้นหาตัวอย่างเช่น "GoPro 3D" บน YouTube)

คุณอาจทำเช่นเดียวกันกับคอมพิวเตอร์ที่เชื่อมต่อกับทีวีเป็นจอมอนิเตอร์ แต่ส่วนที่ไม่ใช่ 3 มิติของเดสก์ท็อปจะต้องถูกซ่อนเนื่องจากจะไม่ถูกทำซ้ำสำหรับแต่ละตา (และดูแปลก ๆ )

หมายเหตุ: หากคุณเชื่อมต่อคอมพิวเตอร์กับหน้าจอ 3 มิติในโหมด SBS คุณจะพบว่ามีประโยชน์ในการปิดตาทีละครั้งในขณะที่นำทางเพื่อเริ่มงานนำเสนอของคุณ


0

จริงๆคุณเพียงแค่ต้อง plot3d spinnable () จากแพคเกจ RGL

  1. เริ่มต้นการวางแนวของพล็อตของคุณในบางตำแหน่งปกติ
  2. สร้างอินสแตนซ์ฐานสองอินสแตนซ์ของคุณหมุนเล็กน้อยในทิศทางตรงกันข้าม (สำหรับมุมมองเหมือนเลนส์ที่อยู่กึ่งกลาง) หรือซูมเข้าและออกตามลำดับเล็กน้อย (สำหรับมุมมอง 3 มิติมาตรฐานที่มากขึ้น)

    x แต้มสีฟ้าให้ไกลยิ่งขึ้น

  3. อย่าแสดงพล็อตฐานจริง ๆ ใช้ฐานในการคำนวณ quad buffer (หรือ double buffer) โดยเฉพาะอย่างยิ่งการสลับว่าอ็อฟเซ็ตสองจุดใดที่แสดงในแต่ละเฟรม อัปเดตแต่ละลูปการวาด แสดงแต่ละพล็อตอินสแตนซ์หลังจากการอัพเดตพร้อมกัน
  4. ใช้ตัวจับเวลาความละเอียดสูงหรือ VSync เพื่อเล่นบัฟเฟอร์สแต็กด้วยอัตราการรีเฟรชที่แม่นยำของอุปกรณ์แว่นตาชัตเตอร์ที่คุณกำหนด
  5. หวังว่าอัตราการรีเฟรชสามารถกำหนดค่าได้ในแอปของคุณรวมถึงตัวเลือก 'ข้ามเฟรมถัดไป' เพื่อซิงค์กับแว่นตาชัตเตอร์ (เพื่อย้อนกลับการซิงค์ซ้าย / ขวา)
  6. ก่อนที่จะอัพเดตพล็อตฐานให้สแกนอินพุตสำหรับคำติชมของผู้ใช้ซึ่งอาจมาจากบัฟเฟอร์อินพุตแบบอะซิงโครนัส
  7. เชื่อมต่อแล็ปท็อปหรืออุปกรณ์ลินุกซ์ขนาดเล็กเข้ากับทีวีด้วย HDMI lol
  8. โบนัส: หากคุณต้องการลงไปจริง ๆ คุณสามารถใช้RcppและGLFWร่วมกันเพื่อจัดการกับความบ้าคลั่งของจอยสติ๊ก / เมาส์ / เกมแพด

มีคำอธิบายสั้น ๆ ของ rgl และแพ็คเกจที่คล้ายกันสำหรับแปลงหมุน 3 มิติซึ่งสามารถดูได้ในตอนท้ายของการโพสต์นี้

หากคุณทำได้คุณจะต้องวางเอฟเฟกต์เบลอที่ขับเคลื่อนด้วยเปอร์สเปคทีฟแบบเห็นภาพในแต่ละจุดโดยใช้ OpenGL แน่นอนว่าคุณอาจต้องปรับมุมเล็กน้อยเพื่อทำให้ถูกต้อง ถ้าฉันจำได้ว่ามันควรจะเป็นมุม <20 องศา ... แต่ใครจะรู้ไม่ใช่ฉัน!


ไม่ขอโทษ ฉันรู้ว่า rgl และ rgl รองรับ anaglyph 3D จากกล่อง ฉันพูดถึงแว่นตาชัตเตอร์ด้วยเหตุผล แต่ต้องขอบคุณต่อไป;)
Raffael

@ Яaffaelอ้าว! ไม่เห็นว่าเกี่ยวกับแว่นตาชัตเตอร์เนื่องจากอ่านเร็วเกินไป ขออภัยที่เพิ่มการแก้ไขบางอย่าง
Garet Claborn

คุณอาจจะสามารถใช้ R กับ OpenCL / GL interop เพื่อให้ได้บัฟเฟอร์และมีบริการแยกเขียนอย่างเดียวไปยังบัฟเฟอร์อินพุตให้แอปของคุณเข้าถึงแบบอ่านอย่างเดียว (จากนั้นคุณต้องย้อนกลับเพื่อส่งข้อความกลับไปยังบริการอย่างรวดเร็วเมื่ออ่านอินพุตแล้ว) หรือในทำนองเดียวกันเพียงแค่ให้แอปของคุณสร้างบัฟเฟอร์และโพสต์จุดยอดไปยัง OpenCL และ C ++ / OpenGL / OpenCL renderer ด้าน
Garet Claborn

ฉันลบคำถามของฉันเพราะฉันได้คำตอบที่ไม่เกี่ยวข้องมากเกินไป (เช่นคุณจนถึงตอนนี้ :) แต่คุณสามารถอัปเดตได้
Raffael
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.