The RTT (Render-to-Texture) camera feature used in the previous
tutorial can be exploited in numerous ways to create interesting
devices for the realXtend platform. The good news for OpenSim fans
is that that the realXtend functionality will soon be merged into
OpenSim as an optional regionmodule which can be activated on a per
region basis.
Today's tutorial involves the construction of a realistic
working overhead projector. It's realistic to a point, but it
doesn't project the slides onto your avatar if you step between the
projector and the screen! Here's a video to give you a sense of
what it's like.
I'm going to assume that you can build or find a suitable
projector and screen using the techniques described in the tutorial
on the streamlined tool chain. I chose this one by Jeff and colored
it with my own textures after assigning the mesh to a cubic prim.
The screen is just a pair of thin rectangular prims. For this
exercise I didn't bother with a tripod or other mounting hardware.
Further, I'll assume you can create a slide and place it on you
projector, much like this:

Create a small cube to hold the RTT camera and position it above
the slide near the mirror and lens. The projector I've chosen has
an offset mirror & lens so I place the RTT camera directly
above the slide where the mirror and lens should be. Dimensions of
0.05m cubed should be fine.
Drag a texture on the blank screen and record its UUID. Modify
the samplertt.py script in the following ways and save it as
overheadrtt.py. The key five lines in my script are:
pos = self.llGetPos()
lookAt = pos + Vector3(0, 0, -0.340)
cameraName = "overhead_cam"
textureId = "303a8c94-e879-4215-a3a9-43f0cf77caa7″
#slide_texture
textureWidth = 512
textureHeight = 512
The script is assigned to the cube by setting the class name to
overheadrtt.RttCam (case-sensitive.) The first line gets the
position of the cube. The second line tells the camera to look at a
point .34m below. You should determine this value by calculating
the difference between the center of the cube and the top surface
of your slide. (It won't matter if you use the Z-coordinate of your
slide since the slide is very thin.)
After you save the script and restart the Python interpreter,
you'll see an inverted image which may be rotated if you rotated
the slide object or the screen object while positioning them.
Remove all rotations by setting the angles to zero and try to
compensate by rotating and flipping textures. You can also decide
whether you want conventional overhead projector behavior where the
presenter faces the audience and the slide is oriented the correct
way for the presenter, or whether you want the slide oriented
towards the audience as it is in my example.
Before we finish, we have to deal with the plywood block. You
can shrink it to .001m cubed, change the color and even make it
almost transparent. Before you do any of this, link the projector
to the cube and edit linked parts to select the cube. It can be
very difficult to find a completely transparent cube! A better
solution would be to implement a command in the script to toggle
its transparency between 0 and 100%. You can combine this action
with the existing logic that turns the RTT camera on and off.
If you have a collection of slides in a textures folder, you can
drag the textures at will onto the top surface of the slide. You
can amuse your audience by moving the slide around with your mouse.
(You don't have to edit the slide prim to do this.)
I leave it as an exercise for the reader to organize a slide
flipper and a nice animation for the presenter to flip the
slides.
We recommend that you discuss this article on Think, but if you really want to you can leave a comment right here as well: