【问题标题】:How do you prevent Nvidia's 3D Vision from kicking in? (HOW TO CALL NVAPI FROM .NET)您如何防止 Nvidia 的 3D Vision 发挥作用? (如何从 .NET 调用 NVAPI)
【发布时间】:2012-08-10 23:28:13
【问题描述】:

我通常会在 nvidia 的开发者论坛上发布此内容,但由于上个月的黑客攻击,他们仍然处于离线状态。如果有人知道针对此类问题的另一个好的社区,我很想知道它们。

我正在开发一些旨在测试人类视觉的软件。现在我写了两个测试,一个使用 nvidia 的 3D vision v.2 眼镜呈现立体图像,另一个测试在屏幕上显示字母,类似于您在眼科医生检查室看到的图表。我的问题是在“图表测试”期间,3D 视觉被触发并导致屏幕看起来暗淡。我可以通过 nvidia 控制面板在运行不同的测试之间启用和禁用 3D 视觉,但这是一个不太优雅的解决方案。我正在使用 DX9 和 Visual Basic 来开发我的代码。为了在立体测试中触发 3D,我使用了 here 中描述的 NV_STEREO_IMAGE_SIGNATURE 方法。基本上,该方法涉及制作一个两倍于屏幕宽度的后备缓冲区,并在中间添加一列额外的像素数据,在其中插入一个特殊签名,告诉视频卡它是立体图像,后备缓冲区的左半部分应该左眼显示,右眼显示右半部分。我在“图表测试”的代码中没有做任何这些,但 3d 视觉仍然被触发,我不知道为什么。有没有办法告诉视频卡在代码中暂时禁用 3d 视觉功能?

谢谢

【问题讨论】:

    标签: vb.net 3d directx nvidia


    【解决方案1】:

    我想我可能已经找到了解决我自己问题的方法。 Nvidia 提供了一个名为 NVAPI 的库,可以静态加载并包含 NVAPI_STEREO_ENABLE 和 NVAPI_STEREO_DISABLE 等调用。可以在here 找到有关 NVAPI 的下载和信息。完成解决方案后,我将使用实际代码示例编辑这篇文章。

    编辑: 因为 C#/Visual Basic 不允许静态加载 .lib 文件,所以我必须创建一个 Visual C++ 来包装 NVAPI.lib 文件。在引用 lib 文件并将包含头文件添加到我的包装器项目后,我编写了以下代码。

    #include "stdafx.h"
    #include "nvapi.h"
    
    public ref class NvApiWrapper
    {   
    public: 
        static bool NvApiWrapper_Initialize(){
        if (NvAPI_Initialize() == 0){
            return true;
        } else {
            return false;
        }
        }
    
        static bool NvApiWrapper_Stereo_Enable(){
        if (NvAPI_Stereo_Enable() == 0){
            return true;
        } else {
            return false;
        }
        }
    
        static bool NvApiWrapper_Stereo_Disable(){
        if (NvAPI_Stereo_Disable() == 0){
            return true;
        } else {
            return false;
        }
        }
    };
    

    我只对这两个立体方法感兴趣,所以我没有添加任何其他内容,但是可以调用很多有趣的方法。您必须在任何其他调用之前调用 NvAPI_Initialize()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-26
      • 2014-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多