2017-06-06 37 views
1

我试图渲染一个obj(人体模型)到其相应的轮廓图像给定相机内在& &外在参数,我想知道哪个渲染器适合该任务。我不想实时显示渲染图像,因为效率是我最关心的问题。我有100000个3D对象,我需要编写一个脚本来一次渲染这些对象的轮廓图像。如何渲染3D对象以在python中剪影图像?

+0

尝试[ModernGL]( https://moderngl.readthedocs.io/en/stable/)你可以直接渲染图像。 –

+0

这是[无头渲染示例](https://github.com/cprogrammer1994/Headless-rendering-with-python)。 –

回答

1

下面是使用ModernGLPillow一个小例子与OpenGL渲染的图像

样品的编号:

import struct 

import ModernGL 
from PIL import Image 

ctx = ModernGL.create_standalone_context() 

prog = ctx.program([ 
    ctx.vertex_shader(''' 
     #version 330 
     in vec2 vert; 
     void main() { 
      gl_Position = vec4(vert, 0.0, 1.0); 
     } 
    '''), 
    ctx.fragment_shader(''' 
     #version 330 
     out vec4 color; 
     void main() { 
      color = vec4(0.3, 0.5, 1.0, 1.0); 
     } 
    '''), 
]) 

vbo = ctx.buffer(struct.pack('6f', 0.0, 0.8, -0.6, -0.8, 0.6, -0.8)) 
vao = ctx.simple_vertex_array(prog, vbo, ['vert']) 

fbo = ctx.framebuffer(ctx.renderbuffer((512, 512))) 

fbo.use() 
ctx.viewport = (0, 0, 512, 512) 
ctx.clear(0.9, 0.9, 0.9) 
vao.render() 

pixels = fbo.read(components=3, alignment=1) 
img = Image.frombytes('RGB', fbo.size, pixels).transpose(Image.FLIP_TOP_BOTTOM) 
img.show() 
+0

这是一个使用3D [透视和查看矩阵]的例子(https://github.com/cprogrammer1994/ModernGL/blob/master/examples/GLWindow/05_perspective_projection.py#L25)。我建议使用某种GLM进行矩阵处理,而不是在着色器中对其进行硬编码。 –

+0

谢谢!我将研究ModernGL来完成我的任务。 –

+0

正在使用ModernGL支持的EBO吗?我无法在您提供的文档中找到EBO的用法。 –