2017-06-06 96 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的用法。 –