jjzjj

c++ - 实时动态阴影来补充延迟着色?

我目前有一个延迟渲染系统设置,可以渲染点光源和平行光。我的问题是,对于不同形式的阴影我有哪些选择,这些阴影可以基于点光源和定向光源制作阴影,这可能会使用延迟着色设置? 最佳答案 需要独特阴影技术的延迟渲染并没有什么特别之处。大多数产生阴影的标准方法都适用于延迟渲染方案。阴影贴图是当今游戏等实时应用中最常用的阴影算法。模板阴影在几年前很流行,但由于各种限制而有点失宠。阴影映射适用于延迟着色。阴影映射的基本算法相当简单:从光的角度渲染渲染目标纹理的深度(您需要为点光源渲染立方体贴图的6个面)。当您对灯光执行照明channel时,对于每个

c++ - 如何在 HLSL DirectX11 C++ 中使用 Texture2DArray

我只是想知道如何在HLSL中使用Texture2DArray。我正在尝试实现一个模型加载器,其中模型具有不同数量的纹理。目前,我的HLSL使用大小为2的Texture2D(纹理和普通纹理),但由于我的模型具有不同数量的纹理,我希望使用Texture2DArray但不知道从哪里开始。我一直试图在互联网上找到示例等,但没有运气:(我加载了编译为“ID3D11ShaderResourceView*”的纹理,所以我应该创建一个变量ID3D11ShaderResourceView**,我创建一个指向纹理的点数组,然后将其传递给着色器或什么?有什么帮助吗? 最佳答案

c++ - 两个具有相同元素的常量缓冲区

假设我有一个以下具有常量缓冲区的HLSL顶点着色器片段:cbuffermatrixBuffer{matrixworldMatrix;matrixviewMatrix;matrixprojectionMatrix;};cbuffermatrixBuffer2{matrixworldMatrix2;matrixviewMatrix2;matrixprojectionMatrix2;};来自常量缓冲区的变量然后在实际与函数中使用,所以我需要设置它们。在C++中,我声明了以下结构:structMatrixType{D3DMATRIXworld;D3DXMATRIXview;D3DXMATRIX

c++ - 延迟着色 DirectX 演示?

我已经阅读了很多关于延迟着色的文章,并且想尝试进入其中。问题是我找不到演示延迟着色如何同时支持这么多灯的示例-我找到了一个演示,该演示非常简单,代码采样器中有一个灯和一个nVidiaHDR示例,但除此之外没有其他内容。有谁知道我应该去哪里找到关于如何使用光照延迟着色的入门教程(带代码)?我可以用一盏灯让它工作,但一盏灯有点太简单了(很明显:P)。此外,我只知道如何在延迟着色代码中制作方向灯,这很不错,但与渲染灯光的常规方式有些不同,所以我想知道是否有wree教程或任何我能找到的东西,或者只是阅读可以帮助我弄清楚在延迟渲染中编写着色器和特殊fx是如何工作的Material?感谢您的帮助!

c++ - 如何填充常量着色器以避免 E_INVALIDARG?

我正在调查一个E_INVALIDARG异常,当我尝试创建第二个常量缓冲区来存储我的灯光信息时抛出该异常://creatematrixstackearlyCD3D11_BUFFER_DESCconstantMatrixBufferDesc(sizeof(ModelViewProjectionConstantBuffer),D3D11_BIND_CONSTANT_BUFFER);DX::ThrowIfFailed(m_d3dDevice->CreateBuffer(&constantMatrixBufferDesc,nullptr,&m_constantMatrixBuffer));DX:

c++ - HLSL 常量缓冲区中数组的意外大小

我还没有在这里使用过像这样更复杂的CB,但据我了解,我的C++对齐和打包必须符合HLSL的预期。所以我正在尝试figureouttherules所以我可以预测地布置C++struct以匹配HLSL的预期。我在VertexShaderv5中进行了一些测试,以查看输出中产生的打包,并在vs.hlsl中使用了此结构:cbufferconbuf{floatm0;floatm1;float4m2;boolm3[1];boolm4[4];float4m5;floatm6;float4m7;matrixm8;floatm9;floatm10;float4m11[2];floatm12[8];floa

c++ - DirectX 11 - 计算着色器 : Writing to an output resource

我刚开始在DirectX11中使用计算着色器阶段,在向计算着色器中的输出资源写入时遇到了一些不需要的行为。我似乎只得到零作为输出,据我所知,这意味着在计算着色器中执行了越界读取。(越界写入导致空操作)创建计算着色器组件输入资源首先,我为输入数据创建了一个ID3D11Buffer*。在创建用于输入到计算着色器阶段的SRV时,它作为资源传递。如果输入数据永远不变,那么我们可以在创建SRV后释放ID3D11Buffer*对象,因为SRV将充当资源句柄。但是,我想在每一帧更新输入数据,所以我将保留缓冲区供我使用以进行映射。//CreateabuffertobeboundasComputeSha

c++ - 如何在 C++/DirectX 和 HLSL 之间共享结构?

我正在学习C++和DirectX,我注意到在尝试使HLSL着色器中的结构与C++代码保持同步时存在大量重复。我想分享这些结构,因为这两种语言具有相同的#include语义和头文件结构。我遇到了成功//ColorStructs.h#pragmaonce#ifdef__cplusplus#includeusingnamespaceDirectX;usingfloat4=XMFLOAT4;namespaceColorShader{#endifstructVertexInput{float4Position;float4Color;};structPixelInput{float4Positi

c++ - DirectX 9 HLSL 与 DirectX 10 HLSL : syntax the same?

在过去一个月左右的时间里,我一直在努力学习DirectX。所以我一直在DirectX9和10之间来回混合。我在两者中看到的主要变化之一是如何在显卡中处理vector。我注意到的一个重大变化是您如何让GPU识别您的结构。在DirectX9中,您可以定义灵活的顶点格式。您的典型设置是这样的:#defineCUSTOMFVF(D3DFVF_XYZRHW|D3DFVF_DIFFUSE)在DirectX10中,我相信等效的是输入顶点描述:D3D10_INPUT_ELEMENT_DESClayout[]={{"POSITION",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,

c++ - HLSL:SV_Position,为什么/如何从 float3 到 float4?

我刚刚开始学习着色器/hlsl等,所以请原谅这个可能很愚蠢的问题。我正在学习Microsoft的DirectX教程(Tutorial(link)、Code(link))。据我了解,他们将POSITION定义为浮点值的3元素数组://DefinetheinputlayoutD3D11_INPUT_ELEMENT_DESClayout[]={{"POSITION",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0},{"COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT,0,12,D3