次のような 3D CAPTCHAを生成する Python スクリプトを書きたいと思います。
どのグラフィック ライブラリを使用できますか?
多くのアプローチがあります。私は、 ImageDrawのdraw.textを使用してPython Imaging Libraryで画像を個人的に作成し、 NumPy配列(NumPyのasarrayを使用)に変換してから、 Matplotlibでレンダリングします。(Matplotlibメンテナンスパッケージが必要です)。
完全なコード(2.5):
import numpy, pylab
from PIL import Image, ImageDraw, ImageFont
import matplotlib.axes3d as axes3d
sz = (50,30)
img = Image.new('L', sz, 255)
drw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 20)
drw.text((5,3), 'text', font=font)
img.save('c:/test.png')
X , Y = numpy.meshgrid(range(sz[0]),range(sz[1]))
Z = 1-numpy.asarray(img)/255
fig = pylab.figure()
ax = axes3d.Axes3D(fig)
ax.plot_wireframe(X, -Y, Z, rstride=1, cstride=1)
ax.set_zlim((0,50))
fig.savefig('c:/test2.png')
明らかに、軸を削除したり、視野角を変更したりするなど、やるべきことが少しあります。
openglでレンダリングするために考慮すべきもう1つのバインディングは、pygletです。その最高の機能は、それがたった1回のダウンロードであるということです。Anuragの説明を実装するために必要なものがすべて含まれていると思います。
あなたがやろうとしていることは、3Dグラフィックスの単純な最初のプロジェクトではないことに注意してください。これがOpenGLに初めて触れる場合は、 NeHeチュートリアルやOpenGLWebサイト からの他のヘルプなどの一連のチュートリアルを検討してください。
あなたが上に持っているもののための完全な3Dライブラリを気にするかどうかはわかりません. 3D ポイントのマトリックスを生成し、PIL のようなものでテキストを生成し、それをスキャンしてグリッド上のどのポイントが隆起しているかを見つけ、ランダムなカメラ アングルを選択して、ポイントを 2D 画像に投影し、PIL でそれらを描画します。最終的なイメージ。
そうは言っても...自分で3D計算をしたくない場合は、VPythonを使用できるかもしれません。
OpenGL 用の Python バインディング ( http://pyopengl.sourceforge.net/ ) を使用します。
PILを使用して、黒い表面上に白いテキストの 2D イメージを作成します。これから 3D グリッドを作成し、色が白い点の z を増やします。おそらく z=color 値を設定して、画像をぼかすことで z 方向に実際の曲線を得ることができます。
これらの点から OpenGL 三角形を作成し、レンダリング中にワイヤフレーム モードを使用します。
http://python-opengl-examples.blogspot.com/2009/04/render-to-texture.htmlのように、OpenGL バッファーを画像にグラブします 。