我正在使用dx9使用mogre图形引擎从特定的视角渲染具有不同对象的场景。每个对象都有自己的id。我根据id为每个对象分配了自己的材料。材料由颜色定义,由id:
计算red = (id / (256 * 256)) % 256;
green = (id / 256) % 256;
blue = id % 256;
我正在分配这样的颜色值:
materialPtr.GetTechnique(0).GetPass(0).SetAmbient(red / 255.0, green / 255.0, blue / 255.0);
我使用以下Pixelformat渲染到RenderTexture:PixelFormat.PF_B8G8R8A8
渲染后我想计算具有特定颜色的像素以再次获得id。
我正在像这样渲染后计算id:
var pixelValue = Convert.ToInt32(rgbaData[pixelIndex + 2]) * 255 * 255 +
Convert.ToInt32(rgbaData[pixelIndex + 1]) * 255 +
Convert.ToInt32(rgbaData[pixelIndex]);
我的问题是,我的pixelValue / id不准确; id相差1.我认为,这是存储值精度的问题。图形引擎为每个像素的每个通道计算32位浮点数;每个像素的每个通道的RenderTexture只有1个字节。
你知道我能在这做什么吗?