在我的应用程序中,没有截锥体剔除,无论如何都会绘制相机看不到的对象。当相机不看物体时,我的 fps 在我的 android 设备上接近 60。当它查看物体时,我的 fps 下降到大约 15。
因此我认为这是我的像素着色器的问题。因为我用的是monogame,所以shader其实是用directx shader model 3.0写的。下面是我的纹理采样器声明和我的像素着色器。(这是唯一使用的像素着色器)
texture2D tex1;
sampler2D tex1Sampler = sampler_state
{
Texture = <tex1>;
MinFilter = Point;
MagFilter = Point;
MipFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
float4 color = tex2D(tex1Sampler,input.Texture);
clip(color.a - .12f);
color *= input.Tint;
return color;
}
什么可能导致这种 FPS 下降?其他一些信息:使用的纹理大小为 250 x 250,这是我测试中使用的唯一纹理。
这也不是什么荒谬的事情,就像十亿个三角形都排成一列,并且没有启用背面剔除。就像场景中的1000个小三角形一样,应该不无道理。