Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ HLSL粒子系统将不显示_C++_Directx_Directx 11_Hlsl_Particle System - Fatal编程技术网

C++ HLSL粒子系统将不显示

C++ HLSL粒子系统将不显示,c++,directx,directx-11,hlsl,particle-system,C++,Directx,Directx 11,Hlsl,Particle System,我一直在尝试将粒子系统添加到我的Directx11图形演示中,因此我一直在使用“directx 11 3d游戏编程入门”一书 因此,我尝试使用HLSL StreamOut技术更新粒子系统,并使用单独的技术渲染粒子 下面是粒子系统的HLSL代码,我已经尝试过调整加速度和速度,以避免速度将粒子从屏幕上传送出去,但是这没有效果 cbuffer cbPerFrame { 3.gEyePosW; 浮标3双子座; 漂浮物3个; 浮动时间; 浮动时间步长; 浮动4x4 gViewProj; }; cbuff

我一直在尝试将粒子系统添加到我的Directx11图形演示中,因此我一直在使用“directx 11 3d游戏编程入门”一书

因此,我尝试使用HLSL StreamOut技术更新粒子系统,并使用单独的技术渲染粒子

下面是粒子系统的HLSL代码,我已经尝试过调整加速度和速度,以避免速度将粒子从屏幕上传送出去,但是这没有效果

cbuffer cbPerFrame
{
3.gEyePosW;
浮标3双子座;
漂浮物3个;
浮动时间;
浮动时间步长;
浮动4x4 gViewProj;
};
cbuffer cbFixed
{
//用于加速粒子的净恒定加速度。
float3 gAccelW={0.0f,0.2f,0.0f};
//billbording的纹理坐标始终相同-我们在这种效果中使用qquad:)
浮动2 gTexC[4]=
{
浮动2(0.0f,1.0f),
浮动2(0.0f,0.0f),
浮动2(1.0f,1.0f),
浮动2(1.0f,0.0f)
};
};
//不能将非数值添加到CBUFER。
纹理2 Darray gTextureMapArray;
//用于在着色器中生成随机数的随机纹理。
纹理1d巨纹理;
采样状态采样线性
{
过滤器=最小值最大值最小值线性;
地址u=包裹;
地址v=包裹;
};
深度状态禁用深度
{
DepthEnable=FALSE;
深度掩码=零;
};
深度模板状态NoDepthWrites
{
DepthEnable=TRUE;
深度掩码=零;
};
混合盐添加剂
{
AlphaToCoverageEnable=错误;
BlendEnable[0]=真;
SrcBlend=SRC_α;
destlend=1;
BlendOp=添加;
SrcBlendAlpha=零;
DestBlendAlpha=零;
BlendOpAlpha=添加;
RenderTargetWriteMask[0]=0x0F;
};
///////////////////////////////////////////////////////////////
//辅助函数
//
///////////////////////////////////////////////////////////////
浮动3 RandUnitVec3(浮动偏移)
{
//使用游戏时间加上偏移来采样随机纹理。
浮点u=(gGameTime+偏移量);
//[-1,1]中的坐标
float3v=gRandomTexture.SampleLevel(samLinear,u,0).xyz;
//投影到单位球体(规格化)
回归正常化(v);
}
///////////////////////////////////////////////////////////////
//流出技术
//
///////////////////////////////////////////////////////////////
#定义PT_发射器0
#定义PT_FLARE 1
结构粒子
{
float3 InitPosW:位置;
float3 InitVelW:速度;
float2-SizeW:大小;
浮动年龄:年龄;
uint类型:类型;
};
粒子流输出vs(粒子vin)
{
返回vin;
}
//流出的GS只负责发出
//新粒子和破坏旧粒子。逻辑
//在这里编程通常会因粒子系统而异
//到粒子系统,如销毁/繁殖规则所示
//不一样。
[maxvertexcount(2)]
空洞流线(点粒子gin[1],
输入输出点流(ptStream)
{
gin[0]。年龄+=gTimeStep;
//如果粒子是发射器粒子
if(gin[0]。类型==PT\u发射器)
{
//如果是发射新粒子的时间
如果(gin[0]。年龄>0.005f)
{
浮动3 vRandom=RandUnitVec3(0.0f);
vRandom.x*=0.5f;
vRandom.z*=0.5f;
粒子p;
p、 InitPosW=gEmitPosW.xyz;
p、 初始值W=0.5f*vRandom;
p、 SizeW=float2(3.0f,3.0f);
p、 年龄=0.0f;
p、 类型=PT_火炬;
ptStream.Append(p);
//重置发射时间
gin[0]。年龄=0.0f;
}
//始终保持发射器
ptStream.Append(gin[0]);
}
其他的
{
//设置条件以保持粒子-在本例中为年龄限制

if(gin[0].Age对于这个愚蠢的问题,我深表歉意。事实证明,这是像素着色器中的一个愚蠢错误。我已将像素着色器设置为浮点,而不是浮点4