我试图渲染一个场景,其中只包含一个网格的obj文件和材料文件。当我试着看的时候
o3d.visualization.draw([{
"name": "Model",
"geometry": model,
"material": mat
}])
但是当我试图用下面的代码渲染相同的场景时,输出图像只是黑色的。我什么都试过了,但现在似乎什么都没起作用。
import numpy as np
import open3d as o3d
import cv2
def main():
render = o3d.visualization.rendering.OffscreenRenderer(640, 480)
model, mat=getModel()
render.scene.set_background([0, 0, 0, 0])
render.scene.add_geometry("model", model, mat)
render.scene.set_lighting(render.scene.LightingProfile.NO_SHADOWS, (0, 0, 0))
render.scene.camera.look_at([0, 0, 0], [0, 10, 0], [0, 0, 1])
img_o3d = render.render_to_image()
o3d.io.write_image("mtest2.jpeg", img_o3d, 9)
img = np.array(img_o3d)
cv2.imshow("model", img)
cv2.waitKey(1)
def getModel():
model_name = "mouse.obj"
model = o3d.io.read_triangle_mesh(model_name)
material = o3d.visualization.rendering.MaterialRecord()
material.shader = "defaultLit"
albedo_name = "albedo.jpeg"
material.albedo_img = o3d.io.read_image(albedo_name)
return (model, material)
main()
发布于 2022-04-28 18:43:00
我也确定这是因为你的相机没有看到物体。
第一方法
在您的渲染中,请尝试更改位置。就像这样
render.scene.camera.look_at([0, 0, 0], [0, 0, -800], [0, 1, 0])
记住,第一个参数是查看的位置,第二个参数是摄像机的位置(必须足够远,可以看到物体),第三个参数是相机的方向。
您的代码的其余部分都很好,我已经测试了它来呈现一些图像。
第二方法
另外,对于任何方向,寻找相机位置都有很大的帮助,那就是使用视觉工具。使用鼠标导航并找到要呈现的位置,然后按p
按钮。这将在一个名为ScreenCamera_<somedate>.json
的目录中保存一个JSON文件。
为您使用交互式可视化工具的示例
render = o3d.visualization.Visualizer()
render.create_window()
model, mat = getModel()
render.add_geometry(model)
render.run()
然后,如果您想重用针孔相机配置,稍后在您的屏幕外渲染,这样做。
parameters = o3d.io.read_pinhole_camera_parameters("ScreenCamera_<somedate>.json")
render.setup_camera(parameters.intrinsic, parameters.extrinsic)
https://stackoverflow.com/questions/71951525
复制相似问题