2011-07-26 38 views
9

Tôi có một TV 3D và cảm thấy rằng tôi sẽ xúi giục trách nhiệm của mình (như một geek) nếu tôi không cố gắng làm cho nó hiển thị những hình ảnh 3D tuyệt đẹp của sự sáng tạo của riêng tôi!Làm cách nào để xuất hình ảnh 3D vào TV 3D?

Tôi đã thực hiện một số lượng rất cơ bản về lập trình OpenGL trước đây và vì vậy tôi hiểu các khái niệm liên quan - Giả sử rằng tôi có thể tự vẽ một tứ diện đơn giản hoặc khối lập phương và làm cho nó quay xung quanh một chút; Làm thế nào tôi có thể có được TV 3D của tôi để hiển thị hình ảnh này trong, tốt, 3D? Lưu ý rằng tôi hiểu các khái niệm cơ bản về cách hoạt động của 3D (hiển thị cùng một hình ảnh hai lần từ 2 góc khác nhau, một cho mỗi mắt), câu hỏi của tôi là về hậu cần thực sự thực hiện việc này (tôi có cần SDK không? V.v.) ..)

  • TV tôi có sử dụng 3D phân cực, mặc dù ý định của tôi là câu hỏi này cũng có liên quan đến công nghệ 3D khác (nếu có thể)
  • máy tính xách tay của tôi có một đầu ra HDMI, đó là những gì tôi có ý định sử dụng để kết nối với TV của tôi (điều này có tạo nên sự khác biệt nào khi sử dụng cáp video VGA/thành phần không?)
  • Trước đây tôi có thử nghiệm với GLUT/OpenGL, tuy nhiên nếu nó dễ dàng hơn/chỉ thực sự có thể làm điều này bằng cách sử dụng một số công nghệ thay thế thì đó là tốt.
+0

Có thể trùng lặp [Làm cách nào để xuất tín hiệu lập thể tương thích HDMI 1.4a từ ứng dụng OpenGL sang 3DTV?] (Https://stackoverflow.com/questions/7032991/how-can-i-output-a -hmi-1-4a-tương thích-tín hiệu lập thể-từ-an-opengl-appli) – user2284570

Trả lời

7

Vấn đề chính là đưa GPU của bạn gửi định dạng lập thể. Trong trường hợp kết nối HDMI, điều này sẽ không hoạt động nếu không có sự trợ giúp của người lái xe. Nếu bạn có một lớp GPU chuyên nghiệp (Quadro, FireGL), sau đó họ có khả năng quadbuffers hỗ trợ OpenGL, tức là bạn sẽ có được framebuffers cho mắt trái và phải, cả hai trở lại và phía trước:

glDrawBuffer(GL_BACK_LEFT); 
render_left_eye(); 

glDrawBuffer(GL_BACK_RIGHT); 
render_right_eye(); 

glDrawBuffer(GL_BACK); // renders to both eyes simultanously 
render_screen_level_and_nonstereoscopic(); 

SwapBuffers(); 

Thật không may OpenGL quad đệm được coi là chuyên nghiệp cấp công cụ.

Thay vào đó, NVidia (ít nhất) cung cấp thư viện lập thể tùy chỉnh cộng với một số tiện ích mở rộng để kiểm soát nó. Lý do chính là, các mảnh chia sẻ chỉ được trả lại một lần và sau đó được gửi tới cả hai mắt với thị sai ứng dụng. Tuy nhiên, từ những trải nghiệm bán chuyên nghiệp của tôi với bản thể âm học, những loại hình lập thể bán tự động này chỉ không cắt nó. Stereoscopy yêu cầu kiểm soát chặt chẽ của toàn bộ "sản xuất" đường ống, nếu không bạn đang hơi say. Với Voi Giấc mơ Tôi đã đi xa như sửa đổi mã cốt lõi của trình hoàn trả.

Tôi đã gửi người ở góc độ 3D tại NVidia một số trường hợp bạn cần kiểm soát chính xác quá trình lập thể, và tôi hy vọng họ sẽ nhìn thấy ánh sáng và cấp quyền truy cập vào bộ đệm stereo quad cũng trên phần cứng cấp người tiêu dùng.

Lưu ý rằng tôi hiểu những điều cơ bản của cách thức hoạt động 3D (render cùng một hình ảnh hai lần từ 2 góc độ khác nhau, một cho mỗi mắt)

Trên thực tế bạn không làm cho từ hai góc độ khác nhau, nhưng với thay đổi thị sai và thay đổi ống kính. Nếu không, bạn sẽ nhận được một số biến dạng hình thang/keystone theo chiều ngang, rất, rất khó chịu để xem (trên thực tế, tôi nghĩ rằng trong quá trình dựng hình lập thể nên phân tách một chút các trục quang - nghĩa là làm trái ngược hoàn toàn với những gì một cách ngây thơ do - và "over" bù đắp với sự thay đổi ống kính, tôi hiện đang chuẩn bị một nghiên cứu nhỏ về vấn đề này, nhưng vẫn cần thu thập các nhóm kiểm tra và kiểm soát của tôi).


1: quái, tôi là anh chàng người single-handedly stereographed Voi Dream, rendered it và đã nhận nó một award at a 3D movie festival.

+0

Cảm ơn bạn đã trả lời toàn diện! Vì nó xảy ra, tôi đã thực sự nghĩ đến việc mua một máy tính xách tay khác có thẻ đồ họa Quadro (mà không nhận ra rằng nó có thể hữu ích), vì vậy tôi vẫn chưa có cơ hội thử nghiệm cả hai phương pháp. – Justin

+0

Trên thực tế, từ tài liệu của họ, crap nVidia 3D hoạt động bằng cách quyết định dựa trên một số chẩn đoán như tỷ lệ khung hình mục tiêu có hay không trùng lặp các mục tiêu cũng như tất cả các cuộc gọi vẽ và sửa đổi bóng đổ đỉnh để thực hiện các phép tính thị sai. Điều khéo léo về nó là một số người ở nVidia thông minh hơn bạn nhiều và biết nhiều hơn về bất kỳ ứng dụng nào hơn là bạn có thể viết, đó là lý do tại sao nó hoạt động rất tuyệt vời. Bạn phải tự hỏi những gì khó khăn trong _properly_ hỗ trợ 3D, tức là bộ đệm quad. Nó không giống như nó yêu cầu bất cứ điều gì đặc biệt từ HW. – Damon

+0

@Damon: Lý do rất đơn giản: dàn âm thanh stereo quad-buffer thực sự là điểm bán hàng cho các GPU cấp chuyên nghiệp cao cấp của NVIDIA. Nếu họ chỉ đơn giản là lật công tắc trình điều khiển cho phép điều này hoạt động trên GPU của người tiêu dùng, họ có thể mất rất nhiều lợi nhuận từ các GPU chuyên nghiệp tăng giá của họ. Với bất kỳ may mắn nào, Direct3D 12 sẽ yêu cầu QBS và do đó NVIDIA (và AMD) sẽ hiển thị nó trong OpenGL. –

0

Vì bạn có TV 3D thụ động, có khả năng là các giao diện mắt trái và phải được hiển thị trên các đường quét thay thế. (hoặc có thể trên các pixel thay thế trong mẫu bàn cờ)

Do đó nhiệm vụ của bạn là hiển thị giao diện mắt trái sang các đường quét được đánh số chẵn và xem mắt phải đến các đường quét được đánh số lẻ (hoặc ngược lại). Điều này có thể được thực hiện thông qua các hoạt động stencil OpenGL, hoặc, hiện đại hơn, bằng cách sử dụng các shader fragment tùy chỉnh.

Bằng cách này, bạn có thể tránh toàn bộ thẻ video quad-buffered/GL_BACK_LEFT/GL_BACK_RIGHT cách tiếp cận được mô tả bởi datenwolf. Và bạn muốn tránh cách tiếp cận đó, vì tôi chưa bao giờ gặp phải trình điều khiển video hướng trực tiếp đến 3D 3D thực tế.

Tôi đồng ý với lời khuyên của datenwolf rằng bạn nên sử dụng thay đổi bất đối xứng thay vì xoay vòng để tạo điểm nhìn bên phải và mắt trái.

Các vấn đề liên quan