如何使用C#单独控制立体声帧?(NVIDIA 3D快门眼镜)

如何使用C#单独控制立体声帧?(NVIDIA 3D快门眼镜),c#,directx,nvidia,stereo-3d,C#,Directx,Nvidia,Stereo 3d,我试图制作一个非常简单的应用程序,在每只眼睛上显示不同的图像。我有华硕VG236H显示器和NVIDIA 3D视觉套件,立体3D快门眼镜。我使用的是C#、.NETFramework 2.0、DirectX9(ManagedDirectX)和VisualStudio2008。我一直在到处寻找示例和教程,实际上已经找到了一些,并且基于我创建的程序,但由于某些原因,我无法让它工作 当寻找例子如何显示不同的图像为每个眼睛,许多人继续提到英伟达介绍在GDC 09(著名的GDC093DVISION THYNI

我试图制作一个非常简单的应用程序,在每只眼睛上显示不同的图像。我有华硕VG236H显示器和NVIDIA 3D视觉套件,立体3D快门眼镜。我使用的是C#、.NETFramework 2.0、DirectX9(ManagedDirectX)和VisualStudio2008。我一直在到处寻找示例和教程,实际上已经找到了一些,并且基于我创建的程序,但由于某些原因,我无法让它工作

当寻找例子如何显示不同的图像为每个眼睛,许多人继续提到英伟达介绍在GDC 09(著名的GDC093DVISION THYNIN和OUT.PDF文件)和第33-40页。我的代码主要基于该示例构建:

  • 我在函数LoadSurfaces()中的surface(_imageLeft和_imageRight)上加载了两个纹理(Red.png和Blue.png)
  • 函数的作用是:将这两个图像并排放在一个较大的图像上,该图像的大小为2倍屏幕宽度和屏幕高度+1(_imageBuf)
  • 函数的作用是:在最后一行追加立体声签名
  • OnPaint()-函数获取后缓冲区(_backBuf)并将组合图像(_imageBuf)的内容复制到其中
  • 当我运行程序时,快门眼镜开始工作,但我只能在屏幕上看到两幅并排的图像。谁能帮我一下,告诉我我做错了什么?我相信解决这个问题也可能对其他人有所帮助,因为似乎还没有一个简单的例子来说明如何使用C#来解决这个问题

    下面是我代码的战术部分。完整项目可在此处下载:


    我的一个朋友发现了这个问题。立体声签名中的字节顺序相反。以下是正确的顺序:

    byte[] data = new byte[] {0x4e, 0x56, 0x33, 0x44,   //NVSTEREO_IMAGE_SIGNATURE         = 0x4433564e;
    0x00, 0x0F, 0x00, 0x00,   //Screen width * 2 = 1920*2 = 3840 = 0x00000F00;
    0x38, 0x04, 0x00, 0x00,   //Screen height = 1080             = 0x00000438;
    0x20, 0x00, 0x00, 0x00,   //dwBPP = 32                       = 0x00000020;
    0x02, 0x00, 0x00, 0x00};  //dwFlags = SIH_SCALE_TO_FIT       = 0x00000002;
    
    此更改后,代码可以完美地工作。这段代码甚至可以作为尝试相同操作的其他人的良好教程。:)

    byte[] data = new byte[] {0x4e, 0x56, 0x33, 0x44,   //NVSTEREO_IMAGE_SIGNATURE         = 0x4433564e;
    0x00, 0x0F, 0x00, 0x00,   //Screen width * 2 = 1920*2 = 3840 = 0x00000F00;
    0x38, 0x04, 0x00, 0x00,   //Screen height = 1080             = 0x00000438;
    0x20, 0x00, 0x00, 0x00,   //dwBPP = 32                       = 0x00000020;
    0x02, 0x00, 0x00, 0x00};  //dwFlags = SIH_SCALE_TO_FIT       = 0x00000002;