Python 实时三维视图pov光线和tkinter
我正在尝试用python tkinter制作GUI。我已经成功地创建了应用程序,这样我就有了一个由POV光线渲染的场景。我按下“向左移动”按钮,这会更改.pov文件中的摄影机位置,重新渲染场景并以相同的方式显示,以便进行旋转和放大/缩小 但我想让大家互动一下。i、 e使用鼠标与场景完全交互,就像matplotlib 3D图形一样,但用于光线渲染 如何着手解决这个问题 场景的位置值如下所示 Img_1位置 Img_2位置 Img_3位置 PS 我没有尝试在GUI中导入matplotlib plot。仅供参考,分享我希望通过渲染场景实现的效果 []img1 []img2 []img3您可以使用鼠标事件和,以及其他来运行函数,这些函数将更改窗口中的内容 编辑:示例演示如何在使用鼠标时使用绑定运行函数,以及如何计算diff_x、diff_y来移动对象。您必须使用自己的绑定函数,该函数将使用diff_x、diff_y移动POVRay相机并渲染新图像。然后你必须替换画布上的图像。但我将使用画布对象而不是POVRay来显示当鼠标移动时它是如何变化的 此示例在移动鼠标时移动矩形,并在单击按钮时更改颜色。 但您可以运行移动、缩放或旋转渲染图像的函数Python 实时三维视图pov光线和tkinter,python,python-3.x,tkinter,povray,Python,Python 3.x,Tkinter,Povray,我正在尝试用python tkinter制作GUI。我已经成功地创建了应用程序,这样我就有了一个由POV光线渲染的场景。我按下“向左移动”按钮,这会更改.pov文件中的摄影机位置,重新渲染场景并以相同的方式显示,以便进行旋转和放大/缩小 但我想让大家互动一下。i、 e使用鼠标与场景完全交互,就像matplotlib 3D图形一样,但用于光线渲染 如何着手解决这个问题 场景的位置值如下所示 Img_1位置 Img_2位置 Img_3位置 PS 我没有尝试在GUI中导入matplotlib plot
import tkinter as tk
# --- functions ---
def move_item(event):
canvas.coords(item, event.x-50, event.y-50, event.x+50, event.y+50)
def change_item(event):
if canvas.itemcget(item, 'fill') == 'red':
canvas.itemconfig(item, fill='blue')
else:
canvas.itemconfig(item, fill='red')
# --- main ---
root = tk.Tk()
canvas = tk.Canvas(root, width=500, height=300)
canvas.pack()
item = canvas.create_rectangle(0, 0, 100, 100, fill='red')
canvas.bind("<Button-1>", change_item)
canvas.bind("<Motion>", move_item)
root.mainloop()
root.bind,function\u name在按下鼠标按钮时运行函数。感谢您的详细回复,但不幸的是,这在我的情况下不起作用,因为我正在移动渲染的POV光线图像的相机。我已经编辑了这个问题,也许这将有助于澄清我的goalit演示如何在使用鼠标时使用bind to run函数-您必须使用bind自己的函数,它将使用不同的相机位置渲染图像。它还显示了如何计算diff_x,diff_y,您可以使用它在POV光线中移动相机。我理解这一点,但如何为3D添加z轴在上述情况下,您可以使用它来更改x和y以及更改z轴。然后你可以渲染它。我从不检查它,但使用,你可以使用鼠标滚轮来改变值-也就是说,你可以改变你的z。
import tkinter as tk
# --- functions ---
def move_item(event):
global old_x
global old_y
diff_x = event.x - old_x
diff_y = event.y - old_y
for item in items:
canvas.move(item, diff_x, diff_y)
old_x = event.x
old_y = event.y
def move_horizontal(event):
global old_x
diff_x = event.x - old_x
for item in items:
canvas.move(item, diff_x, 0)
old_x = event.x
def move_vertical(event):
global old_y
diff_y = event.y - old_y
for item in items:
canvas.move(item, 0, diff_y)
old_y = event.y
def save_position(event):
global old_x
global old_y
old_x = event.x
old_y = event.y
# --- main ---
old_x = 0
old_y = 0
# init
root = tk.Tk()
# create canvas
canvas = tk.Canvas(root, width=500, height=300)
canvas.pack()
# create objects
items = [
canvas.create_rectangle(100, 100, 130, 130, fill='red'),
canvas.create_rectangle(200, 100, 230, 130, fill='blue'),
canvas.create_rectangle(100, 200, 130, 230, fill='yellow'),
]
canvas.bind("<Button-1>", save_position)
canvas.bind("<B1-Motion>", move_item)
canvas.bind("<Shift-B1-Motion>", move_horizontal)
canvas.bind("<Control-B1-Motion>", move_vertical)
# start program
root.mainloop()