Camera Control
Creating and Controlling Cameras
This tutorial builds on the last. So, you will need your completed Director file. If you want to download the completed one, it is available here (3Denv_charMov.dir).
2. Add the following to the top of the script:
property pSprite -- reference to 3D sprite
3. Add the following to the start of the beginSprite handler.
pSprite = sprite(me.spriteNum)
4. Add the following to the end of the beginSprite handler (after createLight).
setUpCamera
5. Add the following to the script (after the createLight handler).
on setUpCamera
-- create 2 new cameras
frontCam = p3Dmember.newCamera("frontCam")
characterCam = p3Dmember.newCamera("characterCam")
-- frontCam settings
-- set up the camera's vertical viewing angle
frontCam.fieldOfView = 35
The fieldOfView is the vertical viewing angle of the camera, indicated by the angle formed by two rays: one drawn from the camera to the top of the projection plane, the other drawn from the camera to the bottom of the projection plane.
If using Director 8.5, use projectionAngle instead
of fieldOfView.
-- position the camera
frontCam.transform.position = vector(150,-340,170)
The default position of any newly created camera is vector (0,0,250).
-- set rotation of camera
frontCam.transform.rotation = vector(60,0,30)
The default rotation of any newly created camera is vector (0,0,0).
The above numbers were my experimental variations of a camera set up in
3DS Max. Typically, it's easier to set up your cameras in your 3D modelling
software. Here we're looking at the Lingo associated with camera properies.
-- characterCam
settings - correspond position
-- of the camera to that of the character
characterCam.transform.position = \
pCharacter.transform.position
-- set rotation of camera
characterCam.transform.rotation = vector(70,0,180)
We rotate camera 180 degrees about 'z' axis so it points from behind the
character, and 70 degrees about the 'x' axis so it points slightly to the
ground. A rotation of 90 degrees about the 'x' axis points the camera directly
forward, greater than 90 is points up.
-- move camera to behind and above the character
characterCam.translate(20,-20,300)
-- set the camera of the sprite to the frontCam
pSprite.camera
= p3Dmember.camera("frontCam")
-- make cameras children of the character model
pCharacter.addChild(frontCam, #preserveParent)
pCharacter.addChild(characterCam, #preserveParent)
end
By making the cameras childeren of the character model,
the cameras will move with the model. So when you play the movie, the character
will always stay in the middle of the scene and the environment will appear
to move.
6. Now we have created and set up the 2 cameras, we'll
create a script to switch between them. Add the following statement to
the keyDown handler.
if keypressed("c") then changeCamera
7. Next, you guessed it, we create the
changeCamera handler. Add the following to the
script:
on changeCamera
-- check the sprites camera and switch
if pSprite.camera = \
p3Dmember.camera("characterCam") then
pSprite.camera
= p3Dmember.camera("frontCam")
else
pSprite.camera
= p3Dmember.camera("characterCam")
end if
end
8 . Play the movie and test what you
just created.
You can download the completed movie
from here.