STEREO 3D
APPLICATIONS
POTENTIAL FOR
HERITAGE DISASTER
MANAGEMENT
Maria BOSTENARU DAN
Introduction
 Human viewing in 3D through stereo images
 Pairs of images / colours
 3D photography
 Disaster management
 Heritage conservation – 3D images (incl. Puzzles)
 Reconstruction of antique sites superposed to real
photo
 In this paper: Adobe (Macromedia) Director
application
 Potential for augmented reality (superpose 3D
model and photograph)
Historical and now
Research on stereo
photography
3D photography
 historic
 Canadian Centre for Architecture
 1866 fire in Portland, Maine – J. Soule
 Giorgio Sommer
 Evora
 DDR
 Now
 Castles in Hungary
Canadian Centre for Architecture
Canadian Centre for Architecture
Photographer Siever
CCA
Fire Boston 1873
Photographer Soule John
CCA
Fire Portland (Maine) 1866
wikipedia
Giorgio Sommer Vesuvius 26 April 1872
wikipedia
Giorgio Sommer Vesuvius
wikipedia
Giorgio Sommer Pompei
Evora disaparecida
http://www.varak3d.hu/
Várak 3D
Photo.net
Projection of stereo in an installation
Rediscovered space
Rediscovered space
Rediscovered space
Satellite imagery
 2001 Gujarat earthquake – M. Markus
(comparison with eye view)
 L‘Aquila (our research)
 2010 Haiti – stereo pairs (Langenbach)
Foto 2003, 2010
Plan: Protecţia Civilă Italiană
L‘Aquila
Stereo pairs 2010
http://www.conservationtech.com/
Pictometry images
3D application programming
Programming
 Lingo script, openGL basis
 Of a geometric model which we also built in
paper (rhombicuboctaedron)
member(1).newCamera("axonometrie")
(member 1 of castLib 1).Camera(2).translate(0, 0, 100, #world)
member(1).camera(2).rotate(45, 0, -135, #world)
member(1).newCamera("camera2")
(member 1 of castLib 1).Camera(3).translate(0, 0, 100, #world)
member(1).camera(3).rotate(45, 0, -135, #world)
member(1).camera(3).translate(20, 0, 0, #world)
on enterFrame
global l
member(1).resetWorld()
member(1).bgcolor=rgb(0,0,255)
l=20
mymeshgeometry = member(1).newMesh("rhombicuboctaedron", 44, 24, 0, 4)
tmpvertlist=[]
tmpvertlist.add( vector(l/2,l/2,(l/2+l*cos(PI/4))) )
tmpvertlist.add( vector(-l/2,l/2,(l/2+l*cos(PI/4))) )
tmpvertlist.add( vector(l/2,-l/2,(l/2+l*cos(PI/4))) )
tmpvertlist.add( vector(-l/2,-l/2,(l/2+l*cos(PI/4))) )
tmpvertlist.add( vector(l/2,l/2,-(l/2+l*cos(PI/4))) )
tmpvertlist.add( vector(-l/2,l/2,-(l/2+l*cos(PI/4))) )
tmpvertlist.add( vector(l/2,-l/2,-(l/2+l*cos(PI/4))) )
tmpvertlist.add( vector(-l/2,-l/2,-(l/2+l*cos(PI/4))) )
mymeshgeometry.vertexlist=tmpvertlist
mymeshgeometry.colorList=[ rgb(255,255,255),
rgb(0,255,255) , rgb(255,0,0), rgb(0,0,255)]
mymeshgeometry.face[1].vertices=[1,3,2]
mymeshgeometry.face[1].colors=[1,1,1]
mymeshgeometry.face[2].vertices=[4,2,3]
mymeshgeometry.face[2].colors=[1,1,1]
mymeshgeometry.face[3].vertices=[2,4,17]
mymeshgeometry.face[42].colors=[1,1,1]
mymeshgeometry.face[43].vertices=[6,8,5]
mymeshgeometry.face[43].colors=[1,1,1]
mymeshgeometry.face[44].vertices=[5,8,7]
mymeshgeometry.face[44].colors=[1,1,1]
mymeshgeometry.generateNormals(#flat)
mymeshgeometry.build()
mymeshl = member(1).newModel("meshlinks", mymeshgeometry)
(member 1 of castLib 1).Model[1].visibility = #both
mymeshgeometryx = member(1).newMesh("tetraedru", 4, 4, 0, 1, 1)
myboxgeometry = member(1).newModelResource("cub", #box)
myboxgeometry.width = l
myboxgeometry.length = l
myboxgeometry.height = l
mybox = member(1).newModel("cube", myboxgeometry)
myboxtexture = member(1).newTexture("cubetexture", #fromCastMember, member("bitmap"))
(member 1 of castLib 1).newShader("rot",#standard)
(member 1 of castLib 1).Shader[2].textureList[1] = (member 1 of castLib 1).texture[3]
(member 1 of castLib 1).Model[3].shaderList = (member 1 of castLib 1).shader[2]
member(1).model[3].translate(0, 0, (2*(l+l*cos(PI/4))) , #world)
mymeshgeometryz = member(1).newMesh("tetraedruz", 4, 4, 0, 1, 1)
mymeshgeometryz.vertexList=[vector(-((l/2)*cos(PI/4)),-((l/2)*cos(PI/4)),-((l/2)*cos(PI/4))),
vector(-((l/2)*cos(PI/4)),((l/2)*cos(PI/4)),((l/2)*cos(PI/4))),vector(((l/2)*cos(PI/4)),-((l/2)*cos
((l/2)*cos(PI/4))),vector(((l/2)*cos(PI/4)),((l/2)*cos(PI/4)),-((l/2)*cos(PI/4)))]
mymeshgeometryz.colorList=[rgb(255,0,0)]
mymeshgeometryz.face[1].vertices=[1,3,2]
mymeshgeometryz.face[2].vertices=[2,3,4]
mymeshgeometryz.face[3].vertices=[1,2,4]
mymeshgeometryz.face[4].vertices=[1,4,3]
mymeshgeometryz.face[1].colors=[1,1,1]
mymeshgeometryz.face[2].colors=[1,1,1]
mymeshgeometryz.face[3].colors=[1,1,1]
mymeshgeometryz.face[4].colors=[1,1,1]
mymeshgeometryz.generateNormals(#flat)
mymeshgeometryz.build()
mymeshx = member(1).newModel("tetraederz", mymeshgeometryz)
(member 1 of castLib 1).Model[4].visibility = #both
member(1).model[4].translate(0, 0, (3*(l+l*cos(PI/4))), #world)
mymeshgeometryx.vertexList=[vector(((l/2)*cos(PI/4)),((l/2)*cos(PI
((l/2)*cos(PI/4))),vector(((l/2)*cos(PI/4)),-((l/2)*cos(PI/4)),-((
vector(-((l/2)*cos(PI/4)),((l/2)*cos(PI/4)),-((l/2)*cos(PI/4))),
vector(-((l/2)*cos(PI/4)),-((l/2)*cos(PI/4)),((l/2)*cos(PI/4)))]
mymeshgeometryx.colorList=[rgb(255,0,0)]
mymeshgeometryx.face[1].vertices=[1,3,2]
mymeshgeometryx.face[2].vertices=[2,3,4]
mymeshgeometryx.face[3].vertices=[1,2,4]
mymeshgeometryx.face[4].vertices=[1,4,3]
mymeshgeometryx.face[1].colors=[1,1,1]
mymeshgeometryx.face[2].colors=[1,1,1]
mymeshgeometryx.face[3].colors=[1,1,1]
mymeshgeometryx.face[4].colors=[1,1,1]
mymeshgeometryx.generateNormals(#flat)
mymeshgeometryx.build()
mymeshx = member(1).newModel("tetraeder", mymeshgeometryx)
(member 1 of castLib 1).Model[2].visibility = #both
member(1).model[2].translate(0, 0, (l+l*cos(PI/4)), #world)
particleresource=member(1).newModelResource("particles",#particle)
particleresource.emitter.minSpeed = 40
particleresource.emitter.maxSpeed = 50
particleresource.emitter.numParticles = 350
particleresource.emitter.tweenMode = #age
particleresource.emitter.angle = 90
particleresource.emitter.direction = vector(0.000, -150.000, 0.000 )
particleresource.emitter.region = [vector(-50.000, 0.000, -50.000 ),
vector(50.000, 0.000, -50.000 ), vector(50.000, 0.000, 50.000 ), vector(-50.000, 0.000, 50.000 )
particleresource.wind = vector(1.000, -50.000, 50.000 )
particleresource.lifeTime = 5000
particleresource.colorRange.start = rgb(0, 255, 255)
particleresource.colorRange.end = rgb(255, 255, 255)
particleresource.sizeRange.start = 12
particleresource.sizeRange.end = 6
particleresource.blendRange.start = 25
particleresource.blendRange.end = 100
t = member(1).newTexture("tparticle", #fromCastMember, member "particle")
t.quality =#low
t.renderFormat = #rgba4444
particleresource.texture = t
member(1).camera(1).addChild(member(1).newModel("particles1", particleresource))
member(1).camera(1).addChild(member(1).newModel("particles2", particleresource))
member(1).model("particles2").rotate(0,0,180,#parent)
end
create world
sprite(1).camera=member(1).camera("axonomet
rie")
sprite(2).camera=member(1).camera("camera2"
)
member(1).model[3].rotate(0, 90, 0,
member(1).model[1])
end
Outlook
 Stereo images – illusion of 3D
 Potential not fully used
 Like in reconstruction on CD in the last
decade, translation from paper into computer
application of augmented reality
Rediscovered space
Rediscovered space
Rediscovered space
Rediscovered space
Rediscovered space
Rediscovered space
Rediscovered space
Rediscovered space
Rediscovered space
Student exercise site
Augmented reality
Leebmann 2002
Augmented reality – photo & modell
superposition
Leebmann 2004
Superposition of video, laser-scanning and
CAD simulation
Potential application
Archeologic reconstruction
 Granada 3D
 Troia 3D
 Director
Now and then photography
 Rezistenta.net
 Langenbach (Piranesi)
 San Francisco 1906 (Arnold Genthe)
 Indian Mutiny (Felice Beato)
Thank you!

COST Madrid