1

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

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

谢谢

4

1 回答 1

1

我想我可能已经找到了解决我自己问题的方法。Nvidia 提供了一个名为 NVAPI 的库,可以静态加载并包含诸如 NVAPI_STEREO_ENABLE 和 NVAPI_STEREO_DISABLE 之类的调用。可以在此处找到有关 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()。

于 2012-08-16T13:36:05.687 回答