Open tomcrane opened 11 months ago
I think they're painted into the scene, as they're "of" the scene, rather than "about" the scene. Lights should be the same. Similarly, a model format that allows a camera to be part of the model would be a painting annotation ... and if a format allows a camera to be the ONLY thing in the model, that would be the equivalent of the above JSON.
lookAt
should be an optional, we should allow positioning of the camera via PointSelector and rotation. For example, an IIIF authoring tool might allow the user to "fly" the camera to a desired position. One could calculate an arbitrary point for lookAt
, but that doesn't seem useful, unless we need to have a point to allow an "orbit" view mode?Updated example with rotation:
The third annotation has no lookAt
but has a position and a rotation. In this case, what is being rotated - where did it start?
{
"items": [
{
"id": "https://example.org/iiif/3d/anno1",
"type": "Annotation",
"motivation": ["painting"],
"body": {
"type": "Camera",
"lookAt": {
"id": "https://example.org/iiif/selectors/1",
"type": "PointSelector",
"x": 0.0,
"y": 0.0,
"z": 0.0
},
"fieldOfView": 50.0
},
"target": [
{
"type": "SpecificResource",
"source": [
{
"id": "https://example.org/iiif/scene1/page/p1/1",
"type": "Scene"
}
],
"selector": [
{
"type": "PointSelector",
"x": 100.0,
"y": 100.0,
"z": 0.0
}
]
}
]
},
{
"id": "https://example.org/iiif/3d/anno1",
"type": "Annotation",
"motivation": ["painting"],
"body": {
"type": "Camera",
"lookAt": {
"id": "https://example.org/iiif/3d-models/spaceman-1.obj",
"type": "Model"
},
"fieldOfView": 35.0
},
"target": [{ "// as above": "" }]
},
{
"id": "https://example.org/iiif/3d/anno3",
"type": "Annotation",
"motivation": ["painting"],
"body": {
"type": "SpecificResource",
"source": [
{
"id": "camera-sr-1",
"type": "Camera",
"fieldOfView": 65.0
}
],
"transforms": [
{
"type": "RotationTransform",
"x": 0.0,
"y": 90.0,
"z": 0.0
}
]
},
"target": [
{
"type": "SpecificResource",
"source": [
{
"id": "https://example.org/iiif/scene1/page/p1/1",
"type": "Scene"
}
],
"selector": [
{
"type": "PointSelector",
"x": 100.0,
"y": 100.0,
"z": 0.0
}
]
}
]
}
]
}
At the Basel working meeting on October 26, 2023, general consensus was present for the following:
Question arising from TSG meeting on November 15 2023: What happens (default expectation) when multiple camera annotations are present in a single manifest? Is it choice, or is it multiple viewports? This has implications on importing cameras from sub-manifests or scene files, if we were to possibly want to support somehow pulling those in?
IMO:
x,y
where z=0. That would likely make rotation calculation easier as it's starting from 0s rather than an angle Discussion:
Camera(s) are optional.
Where will the viewer put the camera if you don't provide one?
What is the initial state of a camera placed in the scene? What do you have to provide?
If we are rotating it what are we rotating it from?
Can we have a "show-all" - viewer works out where to put the camera to see everything in the scene.
See https://github.com/IIIF/3d/issues/15#issuecomment-1589931301 from Napoli
The publisher will often (usually?) wish to indicate what the user / view is looking at when the
Scene
initializes. The publisher may also wish to provide additional specific views.Cameras are added to the scene as annotations, just as model content resources are. They target a point.
items
property of the Scene?annotations
property of the Scene?cameras
property of the Scene, a separate list of annotations (with motivation…)The camera’s view is determined by two properties of the Camera class,
lookAt
andfieldOfView
(split these into individual issues? Probably not, need to be considered together)lookAt
(from Rob’s draft)
fieldOfView
See https://threejs.org/docs/#api/en/cameras/PerspectiveCamera.fov
Camera Annotation Example
This shows two cameras in the Scene’s items property, as painting annotations: