私のオープンソースの3DライブラリWxGL:流行をマッピングするためのコードの40行は、地球の3次元モデルとなり、

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次元データ解析ツールを作成するには」

公開された89元の記事 ウォンの賞賛9427 ビュー121万+

おすすめ

転載: blog.csdn.net/xufive/article/details/104211044