2009-06-20 24 views

cevap

2

Ben yukarıda ne var için tam bir 3D kütüphane ile rahatsız olur emin değilim. Sadece bir 3B nokta matrisi oluşturun, metni PIL gibi bir şeyle oluşturun, ızgaradaki hangi noktaların yükseltildiğini bulmak için üzerine göz atın, rastgele bir kamera açısı seçin ve noktaları bir 2D resme yansıtın ve PIL ile çizin. son görüntü

3B matematiğini kendiniz yapmak istemiyorsanız, VPython'u kullanabilirsiniz.

+0

"3d pontların matrisini nasıl oluştururum"? –

+0

Bu sadece bir tuple listesi olurdu - her bir tuple 3 sayıya sahip olacak - x, y ve z. –

+1

RobertW: 3D grafikleri hakkında önceden herhangi bir bilgi sahibi olmadan, bunu denemeden önce biraz okuma gerektiriyor. – Joey

1

OpenGL, http://pyopengl.sourceforge.net/ için Python bağlamaları kullanın.

PIL kullanarak siyah bir yüzey üzerinde beyaz renkli metnin bir 2D resmi oluşturun. Bundan bir 3D ızgara yapın, rengin beyaz olduğu noktanın z noktasını artırın, belki z = renk değerini ayarlayın, böylece görüntünün bulanıklaştırılmasıyla z yönünde gerçek eğriler elde edebilirsiniz.

Bu noktalardan bir OpenGL üçgeni oluşturun, işleme sırasında tel çerçeve modunu kullanın.

OpenGL arabelleğini bir görüntü içine alın, örneğin, http://python-opengl-examples.blogspot.com/2009/04/render-to-texture.html.

+0

Yeterli motivasyon verildiğinde bunu kendim yapmayı çok isterim;) örnek kod için –

4

Opengl ile işleme için düşünülecek başka bir bağ, pyglet. En iyi özelliği, sadece bir indirme olmasıdır. Anurag'ın neler yaptığını uygulamak için ihtiyacınız olan her şeyi içerdiğini düşünüyorum.

Yapmaya çalıştığınız şey tam olarak 3 boyutlu grafiklerde basit bir ilk proje olmadığına dikkat çeker. Bu, OpenGL'e ilk maruz kalmanızsa, NeHe Tutorials gibi bir dizi öğretici ve OpenGL website'dan diğer yardımları düşünün.

33

Birçok yaklaşım var. ImageDraw 'un draw.text dosyasını kullanarak görüntüyü Python Görüntüleme Kitaplığı'nda oluşturabilirim, NumPy dizisine (usint NumPy's asarray) dönüştürüp Matplotlib ile render ediyorum. (Matplotlib maintenance package gerektirir). (2.5 in)

Tam kodu:

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') 

alt text

Açıkçası eksenleri ortadan kaldırarak, yapılması gereken biraz iş, değişen bakış açısı, vb .. Bir başka soru

+0

+1, bu gerçekten güzel bir başlangıç ​​gibi görünüyor. – Kiv

+3

+1 Harika saygısız. Başardın! –

+0

Çok çok güzel. Tam olarak ne istediğimi. Çok teşekkürler! (Oturumumu kapattım, bu yüzden cevap için oy veremiyorum :() – quilby