Jus*_*tin 11 opengl 3d television stereoscopy
我有一台3D电视,并且觉得如果我至少没有尝试让它显示我自己创作的3D图像,那么我将推卸我的职责(作为一个极客)!
我以前做过非常基本的OpenGL编程,因此我理解了所涉及的概念 - 假设我可以将自己渲染成一个简单的四面体或立方体并让它旋转一下; 如何让3D电视以3D形式显示此图像?
请注意,我理解3D工作原理的基础知识(从两个不同角度渲染两次相同的图像,每只眼睛一次),我的问题是关于实际执行此操作的物流(我需要SDK吗?等等...)
主要问题是,让GPU发送立体格式.在HDMI连接的情况下,如果没有驱动程序的帮助,这将无法工作.如果您拥有专业级GPU(Quadro,FireGL),那么它们可能支持OpenGL四重缓冲器,即您可以获得左眼和右眼的帧缓冲器,包括后置和前置:
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();
Run Code Online (Sandbox Code Playgroud)
不幸的是,OpenGL四缓冲区被认为是专业级的东西.
相反,NVidia(至少)提供了一个习惯的立体视觉库以及一些控制它的扩展.主要原因是,共享片段只渲染一次然后发送到双眼并应用适当的视差.然而,根据我在立体视觉方面的半专业经验¹,这些半/自动立体光学技术并没有削减它.立体视觉需要严格控制整个"生产"管道,否则你会被搞砸.有了Elephants Dream,我就修改了渲染器的核心代码.
我在NVidia的3D devision上向人们发送了一些情况,你需要对立体视觉过程进行精确控制,我希望他们能够看到光线并在消费级硬件上同时访问四缓冲立体声.
请注意,我了解3D工作原理的基础知识(从2个不同的角度渲染相同的图像两次,每只眼睛一次)
实际上,你不是从两个不同的角度渲染,而是使用偏移的视差和镜头移位.否则你会在水平方向上得到一些梯形/梯形失真,这是非常非常令人不愉快的(实际上我现在认为在立体渲染过程中,应该稍微偏离光轴 - 即完全违背天真的方式做 - 并且"过度"补偿镜头移位,我正在准备一个关于此的小型研究,但仍需要收集我的测试和控制组).
1:哎呀,我是一个单手制作大象梦的人,渲染它并在3D电影节上获得奖项.
| 归档时间: |
|
| 查看次数: |
5752 次 |
| 最近记录: |