f3d icon indicating copy to clipboard operation
f3d copied to clipboard

Add support for Axis rotation

Open cannonball191 opened this issue 9 months ago • 12 comments

Is your feature request related to a problem? Please describe. F3D let users rotate models freely along all three axis. It woul be nice to be able to rotate only on a single axis, x, y or z. An interaction to do that would be appreciated.

Describe the solution you'd like

  • Press Ctrl + x/y/z then click and move to restrict the rotation to a single axis

Describe alternatives you've considered

  • Ctrl + Mouse move rotate alongside the camera axis

cannonball191 avatar Mar 14 '25 20:03 cannonball191

@mwestphal Hi) Can i take this task?

Denys619 avatar Mar 20 '25 11:03 Denys619

Of course:)

mwestphal avatar Mar 20 '25 12:03 mwestphal

Hi @Denys619

Do you need help moving forward ?

mwestphal avatar Apr 21 '25 06:04 mwestphal

Hi @Denys619

Need any help moving forward ? :)

mwestphal avatar Jun 10 '25 06:06 mwestphal

As a reference, I cannot spin to see the side of this object without it also tilting. 1.

Image

Image

Model: https://www.printables.com/model/1329190-fox-regular-one-tailed-and-kitsune-or-daji-nine-ta

In the regular live preview mode using the mouse interface such as using:

f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,-1,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,-1,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,1,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,1,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,1,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,-1,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,-1 --camera-focal-point=0,0,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=1,0,0 --camera-focal-point=0,0,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=-1,0,0 --camera-focal-point=0,0,0
f3d --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,1,0 --camera-focal-point=0,0,0

Or thumbnail mode such as using:

f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-azimuth-angle=45 --camera-elevation-angle=-45 --camera-view-up=0,0,1 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,1,0 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,-1 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-direction=0,0,0 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-azimuth-angle=45 --camera-elevation-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-azimuth-angle=45 --camera-elevation-angle=-45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-azimuth-angle=45 --camera-elevation-angle=-90 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-azimuth-angle=90 --camera-elevation-angle=-90 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-azimuth-angle=-90 --camera-elevation-angle=-90 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-90 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-90 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-45 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-45 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-45 --camera-azimuth-angle=-45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-45 --camera-azimuth-angle=135 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-45 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-45 --camera-azimuth-angle=45 --camera-view-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-45 --camera-azimuth-angle=45 --camera-view-angle=-45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-45 --camera-azimuth-angle=45 --camera-view-angle=-90 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-135 --camera-azimuth-angle=45 --camera-view-angle=-90 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-135 --camera-azimuth-angle=45 --camera-view-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=-135 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=135 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=45 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=45 --camera-azimuth-angle=135 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,0,1 --camera-focal-point=0,0,0 --camera-elevation-angle=45 --camera-azimuth-angle=-135 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,-1,0 --camera-focal-point=0,0,0 --camera-elevation-angle=45 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,-1,0 --camera-focal-point=0,0,0 --camera-elevation-angle=45 --camera-azimuth-angle=135 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,-1,0 --camera-focal-point=0,0,0 --camera-elevation-angle=0 --camera-azimuth-angle=135 --ambient-occlusion --tone-mapping --anti-aliasing
f3d --config=thumbnail --load-plugins=assimp --quiet --resolution=128,128 fox-kitsune\ \(nine-tailed\).stl --camera-view-up=0,-1,0 --camera-focal-point=0,0,0 --camera-elevation-angle=0 --camera-azimuth-angle=45 --ambient-occlusion --tone-mapping --anti-aliasing

Poikilos avatar Jun 17 '25 15:06 Poikilos

@Poikilos I think you're missing --up=z to properly spin around this STL file (adding --grid --axis could also help for troubleshooting purposes)

snoyer avatar Jun 17 '25 15:06 snoyer

@Poikilos this is also not related to the issue, please join the discord to ask such questions :)

https://discord.f3d.app

mwestphal avatar Jun 17 '25 16:06 mwestphal

@Poikilos this is also not related to the issue, please join the discord to ask such questions :)

https://discord.f3d.app

@mwestphal Ok, thanks. I thought it was an example of an angle that was not possible, but:

@Poikilos I think you're missing --up=z to properly spin around this STL file (adding --grid --axis could also help for troubleshooting purposes)

@snoyer Thank you, it works! --up=z works fine with --camera-elevation-angle=45 --camera-azimuth-angle=-45, and leaving off focal point and using default works (centered on model geometry automatically)

Image

Poikilos avatar Jun 18 '25 01:06 Poikilos

No feedback from @Denys619 , unassigning for now. Do not hesitate to comment if you want to keep working on this @Denys619 :)

mwestphal avatar Jun 18 '25 06:06 mwestphal

Hi @mwestphal, could I try this out?

dh-you avatar Jul 10 '25 14:07 dh-you

Of course!

mwestphal avatar Jul 10 '25 15:07 mwestphal

Unassigning as asked.

mwestphal avatar Nov 18 '25 07:11 mwestphal