jupyter-widgets / pythreejs

A Jupyter - Three.js bridge
https://pythreejs.readthedocs.io
Other
934 stars 185 forks source link

ArrowHelper direction bug #323

Closed Boomer91 closed 4 years ago

Boomer91 commented 4 years ago

Hi, thanks for developing this awesome tool!

Arrows do render now, but there seems to be a bug with the direction argument. See minimal example below. Unit directions work fine, but e.g. dir = (1,1,1) renders a dir = (1,0,0) vector.

Thanks, Cyriel

from pythreejs import *

scene = Scene()

camera = PerspectiveCamera(position=[15, 0, -2], up=[0,0,-1])
scene.add(camera)

control = OrbitControls(controlling=camera, maxDistance=100)

renderer = Renderer(camera=camera, scene=scene,
controls=[control],
width=1000, height=800
)

axes = AxesHelper(size=1)
scene.add(axes)

arrow = ArrowHelper(
        dir=[1,0,0],
        origin=[1,0,0],
        length=3,
        color='red',
        headLength=None,
        headWidth=None,
)
scene.add(arrow)

arrow = ArrowHelper(
        dir=[0,1,0],
        origin=[1,0,0],
        length=3,
        color='green',
        headLength=None,
        headWidth=None,
)
scene.add(arrow)

arrow = ArrowHelper(
        dir=[0,0,1],
        origin=[1,0,0],
        length=3,
        color='blue',
        headLength=None,
        headWidth=None,
)
scene.add(arrow)

arrow = ArrowHelper(
        dir=[1,1,1],
        origin=[1,0,0],
        length=3,
        color='black',
        headLength=None,
        headWidth=None,
)
scene.add(arrow)

scene.add(AmbientLight(intensity=0.3))

renderer

Originally posted by @Boomer91 in https://github.com/jupyter-widgets/pythreejs/issues/258#issuecomment-625880930

vidartf commented 4 years ago

Please refer to the threejs documentation. It states that dir must be a unit vector. Does it work if you set dir=[1./3., 1./3., 1./3.] ?

dir -- direction from origin. Must be a unit vector.

Boomer91 commented 4 years ago

Ah, I oversaw that. Yes, dir=[1./3., 1./3., 1./3.] works. Closing