4

我从如下图像中读出 z-Buffer:

--get z buffer    in HD resolution     
rbmpHD = render outputsize:[1920,1080] channels:#(#zdepth) vfb:off camera: z_cam
z_dHD = getchannelasmask rbmp #zdepth outputfile:z_name 
z_dHD.fileName = z_nameHD
save z_dHD
close z_dHD 

我用了

pngio.setType #gray16

然而,为了将图像写成 16 位,它们没有使用向下的 8 位,这意味着深度图像的分辨率被限制为 256 步。因此,读取的 z 缓冲区从一开始就是从 0 到 255。是否可以从一开始就读取 16 位分辨率的 z-Buffer 图像?

编辑:

代码必须生成可以读回 C++ 程序的任何类型的输出图像。为此,我需要 16 位的分辨率

功能

getChannel rbmpHD [x,y] #zDepth

然而,返回 z 深度值 - 这意味着必须循环遍历相机的整个可见空间 - 并且如何才能将这些可见表面带到相机?即使有可能,这也会大大减慢进程

4

2 回答 2

2

来自在线帮助:getChannelAsMask - 构建并返回一个单独的 8 位灰度位图

你能渲染成 EXR 格式并从那里工作吗?

于 2017-09-29T13:58:02.723 回答
1

这可以使用渲染元素而不是 z-buffer 通道来解决:

-- Create and apply Z Depth render element
z = Z_Depth()
m = MaxOps.GetCurRenderElementMgr()
m.RemoveAllRenderElements()
m.AddRenderElement z

tempFilename = @"D:\deleteme.png" -- will not be written to disk
zFilename = @"D:\Temp\Test_ZDepth.png"
zWidth = 1024
zHeight = 1024
rendElems = #()

rbmpHD = render outputwidth:zWidth outputheight:zHeight \
    renderElements:true renderelementbitmaps:&rendElems \
    outputfile:tempFilename vfb:false

pngio.setType #gray16
rendElems[1].filename = zFilename
save rendElems[1]
于 2018-04-27T06:48:06.237 回答