Hololens相关数据文档

来源:互联网 发布:单片机延时1s程序 编辑:程序博客网 时间:2024/06/08 13:56


1.HolographicSpace class

    CreateForCoreWindow  :首先创建一个HolographicSpace与指定窗口的CoreApplicationView相对应

2.SpatialLocator class
    GetDefault : 得到了SpatialLocator实例跟踪当前设备的位置,如全息透镜,相对于用户的环境。

3.每一帧都更新update
    
 4.根据上面的图片 首先创建HolographicFrame类型的变量 保存下一帧图像
HolographicFrame类表示 “应用必须向所有照相机呈现的全息照相内容的帧”。

5.进入到EnsureCameraResources函数

 pCameraResources->CreateResourcesForBackBuffer(this, renderingParameters);
下面进入这个函数
  1. // Updates resources associated with a holographic camera's swap chain.
  2. // The app does not access the swap chain directly, but it does create
  3. // resource views for the back buffer.
  4. void DX::CameraResources::CreateResourcesForBackBuffer(
  5. DX::DeviceResources* pDeviceResources,
  6. HolographicCameraRenderingParameters^ cameraParameters
  7. )
  8. {
  9. const auto device = pDeviceResources->GetD3DDevice(); //获取一个3D设备描述符
  10. // Get the WinRT object representing the holographic camera's back buffer.
  11. IDirect3DSurface^ surface = cameraParameters->Direct3D11BackBuffer;
  12. // Get a DXGI interface for the holographic camera's back buffer.
  13. // Holographic cameras do not provide the DXGI swap chain, which is owned
  14. // by the system. The Direct3D back buffer resource is provided using WinRT
  15. // interop APIs.
  16. ComPtr<ID3D11Resource> resource;
  17. ThrowIfFailed(
  18. GetDXGIInterfaceFromObject(surface, IID_PPV_ARGS(&resource))
  19. );
  20. // Get a Direct3D interface for the holographic camera's back buffer.
  21. ComPtr<ID3D11Texture2D> cameraBackBuffer;
  22. ThrowIfFailed(
  23. resource.As(&cameraBackBuffer)
  24. );
  25. // Determine if the back buffer has changed. If so, ensure that the render target view
  26. // is for the current back buffer.
  27. if (m_d3dBackBuffer.Get() != cameraBackBuffer.Get())
  28. {
  29. // This can change every frame as the system moves to the next buffer in the
  30. // swap chain. This mode of operation will occur when certain rendering modes
  31. // are activated.
  32. m_d3dBackBuffer = cameraBackBuffer;
  33. // Create a render target view of the back buffer.
  34. // Creating this resource is inexpensive, and is better than keeping track of
  35. // the back buffers in order to pre-allocate render target views for each one.
  36. DX::ThrowIfFailed(
  37. device->CreateRenderTargetView(
  38. m_d3dBackBuffer.Get(),
  39. nullptr,
  40. &m_d3dRenderTargetView
  41. )
  42. );
  43. // Get the DXGI format for the back buffer.
  44. // This information can be accessed by the app using CameraResources::GetBackBufferDXGIFormat().
  45. D3D11_TEXTURE2D_DESC backBufferDesc;
  46. m_d3dBackBuffer->GetDesc(&backBufferDesc);
  47. m_dxgiFormat = backBufferDesc.Format;
  48. // Check for render target size changes.
  49. Windows::Foundation::Size currentSize = m_holographicCamera->RenderTargetSize;
  50. if (m_d3dRenderTargetSize != currentSize)
  51. {
  52. // Set render target size.
  53. m_d3dRenderTargetSize = currentSize;
  54. // A new depth stencil view is also needed.
  55. m_d3dDepthStencilView.Reset(); //创建一个新的深度图
  56. }
  57. }
  58. // Refresh depth stencil resources, if needed.
  59. if (m_d3dDepthStencilView == nullptr)
  60. {
  61. // Create a depth stencil view for use with 3D rendering if needed.
  62. CD3D11_TEXTURE2D_DESC depthStencilDesc(
  63. DXGI_FORMAT_D16_UNORM,
  64. static_cast<UINT>(m_d3dRenderTargetSize.Width),
  65. static_cast<UINT>(m_d3dRenderTargetSize.Height),
  66. m_isStereo ? 2 : 1, // Create two textures when rendering in stereo.
  67. 1, // Use a single mipmap level.
  68. D3D11_BIND_DEPTH_STENCIL
  69. );
  70. ComPtr<ID3D11Texture2D> depthStencil;
  71. DX::ThrowIfFailed(
  72. device->CreateTexture2D(
  73. &depthStencilDesc,
  74. nullptr,
  75. &depthStencil
  76. )
  77. );
  78. CD3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc(
  79. m_isStereo ? D3D11_DSV_DIMENSION_TEXTURE2DARRAY : D3D11_DSV_DIMENSION_TEXTURE2D
  80. );
  81. DX::ThrowIfFailed(
  82. device->CreateDepthStencilView(
  83. depthStencil.Get(),
  84. &depthStencilViewDesc,
  85. &m_d3dDepthStencilView
  86. )
  87. );
  88. }
  89. // Create the constant buffer, if needed.
  90. if (m_viewProjectionConstantBuffer == nullptr)
  91. {
  92. // Create a constant buffer to store view and projection matrices for the camera.
  93. CD3D11_BUFFER_DESC constantBufferDesc(sizeof(ViewProjectionConstantBuffer), D3D11_BIND_CONSTANT_BUFFER);
  94. DX::ThrowIfFailed(
  95. device->CreateBuffer(
  96. &constantBufferDesc,
  97. nullptr,
  98. &m_viewProjectionConstantBuffer
  99. )
  100. );
  101. }
  102. }


sufaceMesh.cpp

 
此部分功能为加载红色未扫描的部分


此部分
 
SimpleLightingPixelShader
此shder为填充线条的shader 可自行改变颜色 但是改变一次无法改回来



 

 

0 0