【问题标题】: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()。