【Pythonライブラリ】「pywavefront」のサンプルコード

Python

こちらは「pywavefront」(Pythonライブラリ)のサンプルコードについての記事となっております。

基本情報 … Basic Information

「pywavefront」はPythonのオブジェクトファイルを扱うためのライブラリです。OBJ形式の3Dモデルファイルを読み込み、メッシュやマテリアルのデータを取り出すことができます。また、3Dモデルの表示に必要な頂点座標や法線ベクトル、面情報などのデータも取り出すことができます。このライブラリを使用することで、PythonでOBJファイルを扱い、3Dモデルの生成や編集、解析を行うことができます。

サンプルコード … Sample Code

001 モデルの読み込み, モデルの表示 … Read the Model, Show the Model

1.「pywavefront」(Pythonライブラリ)で「OBJ」ファイルを読み込む
2.「pywavefront」(Pythonライブラリ)で「OBJ」モデルを表示する

### Standard Library ##########################################################

import ctypes

### Public Library ############################################################

import pywavefront
from pywavefront import visualization

import pyglet
from pyglet.gl import *

###############################################################################

obj = pywavefront.Wavefront('SAMPLE/monkey.obj')

print(obj.file_name)            ### SAMPLE/monkey.obj
print(obj.mtllibs)              ### ['monkey.mtl']
print(obj.materials)            ### {'None': <pywavefront.material.Material object at 0x000001F2620C8F28>}
print(obj.meshes)               ### {'Suzanne': <pywavefront.mesh.Mesh object at 0x000001F2620C8EB8>}
print(obj.vertices)             ### [(0.4375, 0.164062, 0.765625), (-0.4375, 0.164062, 0.765625), ..., (0.859375, 0.382812, -0.382812), (-0.859375, 0.382812, -0.382812)]
print(obj.mesh_list)            ### [<pywavefront.mesh.Mesh object at 0x00000248FF128EF0>]

###############################################################################

window  = pyglet.window.Window(1280, 720, "window", resizable=True)
lightfv = ctypes.c_float * 4

#==============================================================================

@window.event
def on_resize(width, height):
    
    viewport_width, viewport_height = window.get_framebuffer_size()
    
    ### OpenGL ##################################
    glViewport(0, 0, viewport_width, viewport_height)

    glMatrixMode(GL_PROJECTION)
    
    glLoadIdentity()
    gluPerspective(45., float(width)/height, 1., 100.)
    
    glMatrixMode(GL_MODELVIEW)
    #############################################
    
    return True

#==============================================================================

@window.event       
def on_draw():
    
    ### window clear
    window.clear()
    
    ### OpenGL ##################################
    
    glLoadIdentity()
    
    glLightfv(GL_LIGHT0, GL_POSITION, lightfv(-1.0, 1.0, 1.0, 0.0))
    
    glTranslated(0, 0, -6)
    #############################################
    
    ### window draw
    visualization.draw(obj)

#==============================================================================

# run application
pyglet.app.run()

###############################################################################

このプログラムは、PythonでOpenGLを使って3Dモデルを表示する方法を示しています。プログラムでは、pywavefrontというPythonライブラリを使用して、Wavefront OBJファイルを読み込みます。そして、pygletというPythonライブラリを使用して、OpenGLによる3D描画を行います。

プログラムを実行すると、ウィンドウが開き、”SAMPLE/monkey.obj”が表示されます。キーボードを操作することで、3Dモデルを回転させたり拡大縮小したりすることができます。これにより、3Dモデルの詳細な検査が可能になります。

サンプル出力画像1