Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Zoom To Pointer #27

Open
MattFerraro opened this issue May 24, 2024 · 5 comments
Open

Implement Zoom To Pointer #27

MattFerraro opened this issue May 24, 2024 · 5 comments
Labels

Comments

@MattFerraro
Copy link
Collaborator

The Camera Controller we use now is the default TrackballControls from Three.js, albeit wrapped by Threlte. But this does not implement the zoom-to-mouse behavior that is default on almost every major CAD program. We need to implement that behavior.

This will require diving deep into the TrackballControls code and rewriting parts of it. For inspiration on how to tackle the math, CameraControls has an implementation that feels mostly right, but it is limited in that it experiences gimbal lock at the north and south poles like OrbitControls.

If you can read the source code of TrackballControls and it makes sense to you, then you have all the skills you need to implement this.

@daef
Copy link

daef commented May 24, 2024

if someone were to fix this, this should probably be implemented in three.js

there are multiple issues concerning this (mrdoob/three.js#27399, mrdoob/three.js#27110, mrdoob/three.js#25977, ..) reading issues like mrdoob/three.js#26366 or mrdoob/three.js#18496 make me think that (trackball)controls are waiting for an overhaul anyways.

@MattFerraro
Copy link
Collaborator Author

Making this change and contributing it upstream to Threejs would be great and I'd support that. Maybe it goes without saying but I also do not want to wait until it gets accepted upstream before using the new controller in CADmium

@talkingtab
Copy link

I am new to this (3js, r3f, r3d) so I could be completely off base:

I have tried using OrbitControls, MapControls & Camera-controls in {3,r3d,r3f}. My sense is that controls are following use cases. In other words- if some different behavior is needed a new kind of control is developed. The resulting multiple variants is difficulty maintaining a common interface to controls, feature set, etc. This is a hard problem, especially if the use cases are not understood.

My thinking is to begin collect the use cases and then begin merging all cases into one common control. Perhaps a single unified control is not possible, but if not, do we understand why not?

Just for example, my use case is a leaflet.js/google maps like interface that allows someone to zoom into a data map (implemented at the top level by a treemap). Imagine zooming into from google maps world view, down to a street level, then a building level, then inside a changing into a 3d view of the room. Just zooming. It appears the functionality to achieve this is already there. Camera-Controls, LOD/Details, OrthographicCamera, Perspective Camera, zoomToCursor. The issue is the interoperability of the pieces.

Perhaps a later task is to address the conceptual model of cameras and controls. Can the same camera have two interchangeable lens? (Perspective and Orthogonal). Currently cameras are attached to scenes, and controls to cameras. But is that right conceptually?

@MattFerraro
Copy link
Collaborator Author

@talkingtab I think you making some good observations about some big questions, but CADmium is not in a position to try and re-invent anything about threejs or how it works. We need one scene with one camera with one set of controls and we should use a specific, unique camera controller that we develop to exactly match our use case

@MattFerraro
Copy link
Collaborator Author

Here is a starting point: #66

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants