언급 한 바와 같이 Mayavi을 사용하여 대화식으로 조명을 변경할 수 있습니다. 좋은 생각은 레코드 스크립트 버튼을 클릭하면 스크립트에서 해당 코드 줄을 사용할 수 있습니다 (이것이 내가 여기 Mayavi 부분에서했던 방법입니다).
또 다른 옵션은 Matplotlib입니다. shading example을 기반으로 조명으로 서페이스를 생성했습니다.
아래 코드를 참조하십시오.
import numpy as np
from mayavi import mlab
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.colors import LightSource
## Test data: Matlab `peaks()`
x, y = np.mgrid[-3:3:150j,-3:3:150j]
z = 3*(1 - x)**2 * np.exp(-x**2 - (y + 1)**2) \
- 10*(x/5 - x**3 - y**5)*np.exp(-x**2 - y**2) \
- 1./3*np.exp(-(x + 1)**2 - y**2)
## Mayavi
surf = mlab.surf(x, y, z, colormap='RdYlBu', warp_scale='auto')
# Change the visualization parameters.
surf.actor.property.interpolation = 'phong'
surf.actor.property.specular = 0.1
surf.actor.property.specular_power = 5
## Matplotlib
fig = plt.figure()
ax = fig.gca(projection='3d')
# Create light source object.
ls = LightSource(azdeg=0, altdeg=65)
# Shade data, creating an rgb array.
rgb = ls.shade(z, plt.cm.RdYlBu)
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, linewidth=0,
antialiased=False, facecolors=rgb)
plt.show()
mlab.show()
이 결과로 제공합니다
- Mayavi :
- 하기 matplotlib :
두 가지가 마음에 봄. matlab에서, 렌더러를 (matlab 소프트웨어 렌더러에서 OpenGL 렌더러로) 전환하면 반짝이는 것에서 훨씬 더 평평하게 보입니다. matplotlib이 OpenGL 렌더러를 사용하고있을 수도 있습니다. 둘째, matplotlib에서 소스 광원의 색상과 밝기를 변경하는 방법이 있습니까? 이것은 당신이 당신의 음모의 "shininess"를 바꿀 수있게 할 것입니다. – shaw2thefloor
감사합니다. 좋은 제안 - Mayavi/Matplotlib 렌더러를 어떻게 바꿀 수 있는지 궁금합니다. – NewPythonUsers1
아마도 matplotlib의 백엔드 변경에 도움이 될 것입니다. http://stackoverflow.com/questions/3285193/how-to-switch-backends-in-matplotlib-python 퐁 스타일의 조명은 파이썬에서는 정말 좋겠지 만 아무 것도 찾을 수 없습니다. 유일한 언급은 블렌더 파이썬 API를 사용하는 맥락에서였습니다 : http://blenderartists.org/forum/showthread.php?190352-Simple-Phong-shader-via-PyNodes – mmagnuski