記事のディレクトリ
1.はじめに
前に、独自の3Dライブラリを書き、私は需要に3次元VisPy応答を使用してきました。これは、対話型の高性能2D / 3D可視化ライブラリですが、バックエンドのショーでは、私はいつもそれを制御するために便利なことはできません。2019年元旦の休日、私は自分の考えを書くために3Dアプリケーションのライブラリを発芽し、すぐに行動に入れます。3週間後、WxGLが生まれました。WxGL PyOpenGLは、目標の最初の追求としてのレンダリングをスピードアップするためにwxのバックエンドを表示するには、3次元データ表示ライブラリーに基づいています。wxPythonの手段このバックエンド、WxGL良く一緒にmatplotlibの他のデータ表示技術によって。
インストール2.
私のGitHubは、完全なソースコードファイルWxGLモジュールを持って、あなたは直接、必要であれば、私は更新していきます、現在のバージョンは0.5.4で、私はWHLインストールファイルをパッケージ化しているインストールするには、次のコマンドを使用することができます。
python -m pip install -i https://test.pypi.org/simple/ wxgl
PyOpenGLを頼るWxGL、そうWxGLをインストールする前に、PyOpenGLをインストールしてください。直接使用ピップは、それをインストールする場合は、いくつかの問題があるかもしれません。私はこのインストールをした後は、OpenGLのコードを実行すると、このエラーメッセージが表示されました:
NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before calling
PyOpenGL、そして私のオペレーティングシステムの32ビット版の元、ピップデフォルトのインストールは、64ビットです。クリックしてオススメするためにここに独自のバージョンをダウンロードし、直接.whlファイルをインストールしました。私は、このインストールのように終わりました。
pip install PyOpenGL-3.1.3b2-cp37-cp37m-win_amd64.whl
3.クラスとメソッド
WxGLSceneと呼ばれるWxGLコンテナは、私は、シーンを呼び出します。各シーンはaddRegion(使用可能)Iビューポートを呼び出し、WxGLRegion複数のオブジェクトを生成します。サブモデルに理解されるように、アセンブリいわゆる - ビューポートは、それぞれが1つのまたは複数のコンポーネントによって構成され、モデルを作成することができます。WxGLRegionは、モデルやコンポーネントを作成するには、次のメソッドを提供します。
- WxGLRegion.drawText()テキストを描画します
- WxGLRegion.drawPoint()描画点
- 線を引くためにWxGLRegion.drawLine()
- WxGLRegion.drawSurface()表面をレンダリング
- WxGLRegion.drawMesh()グリッドを描画します
- WxGLRegion.drawVolume()ボリュームデータをレンダリング
- 座標を描画するWxGLRegion.drawAxes()
- WxGLRegion.drawColorBar()ドロードローカラーバー
4.応用例
次に、我々はあなたを表示するWxGLを使用して、どのような地図投影モードの緯度と経度、この次世界的流行は、地球の三次元任意スケーリング及び回転に変換することができます。コメントは、わずか40行を含むすべてのコード、。どのパスを変更し、その動作環境に応じて、ベクトルフォントファイルを使用していました。流行地図、あなたも私のブログの別の1を参照することができ、この記事のイラストをダウンロードすることができます:「Pythonは、実際のリアルタイムデータは、流行が2019-nCoVマップを描く、肺炎の流行をキャッチ」流行自体の高解像度マップを生成します。
2019-nCoV流行マップ(例えば、緯度と経度グローバル投影モードなど)。
earth_2019nCoV.py
# -*- coding: utf-8 -*-
import wx
import numpy as np
from PIL import Image
from wxgl.scene import *
from wxgl.colormap import *
class mainFrame(wx.Frame):
'''程序主窗口类,继承自wx.Frame'''
def __init__(self):
wx.Frame.__init__(self, None, -1, '地球模型上的2019-nCoV疫情地图', style=wx.DEFAULT_FRAME_STYLE)
self.Maximize()
# 从等经纬地图上读取经纬度网格上的每一个格点的颜色
c = np.array(Image.open('res/e0.jpg'))/255
# 生成和等经纬地图分辨率一致的经纬度网格,计算经纬度网格上的每一个格点的空间坐标(x,y,z)
lats, lons = np.mgrid[np.pi/2:-np.pi/2:complex(0,c.shape[0]), 0:2*np.pi:complex(0,c.shape[1])]
x = np.cos(lats)*np.cos(lons)
y = np.cos(lats)*np.sin(lons)
z = np.sin(lats)
self.scene = WxGLScene(self, r"C:\Windows\Fonts\simfang.ttf", bg=[0,0,0,0])
self.scene.setPosture(elevation=0, azimuth=120, save=True)
self.master = self.scene.addRegion((0,0,1,1))
self.master.drawMesh('earth', x, y, z, c)
self.master.update()
class mainApp(wx.App):
def OnInit(self):
self.Frame = mainFrame()
self.Frame.Show()
return True
if __name__ == "__main__":
app = mainApp()
app.MainLoop()
次のように動作した結果は以下のとおりです。
より複雑なアプリケーションでは、私のブログを区切る参照:「wxPythonを+ PyOpenGL、3次元データ解析ツールを作成するには」