Visual c++ 在全息应用程序中部署并加载用作纹理的图片 我在VisualStudio 2015中用C++和CX创建了一个示例全息应用程序(或者它们称为“华丽的C++”的HAT和ReF新的)。它的构建、部署和运行都很好,呈现出一个旋转的彩色立方体,就像它应该做的那样。现在我尝试添加一个jpeg图像,并将其用作立方体上的纹理。问题是,我应该将映像放在哪里,如何将其添加到项目中,如何使VS与项目的其余部分一起部署,以及如何将其加载到应用程序中

Visual c++ 在全息应用程序中部署并加载用作纹理的图片 我在VisualStudio 2015中用C++和CX创建了一个示例全息应用程序(或者它们称为“华丽的C++”的HAT和ReF新的)。它的构建、部署和运行都很好,呈现出一个旋转的彩色立方体,就像它应该做的那样。现在我尝试添加一个jpeg图像,并将其用作立方体上的纹理。问题是,我应该将映像放在哪里,如何将其添加到项目中,如何使VS与项目的其余部分一起部署,以及如何将其加载到应用程序中,visual-c++,uwp,hololens,Visual C++,Uwp,Hololens,我几乎没有使用DirectX和UWP的经验。我已经在桌面Windows 10上(一个常规的C++应用程序,不是托管的,不是UWP),虽然他们在教程中加载文件到纹理中的方式对我来说不起作用。我下载了一些谷歌搜索之后,为桌面Windows 10(DirectXTex\u desktop\u 2015\u Win10.sln)构建了它,并在我的项目中使用,如下所示: DirectX::ScratchImage image; LoadFromWICFile(L"myimage.jpg", DirectX

我几乎没有使用DirectX和UWP的经验。我已经在桌面Windows 10上(一个常规的C++应用程序,不是托管的,不是UWP),虽然他们在教程中加载文件到纹理中的方式对我来说不起作用。我下载了一些谷歌搜索之后,为桌面Windows 10(
DirectXTex\u desktop\u 2015\u Win10.sln
)构建了它,并在我的项目中使用,如下所示:

DirectX::ScratchImage image;
LoadFromWICFile(L"myimage.jpg", DirectX::WIC_FLAGS_NONE, nullptr, image);
CreateShaderResourceView(d3d11Device, image.GetImages(), image.GetImageCount(), image.GetMetadata(), &CubesTexture);
Platform::String^ appInstallFolder = Windows::ApplicationModel::Package::Current->InstalledLocation->Path;
std::wstring folderNameW(appInstallFolder->Begin());
std::string folderNameA(folderNameW.begin(), folderNameW.end());
std::string fname = folderNameA + std::string("/Assets/model.obj");
std::FILE *f = std::fopen(fname.c_str(), "r");
成功了。现在,对于Hololens,我构建了他们的
DirectXTex\u Windows10.sln
解决方案(假设另一个用于桌面,此解决方案必须用于非桌面),并尝试(未成功)如下使用:

DirectX::ScratchImage image;
HRESULT hr = LoadFromWICFile(L"ms-appx:///myimage.jpg", DirectX::WIC_FLAGS_NONE, nullptr, image);
CreateShaderResourceView(m_deviceResources->GetD3DDevice(), image.GetImages(), image.GetImageCount(), image.GetMetadata(), &m_cubesTexture);

我还尝试了
ms-appdata
而不是
ms-appx
。在这两种情况下,
LoadFromWICFile
都不会返回
S\u OK
。它给出了
ERROR\u INVALID\u名称:文件名、目录名或卷标语法不正确。
至于
myimage.jpg
,我将其放入
Assets
子文件夹,并通过
Add->Existing Item
添加到解决方案中。这足以让它部署到全息透镜上吗?如何检查它是否已部署?如果部署,它将位于设备上的什么位置?

我似乎对复杂的事情有些担心

要将这样的文件添加到项目中,只需使用
右键单击
(在解决方案资源管理器的
资产
子文件夹上)
->add->Existing Item
。要将其部署到设备或模拟器上,
右键单击文件
->Properties
上的
,将
内容
设置为
,将
项目类型
设置为
图像
不参与构建
(对于无法正确识别的内容,例如Wavefront.OBJ文件,否则VS将尝试链接该文件,但链接失败)

检查是否(以及在哪里)该文件将位于设备或模拟器上,您可以构建一个实际的包:右键单击项目,选择
Store->Create App Packages…
它将创建一个
.appx
文件,实际上是一个zip存档。您可以使用类似7zip的archiver对其进行浏览,或者将其从
.appx
重命名为
.zip
,然后打开使用Windows文件资源管理器。在我的示例中,图像文件位于
资产
子文件夹中。我可以通过其简单的相对路径来读取它,如下所示(无
ms appx://
或其他类似前缀):

对于其他一些函数(
std::fopen
std::ifstream
等),此相对路径不起作用,我必须使用完整路径,如下所示:

DirectX::ScratchImage image;
LoadFromWICFile(L"myimage.jpg", DirectX::WIC_FLAGS_NONE, nullptr, image);
CreateShaderResourceView(d3d11Device, image.GetImages(), image.GetImageCount(), image.GetMetadata(), &CubesTexture);
Platform::String^ appInstallFolder = Windows::ApplicationModel::Package::Current->InstalledLocation->Path;
std::wstring folderNameW(appInstallFolder->Begin());
std::string folderNameA(folderNameW.begin(), folderNameW.end());
std::string fname = folderNameA + std::string("/Assets/model.obj");
std::FILE *f = std::fopen(fname.c_str(), "r");

这个纹理立方体项目可能会给你一些启示。我认为它基于C#VS2015全息模板