Académique Documents
Professionnel Documents
Culture Documents
DESARROLLO DE
ANIMACIONES 3D EN DELPHI
UTILIZANDO GLSCENE DE
OPENGL
Por
Sarah Landa Ramrez
Nahym Juvent ino Dorant es
Eduardo Villagmez Escandn
INDICE
Como i nst al ar GLScene
Como i nst al ar Graphi cEx
El ent orno de Del phi
Ej erci ci os
Rebot a
Si st ema Sol ar
Gusano
Graf i cas
Fuent e
Fuent e con vi ent o
Caj a de Nmeros
Corazn que expl ot a
Dragn
Pai saj e
Fot o Panormi ca
Terragen
PARA INSTALAR GLSCENE
Desempacar el archi vo GLScene.zi p (l o puedes obt ener de la si gui ent e di recci n por
ej empl o ht t p:/ / www.l i schke- onl i ne.de/ GLScene.ht ml )
Abri r Del phi Sel ecci ona l a opci n Cl ose Al l , depus del men Tool s el i j a Envi ronment
Opt i ons l a pest aa de Li brary y dent ro de el l a Li braryPat h y en
Ah se agregar el di rect ori o de source (que se encuent ra en l a carpet a
GLScene/ Del phi 6 que se desempac ant eri orment e).
l as carpet as y subcarpet as que se encuent ran dent ro de source t ambi n se t i ene que
agregar.
Una vez hecho l o ant eri or es necesari o copi ar l os archi vos DLL que encuent re dent ro
de l a carpet a source y sus subcarpet as, al di rect ori o Wi ndows/ Syst em.
Para i nst al ar el GLScene debe veri f i car que est e deshabi l i t ada l a opci n de
Cl ose al l del men f i l e (dent ro de Del phi ), si no est deshabi l i t ada de cl i c en el l a, del
mi smo men Fi l e el i j a Open y el i j a cada uno de l os archi vos .dpk que se encuent ran
en l a carpet a de GLScene/ Del phi 6 (en el di rect ori o que l os haya desempacado).
Al dar abri r aparecer una pant al l a como l a si gui ent e
En est a pant al l a el egi remos el bot n de Compi l e y despus de que real i ce su
proceso el egi remos el bot n de Inst al l
Aparecer una pant al l a si mi l ar a l a si gui ent e, i ndi cndonos que se ha i nst al ado.
Recuerda no sal var los cambi os
Real i zados e i nst al ar l os dems archi vos
Para i nst al ar Graphi cEx
Puedes baj ar Graphi cEx de l a si gui ent e pgi na:
ht t p:/ / www.l i schke- onl i ne.de/ GLScene.ht ml
Desempaquet ar Graphi cEx9.zi p en el si gui ent e di rect ori o :
C:\ Archi vos de Programas/ Borl and/ Del phi 6/ Li b
Ent ra a Del phi y sel ecci ona l a opci n Cl ose Al l del men Fi l e, del mi smo men
sel ecci ona Open y abre el archi vo dcl usr.dpk de est e di rectori o
C:\ Archi vos de Programas/ Borl and/ Del phi 6/ Li b
Aparecer una vent ana como l a si gui ent e en l a cual
daremos un cl i c en Add
Post eri orment e Browse y hay que
sel ecci onar t odos l os archi vos que di gan
Graphi c (como Graphi cEx.pas) menos l os
que t engan RU, DE, AL y FR ya que
corresponden a versiones en di f erent es
i di omas.
Una vez sel ecci onados est os
archi vos, daremos Abri r
l o que nos regresara a l a pant al l a ant eri or l a
que daremos OK, est a acci n nos present ar
una pant al l a con l a opci n de Compi l e, y
compi l aremos. En caso de present arse al gn
error en l a l nea que nos marque en roj o
(general ment e) l a pondremos ent re
coment ari os, es deci r, al i ni ci o de dicha
l nea l e pondremos 2 di agonal es / /
compi l aremos nuevament e hast a que t ermi ne el
proceso y post eri orment e daremos cl i c en Inst al l ,
cuando ci erre est as vent anas l e pedi r guardar l os
cambi os y sel ecci onaremos el bot n de Yes.
ENTORNO DE DELPHI
Cuando ent ramos a Del phi se present a una pant al l a como l a si gui ent e, en el l a
encont ramos l a barra de mens, el i nspect or de obj et os, l a pal et a de component es y
el f ormul ari o pri nci pal ment e.
En l a barra de component es encont ramos ya i nst al ado el GLScene, que ser en
nuest ro caso l o mas ut i l i zado.
Este icono sirve para ver el cdigo cuando te encuentras en el
formulario y viceversa
En i nspect or de obj et os podemos encont rar l as propi edades
y l os event os correspondi ent es al obj et o que t engamos
sel ecci onado, en est e caso se muest ran l as propi edades de
un f ormul ari o.
EL SISTEMA SOLAR
En el f ormul ari o agregar de l a barra de component es en l a pest aa de GLScene un
GLSceneVi ewer, un GLScene, un Cadencer y un Ti mer (est e se encuent ra en l a
pest aa de Syst em)
Dar un dobl e cl i c en el component e GLScene de est a manera l o edi t amos, aqu
agregaremos una cmara, en l a seccin de cmaras y en l as propi edades de
GLSceneVi ewer en l a propi edad de camara l e asi gnamos GLCamera1.
Despus agregamos una esf era y una f uent e de l uz (Sphere y GLLi ght Source) en l os
obj et os de escena, en l as propi edades de l a GLCamera1 en l a propi edad de
Target Obj ect l e asi gnamos Sphere1.
Para cambi ar el acabado de l a Sphere1 en l a
Propi edad Mat eri al , Front Propert i es, Pol ygoMode
podemos el egi r uno de l os t i po de rel l eno
most rados ah.
Para agregar movi mi ent o a l a esf era t enemos que ver l a propi edad de Behavi ous < ...>
se agrega con + el comport ami ent o Si mpl e Inert i a.
Dndol e cl i c en Si mpl e Inert i a podemos ver sus propi edades
- Mass se det ermi na que t an pesada es la esf era.
- TurnSpeed es para det ermi nar l a vel ocidad de l a esf era.
A Mass l e ponemos el val or de 1 y a TurnSpeed l e ponemos el val or de 100
Por ot ra part e al component e cadencer en l a propi edad Scene l e asi gnamos
GLScene1.
Vamos al cogi do y en l a secci n de USES agregamos GLBehavi ours.
Agregamos t ambi n un DummyCube en
l os obj et os de l a escena, a est e
DummyCube l e asi gnamos como hi j o una
esf era y a est a l e agregamos, de t al
manera que quede como en l a i magen que
se muest ra a cont i nuaci n
De est a manera Sphere3 es dependi ent e
del movi mi ent o que t enga Sphere2, que es
como su es como su esf era t ut or.
A l a Sphera1 le cambi amos su
propi edad Met eri al , Di f f use y l e
ponemos col or amari l l o para que
de est a manera l a i dent i f i quemos
como el Sol .
En caso que t engamos al guna
i magen para nuest ras esf eras, en
l a propi edad de Met eri al ,
Text ure,Image y en est a el egi r l a
i magen correspondi ent e.
Ahora dar dobl e cl i c al Ti mer, de est a manera aparecer l a vent ana del cdi go en el l a
escri bi remos l o si gui ent e ent re begi n y end
capt i on:= f ormat ('%d FPS',[GLSceneVi ewer1.FramesPerSecond]);
GLSceneVi ewer1.Reset Perf ormanceMoni t or;
Est as i nst rucci ones l o que hace es cont ar l os f rames que muest ra por segundo.
Sobre el f ormul ari o en el i nspect or de obj et os en l a pest aa de Event os, Sel ecci onar
OnMouseWheel y dar cl i c ( est e event o se act i va si el mouse t i ene "ruedi t a" y est a l a
movemos) y ponemos el si gui ent e cdi go
GLCamera1.Adj ust Di st anceToTarget (Power(1.1,Wheel Del t a/ 120));
y agregar en USES Mat h.
Est o nos permi t i r si mul ar un zoom en el proyect o.
CORAZN QUE EXPLOTA
En el f ormul ari o agregar de l a barra de component es en l a pest aa de GLScene un
GLSceneVi ewer, un GLScene y un Cadencer
Agregar una cmara en l a posi ci n x = 0, y = 1 y
z = 5.
Para ver si empre una cara i l umi nada del corazn
j al ar l a l uz de t al manera que quede como hi j o de
l a cmara.
Agregar una l uz en la posi ci n x = 2, y = 3 y z =
4.
Para cargar obj et os en programas model adores se deben cargar en FreeForm1 que
est a en MeshObj et s, el cual acept a est os t i pos de archi vos (3ds, dxf , obj ).
Agregar un FreeForm con su propi edad de scal e x = 4, y = 4 y z = 4, en su propi edad
di rect i on l os si gui ent es val ores: x= 0 y= 1 y z= 0, (est o t ambi n se puede hacer con el
Pi t chAngl e).
El t arget Obj et de l a cmara ser el FreeForm y l a propi edad de Camera del
GLSceneVi ewer sera GLCamera1.
En el event o del f ormul ari o OnCreat e poner:
Freef orm1.LoadFromFi l e('C:\ Document s and Set t i ngs\ Admi ni st rador\ Escri t ori o\
Corazon \ heart .3ds'); / / que es l a rut a del archi vo 3ds.
Ahora, debe agregar
GLFi reFXMAnager y un Cadencer.
Asi gnar en l a propi edad de cadencer
del GLFi reFXMAnager Cadencer1 y
en ref erence FreeForm1.
En l a propi edad de Scene del
Cadencer l a escena 1, Vamos a l os
ef ect os de FreeForm y el egi mos
Fi reEF y en su propi edad de Manager
l e asi gnamos GLFi reFXMAnager1
Cambi ar l a propi edad del GLFi reFXMAnager1 Part i cl eSi ze para det ermi nar el t amao
que t endrn l as part cul as de f uego
Mover l a cmara haci a at rs poni endo con z= 15 en l a propi edad posi t i on
Agregar un bot n, dar dobl e cl i c y poner est e cdi go:
GLf i reFXManager1.Ri ngExpl osi on(8,10,5,xvect or, yvect or, );
8, corresponde a l a vel oci dad i ni ci al mni ma
10, a l a vel oci dad i nici al mxi ma
5, a l as uni dades vi vas
Xvect or, el vect or en que se di pararn
Yvect or, el vect or del ani l l o
300 es el numero de part cul as i nvol ucradas
y aadi r en uses l a uni dad Geomet ry.
Agregar un checkbox con checked como t rue y en su event o cl i ck poner:
gl f i ref xmanager1.Di sabl ed:= not checkbox1.Checked
Agregar i n Cube del sceneObj et s y poner sus propi edades si gui ent es con est os
val ores:
CubeDept h = 2
CubeHei ght = 2
CubeHei ght = 2
Posi t i on x = 3, y = 3 y z= 1
Agregar un obj et o GLThorFXManager y en su propi edad Cadencer asi gnarl e el
Cadencer1
En l a propi edad Ef fect s del cubo, sel eccionamos el ThorFX, y en su propi edad
Manager, sel ecci onamos el GLThorFXManager.
En l a propi edad Target de GLThorFXManager se ponen l as coordenadas negat i vas del
cubo, es deci r, si el cubo t i ene x = 3, y = 3 y z = 1 ent onces el Target del
GLThorFXManager x= - 3, y = - 3 y z = - 1.
Y para hacer mas del gado el rayo por ej empl o poner l a propi edad del
GLThorFXManager wi l dness .01
FUENTE
En el f ormul ari o agregar de l a barra de component es en l a pest aa de GLScene un
GLSceneVi ewer, un GLScene
Agregar una cmara en l a posi ci n x = 10,
y = 10 y z = 30
Agregar un DummyuCube en l a posi ci n
y= 6.
Al Target Obj ect de l a cmara l e asi gnamos
el dummycube (obj et o vi rt ual que no es
vi si bl e).
En SceneObj et s, buscar Part i cl es que est a
en el men de Procedural Obj et s, cambi ar
el nombre de GLPart i cl es1 a Fuent e,
cambi ar su escal a de 1 a ,35 (,35;,35;,35).
Agregue un hi j o a l a f uent e, de Basi cGeomet ry, Sphere (que si mul ar una got i t a de
agua).
En l a esf era cambi ar St acks, Sl i ces (paral el os y meri di anos; que nos i ndi ca qu
t ambi n hecha va a est ar l a esf era, el mni mo acept ado es 3) y ponemos un 3
ambas propi edades.
En l a propi edad Mat eri al Bl endi ngMode asi gnar bmAddi t i v y en Mat eri al (de l a
esf era), Front Propert i es, Di f use el col or cl rTurqui se, Shi ni ness (bri l l o) 128 (el nivel
de bri l l o mas al t o) y en Specul ar ponemos cl rWhi t e.
Agregar al SceneObj et s una Luz, con una posi ci n de x = 4, y = 5 y z = 6 y subi rla
ant es de t odos l os obj et os y cambi ar: Specul ar a cl rWhi t e.
Al GLSceneVi ewer asi gnarl e en cmara cmara1, ponerl e en Buf f er,
Backgroundcol or cl rBl ack.
Vamos a l os event os del f ormul ari o y en
OnCreat e, ant es de l as de l a decl araci n
de l as vari abl es (gl obal es), debe
decl arar una const ant e:
const
cnt _grot as = 500;
ser el nmero de got as),
y en vari abl es,
ndx, mdy : i nt eger;
Procedure TForm1.FormCreat e(Sender: TObj ect );
var i :word;
begi n
Randomi ze;
f or i := 0 t o cnt _got as - 1 do
begi n
wi t h t sphere(Fuent e.Creat ePart i cl e) do
begi n
posi t i on.Set Poi nt (0,0,0);
di rect i on.X := (random - 0.5)/ 20;
di rect i on.Y := (random / 5)+ 0.01;
di rect i on.z := (random - 0.5)/ 20;
end;
end;
end;
donde el 20 es el radi o de di spersi n
Para darl e ani maci n, vamos a SceneObj et s en Sphere a su event o OnProgress
procedure TForm1.Sphere1Progress(Sender: TObj ect ; const del t aTi me,
newTi me: Doubl e);
begi n
Wi t h TSphere(sender) do
begi n
t ransl at e(di rect i on.X,di rect i on.Y,di rect i on.z);
i f (posi t i on.Y < - 0.75) t hen
begi n
posi t i on.Set Poi nt (0,- 0.5,0);
di rect i on.x := (random - 0.5 ) / 50;
di rect i on.Y := (random / 5 ) + 0.01;
di rect i on.Z := (random - 0. 5 ) / 10;
end el se
di rect i on.Y := di rect i on.Y - 0.1; / / con est o si mul amos gravedad
end;
end;
En l a propi edad Scene del Cadender asi gnamos GLScene1
el event o OnMouse Down del GLSceneVi ewer, ent re el begi n y el end ponemos
mdx := x; mdy := y;
est e es el punt o de ori gen en donde el usuari o empi eza a mover el mouse
y en OnMouseMove, t ambi n ent re el begi n y el end ponemos
i f Shi f t < > [] t hen
GLCamera1.Movearoundt arget (mdy- y, mdx- x);
mdx := x; mdy := y;
Agregamos un bot n de l a pest aa St andar y l e damos dobl e cl i c para decl arar
est a vari abl e
var
i : i nt eger;
y despus del begi n poner
f or i := 0 t o Fuent e.Count - 1 do
Wi t h Tsphere(Fuent e.Chi l dren[i]) do
begi n
Posi t i on.Set Poi nt (0,- 0.5,0);
di rect i on.X := (random - 0.5)/ 20;
di rect i on.Y := (random / 5) + 0.01;
di rect i on.z := (random - 0.5)/ 20;
end;
As cuando ej ecut emos el programa podremos ver l o si gui ent e
GRFICAS
En el f ormul ari o agregar de l a barra de component es en l a pest aa de GLScene un
GLSceneVi ewer, un GLScene
Agregar una cmara y en l a propi edad Posi t i on
x= 0, y= 1, y z= 6
Agregar un Hei ght Fi el d en l a propi edad
Xsampl i ngScal e Max = 2, Mi n= - 2, Ori gen = 0 y
St ep = 0.1; Ysampli ngScal e Max = 2, Mi n= - 2,
Ori gen = 0 y St ep = 0.1;
Agregar un GLLi gt hSource en l a posi ci n x= 1, y=
2 y z= 3
En el event o OnGet Hei ght del obj et o
Hei ght Fi el d poner el si gui ent e cdigo:
z:= cos(x) * y;
En l a secci n de USES poner Vect orTypes,
Geomet ry
En l a secci n de variabl es poner
var
Form1: TForm1;
mdx,mdy: i nt eger;
En el event o OnMouseMove del f ormul ari o poner el si gui ent e cdi go:
i f shi f t < > [] t hen
GLcamera1.MoveAroundTarget (mdy- y, mdx- x);
mdx:= x; mdy:= y;
En el event o OnMouseDown del f ormul ari o poner el si gui ent e cdi go:
mdx:= x; mdy:= y;
Cuando se ej ecut e el programa podremos ver al go pareci do, arrast rando con el
mouse podremos ver l a f i gura en dif erent es ngul os
GUSANO
En el f ormul ari o agregar de l a barra de component es en l a pest aa de GLScene un
GLSceneVi ewer y un GLScene.
En el Edi t or del DLScene agregar una cmara y un
DummyCube
Cambi ar l a propi edad Posi t i on de l a GLCamera1
x= 10, y= 5, z= 5, y en su Target Obj ect , l e asi gnamos
el DummyCube.
Y al GLSceneVi ewer en su propi edad cmara el egi r l a
cmara agregada (GLCamera1).
Ahora en el cdi go de l a f orma ant es de var def i ni mos
l as const ant es
const
cNbPl anes = 30; / / est o es el nmero de event os
cSt ackHei ght = 8; / / est o es l o al t o de la pi l a
Sobre el f ormul ari o en l os event os ent ramos a OnCreat e. (est e event o se di spara
cuando se crea l a vent ana)
Ant es del begi n ponemos
var
i : i nt eger; / / servi ra como cont ador
pl ane : TPl ane; / / seran l os pl anos creados
y despus del begi n
f or i := 0 t o cNbPl anes - 1 do
begi n
pl ane := Tpl ane(DummyCube1.AddNewChi l d(Tpl ane));
pl ane.Wi dt h := 2; / / cada pl ano es de 2 uni dades de ancho
pl ane.Hei ght := 2; / / uni dades de al to
pl ane.Posi t i on.Y := cSt ackHei ght * (0.5- i / cNbPl anes); / / para vari ar l a posi ci n de
cada uno
pl ane.Di rect i on.asvect or := YHmgVect or; / / est e val or apunt a di rect ament e al
l ado posi t i vo de y de i gual manera hay para x y z.
pl ane.mat eri al .Front Propert i es.Emi ssi on.Col or := Vect orl erp(cl rBl ue,cl rYel l ow,
i / cNbPl anes);
/ / est o seri a cambi ar el col or de emi si n de l as propi edades de la cara (f ront al es)
del mat eri al
end;
Y agregar a uses: Geomet ry, GLText ure
En l as propi edad Scene del Cadencer l e asi gnamos a GLScene1 y en su event o
onProgress ent ramos al cdi go ponemos
var
i : i nt eger;
NewTi me es el t i empo act ual del cadender.
Despus del begi n ponemos
f or i := 0 t o DummyCube1.Count - 1 do
(DummyCube1.Chi l dren[i] as TPl ane).Rol l Angl e :=
90 * cos(NewTi me + i *Pi / cNbpl anes);
El ngul o 90 i ndi ca l os grados que va a gi rar para regresar en ese mi smo ngul o. Es
deci r si ponemos 360 grados dar una vuel t a compl et a ant es de regresar.
Est a es l a manera en que l o ver ej ecut ndose.
CAJA DE NUMEROS
En l a pest aa de GLScene agrega:
GLSceneVi ewer, GLScene, un Cadencer y un
GLMat eri al Li brary
Agregar una cmara y en Scene obj ect s
agregar un GLLi ght Source, Cube y un
SpaceText
Cambi ar l as propi edades de Posi t i on de la cmara por x= 3, y= 2, z= 1 y asi gnarl e a l a
propi edad Target Obj ect Cube1
En l a propi edad Posi t i on poner x= 5, y= 10 y z = 7 del GLLi ght Source
En l a propri edad Text del obj et o SpaceText poner HOLA y en l a propi edad Behavi ours
adi ci onarl e Si mpl e Inert i a en sus propi edades poner en Mass = 1 y TurnSpeed = 100
En l a part e de USES le agregamos GLSpaceText y GLBehavi ours.
En el f ormul ari o agregar un bot n y un checkbox de l a pest aa de St andar de l a
barra de component es, dando dobl e cl i c al bot n ent raremos a l a part e del cdi go y
pondremos l o si gui ent e ant es del begi n
var
i: i nt eger;
bmp: Tbi t map;
y despus del bej n pondremos
f or i := 0 t o 9 do
begi n
bmp:= TBi t map.Creat e;
bmp.Pi xel Format := pf 24bi t ;
bmp.Hei ght := 60;
bmp.Wi dt h:= 60;
bmp.Canvas.Font .Name:= 'Ari al ';
bmp.Canvas.f ont .Hei ght := 56;
bmp.Canvas.Text Out (15,5,i nt t ost r(i ));
GLMat eri al Li brary1.AddText ureMat eri al ('IMG' + i nt t ost r(i ),bmp);
bmp.Free
end;
cube1.Mat eri al .Mat eri al Li brary := GLMat eri al Li brary1;
cube1.Mat eri al .Li bMat eri al Name := 'IMG0';
GLMat eri al Li brary1.Tag := 0;
Checkbox1.Enabl ed := t rue;
but t on1.Enabl ed := f al se;
Despus en el cdi go del Cadencer ponemos l o si gui ent e despus del begi n
cube1.Turn(del t at i me*3);
i f checkbox1.Checked t hen
begi n
Ti met oNext Frame := Ti met oNext Frame - del t at i me;
i f Ti met oNext Frame < 0 t hen
begi n
whi le Ti met oNext Frame < 0 do
begi n
Ti met oNext Frame:= Ti met oNext Frame + 0.2;
GLMat eri al Li brary1.Tag := (GLMat eri al Li brary1.Tag + 1 ) mod 10;
end;
cube1.Mat eri al.Li bMat eri al Name := IMG + i nt t ost r (GLMat eri al Li brary1.Tag);
end;
end;
En el event o OnCl oseQuery del f ormul ari o ponemos el si gui ent e cdi go
checkbox1.Checked := f al se;
Despus de eso corremos el programa y que da de est a manera
FUENTE CON VIENTO
En l a pest aa de GLScene agrega:
GLSceneVi ewer, GLScene y un Cadencer
Agregar una cmara y en su propi edad
Posi t i on x = 0, y = 5 y z = 20
Agregar un DummyuCube1 en el ori gen y
un hermano DummyCube2 en l a posi ci n
y= 4
Al Target Obj ect de l a cmara l e asi gnamos
el dummycube2
Agregar Un GLPol ygonPFXManager
En SceneObj ect s, Speci al Obj ect s agregar PFXRenderer en su propi edad ZWri t e a t rue
Al GLPol ygonPFXManager en sus propiedades Cadencer asi gnar el Cadencer1 y al
Render GLPart i cl esFX Renderer1, en Acel eraci on y= - 2 (l a fuerza con que caen ) En
Col orInner cl rYel l owGreen Y en Col orOut er cl rOl i ve En l ivecol or Li f eTi me = 7 y poner
un col or a Col orInner y ot ro a Col orOut er uno mas cl aro que el ot ro
Sel ecci onamos el Dummycube1 y en su propi edad Ef f ect s, PFXSource, es sus
propi edades Manager GLPol ygonPFXManager, ponemos
Ini t i al Posi t i on y= 0.1
Ini t i al Vel oci t y y= 6
Part i cl eInt erval = 0.01 (cada cuant o se genera una part i cul a)
Posi t i onDi spert i on = 0.2
Vel oci t yDi spert i on= 0.5
Part i cl eSi ze= 0.1
En l a propi edad Scene asi gnarl e l a GLScene, del Cadencer
Dobl e cl i c Cadencer y poner
GLSceneVi ewer1.Inval i dat e;
En el GLSceneVi ewer asi gnarl e en l a propi edad Camera, GLCamera1
Poner en onmousedown del GLSceneVi ewer
mdx:= x; mdy:= y;
y en mousemove
i f shi f t < > [] t hen
gl camera1.MoveAroundTarget (mdy- y, mdx- x);
mdx:= x; mdt y:= y;
y en l a secci n de vari abl es gl obal es declarar
mdx, mdy : i nt eger;
En l a pest aa de wi n32 t omar Tackbar en sus
propi edades mi n - 6 max 6, en su
event o OnChange hay que poner
var
source: t gl SourcePFXEf f ect ;
begi n
source:= Get OrCreat esourcePFX(Dummycube1);
source.Ini t i al Vel oci t y.X := t rackbar1.Posi t i on;
end;
Para agregar ot ra f uent e se agrega un
dummycube en ef ect os en manager se l e asi gna
el dummycube 1
Y en l a propi edad Behavi ous asi gnarl e Inert i aSi mpl e y agregar GLBehavi our en USES
Al ej ecut ar el proyect o se ver as
Al recorrer el t rackbar, podremos observar
como el agua de l as f uent es se mueve
si mul ando l a apl i caci n de vi ent o, de
acuerdo a donde movamos el t rackbar,
t ambi en arrast rando el mouse podemos
verl os en vari os ngul os
FOTO PANORMICA
En l a pest aa de GLScene agrega: GLSceneVi ewer, GLScene y un Cadencer
Agregar una cmara en l a posi ci n ori gen
Agregar una esf era en el ori gen y con un
radi o de 2
sl i ces = 64
st acks = 16
En l as propi edades de l a cmara en
Focal Lengt h = 40
Dept hOf Vi ew = 200
El vi ewer ponerl e el FaceCul l i ng en f al se
para ver el i nt eri or de l a cmara
Decl arar est as vari abl es despus de publ ic
dx, dy : i nt eger;
pi t ch, yaw : si ngl e; / / un nmero f l ot ant e grande
Procedure PanCameraAround(dx,dy: si ngl e)
en MouseDown del GLSceneVi ewer
mx:= x; my:= y;
en MouseMove del scenvi ewer
dx,dy f : si ngl e;
i f shi f t = [ssl ef t ] t hen
begi n
f := 0.2*40/ GLCamera1.Focal l engt h;
dx:= (x- mx) * f ;
dy:= (y- my) * f;
PanCameraAround(dx,dy);
end;
mx:= x;
my:= y;
En l a pest aa Di al ogs de l a barra de component es, poner el OpenPi ct ureDi al ogs
Agregar un bot n y dar Cl i c y poner en el cdi go
i f openPi ct uredi al og1.Execut e t hen
Sphere1.Mat eri al .Text ure.Image.LoadFromFi l e(OpenPi ct uredi al og1.Fi l eName);
Poner l a uni dad en uses de JPEG, y Geomet ry
poner el procedi mi ent o :
Procedure Tf orm1.PanCameraAround(dx, dy : si ngl e);
begi n
pi t ch:= pi t ch + dy;
yaw := yaw - dx;
i f pi t ch > 90 t hen pi t ch := 90;
i f pi t ch < 90 t hen pi t ch := - 90;
i f yaw > 360 t hen yaw := yaw - 360;
i f yaw < 0 t hen yaw := yaw + 360;
GLCamera1.Up.Set Vect or(0,1,0);
GLCamera1.Di rect i on.Set Vect or(
si n(DegToRad(yaw)),
si n(DegToRad(Pi t ch)),
- cos(DegToRad(yaw)));
end;
Aadi mos de l a pest aa de wi n32 un Tackbar
en sus propi edades mi n 10 max 100,
en su event o OnMouseChange del t rackbar
poner
GLCamera1.Focal Lengt h :=
Trackbar1.Posi t i on
en su event o OnMouseWheel de l a f orma
Trackbar1.Posi t i on := t rackbar1.Posi t i on + Round(2*Wheel Del t a/ 120);
Cuando l o ej ecut emos y demos un cl i c en el bot podemos abri r una i magen que sea
panormi ca
Y veramos l a i magen, pudi endo
verl a en 360 grados y t ambi n
podemos hacer un zoom con el
t rackbar
REBOTA
Agregar pl anos.
En l a pest aa de GLScene agrega:
GLSceneVi ewer, GLScene, Cadencer y
GLMat eri al Li brary
Agregar una cmara, Posi t i on 3,2,1
Agregar un cubo
Al t arj et obj et de l a cmara asi gnarl e el
cube1
Agregar un Luz posi t i on 5,10,7
Al vi ewer asi gnarl e en l a cmara cmara1de l a pest aa st ardar, agregar el bot n que
t i ene l a et i quet a OK.
y damos dobl e cl i ck para programar su
event o cl i ck
y decl aramos l as si gui ent es vari abl es
var
i: i nt eger;
bmp: Tbi t map;
As se generaran l os bmp, que t ambi n podran ser i mgenes exi st ent es.
Y agregamos el si gui ent e cdi go
f or i:= 0 t o 9 do
begi n
bmp:= TBi pmap.Creat ;
bmp.Pi xel Format := pf 24bi t ;
bmp.Hei ght := 60;
bmp.Wi dt h:= 60;
bmp.Canvas.Font .Name:= 'Ari al ';
bmp.Canvas.f ont .Hei ght := 56;
bmp.Canvas.Text Out (15,5,i nt t ost r(i ));
GLMat eri al Li brary1.AddText ureMat eri al ('IMG' + i nt t ost r(i ),bmp);
bmp.Free ' l i bera l a memori a
end;
cube1.Mat eri al .Mat eri al Li brary := GLMat eri al Li brary1;
cube1.Mat eri al .Li bMat eri al Name := 'IMG0';
GLMat eri al Li brary1.Tag := 0;
Checkbox1.Enabl ed := t rue;
but t on1.Enabl ed := f al se;
En var gl obal es ponemos
Ti met oNext Frame: Doubl e;
Ahora en el cdi go del cadencer ponemos
cube1.Turn(del t at i me*3);
i f checkbox1.Checked t hen
begi n
Ti met oNext Frame := Ti met oNext Frame - del t at i me;
i f Ti met oNext Frame < 0 t hen
begi n
whi le Ti met oNext Frame < 0 do
begi n
Ti met oNext Frame:= Ti met oNext Frame + 0.2;
GLMat eri al Li brary1.Tag := (GLMat eri al Li brary1.Tag + 1 ) mod 10;
end;
cube1.Mat eri al.Li bMat eri al Name := IMG + i nt t ost r (GLMat eri al Li brary1.Tag);
end;
end;
En l a f orma en el event o onCl oseQuery
As se ve el proyect o t ermi nado
PAISAJE
Agregar un GLScene y GLSceneVi ewer y de
l a pest aa Adi t i onal un Image, un su
propi edad Pi ct ure sel ecci onar l a i magen
bmp y ponemos su propi edad en verdadero
Agregar un Hei ghFi el d que se encuent ra en
Procedural Obj ect s su di recci n 0,1,0 par
que quede hori zont al
Cambi ar l a escal a, 100,100,1
XSampl i ngScal e max= 1 y en St ep 0.01
YSampl i ngScal e max= 1 y en St ep 0.01
Agregar un l uz en l as coordenadas 50,6,- 58, con una di recci on de 1,0,- 1
Agregar un dummycube l e vamos a poner cameraCube en posi t i on 42,8,- 50
Agregamos una cmara y l a arrast ramos hi j o a l a cameracube posi t i on de l a cmara
0,0,- 5, en el Dept hOf Vi ew 300
Agregar un Dummycube y ponerl e el nombre de Act orCube en l a posi t i on 44,8,- 50 y
agregarl e u hi j o Act or (), en su di rect i on 0,1,0 mat eri al , t ext ure, di sabl e= f al se cmara
t arget obj et = act or1 el vi sor l e asi gnamos en cmara gl camera1 en Hei ght Fi ed en sus
event os OnGet Hei ght poner el si gui ent e cdi go
var
val , xi ,yi : i nt eger;
begi n
xi := round(x*(image1.Pi ct ure.Wi dt h- 1));
yi := round((1- y)*(i mage1.Pi ct ure.Hei ght - 1));
val := (i mage1.Pi ct ure.Bi t map.Canvas.Pi xel s[xi ,yi ]) and
$000000FF;
z := val *0.05;
Agregar l as uni dades: Geomet ry, Vect orTypes
Agregar a l as vari abl es gl obal es
Agregar un cadencer y asoci arl o con gl scene1
En l os event os de l a f orma onmousewheel
GLcamera1.Adj ust Di st anceToTarget (Power1(1.1,Wheel Del t a/ 120)); y en el
gl scenevi ewer en el event o onmousewheel
mx := x; my:= y;
mx2 := x2; my2:= y2;
Y en el FORMA en el event o onmousewheel
GLcamera1.Adj ust Di st anceToTarget (Power(1.1,Wheel Del t a/ 120));
En el event o onmousemove del gl sceneviewer
IF SHIFT < > [] THEN
BEGIN
mx2:= x; my2:= y;
END;
En el cadencer en el event o onprogress
i f ((mx < > mx2) or (my < > my2)) t hen
begi n
GLCAMERA1.MoveAroundTarget (MY- MY2,MX- MX2);
MX := MX2; MY:= MY2;
end;
opt i onsde Hei ght Fi el
t ext ureCoordi nal = t rue
mat eri al ,t ext urre,di sabl e= f al se
pi ct ure= i magen
aadi r l a uni dad Graphi cEx
En el f ormul ari o el event o onCreat e, para cargar el act or Act or1.LoadFromFi l e
('C:\ Pl ayers\ t ekkbl ade\ t ri s.md2);
En oncreat e del f ormul ari o poner:
Act or1.LoadFromFi l e('C:\ Pl ayers\ t ekkbl ade\ t ri s.md2');
act or1.Mat eri al .Text ure.Image.LoadFromFi l e ('C:\ Pl ayers\ t ekkbl ade\ bl ade_bl ue.pcx');
act or1.Scal e.Set Vect or(0.05,0.05,0.05,0.05);
act or1.Swi t chToAni mat i on(0);
Dent ro del procedure poner
const
cTurnSpeed = 100 ;
cMoveSpeed= 9;
var
hgt : si ngl e;
HV: THomogeneousFl t Vect or;
t p: TText poi nt ;
xpos, zpos: si ngl e;
begi n
i f IsKeyDown (vk_l ef t) t hen
Act orCube.Turn(- cTurnSpeed * del t at i me);
i f IsKeyDown (vk_ri ght ) t hen
Act orCube.Turn(cTurnSpeed * del t at i me);
i f IsKeyDown (vk_up) or IsKeyDown (vk_down) t hen
begi n
Act orCube.move(cMoveSpeed * del t at i me)
el se
Act orCube.move(- cMoveSpeed * del t at i me);
xpos := - (Act orCube.Posi t i on.z/ Hei ght Fi el d1.Scal e.X);
zpos := (Act orCube.Posi t i on.x/ Hei ght Fi el d1.Scal e.Y);
Hei ght Fi el d1Get Hei ght (zpos,xpos,hgt ,hv,t p);
act orcube.posi t i on.Y := (hgt * Hei ght Fi eld1.scal e.Z) +
(Hei ght Fi el d1,posi t i on.Y) + 1.2;
cameracube.posi t i on := act orcube.posi t i on;
Act orDo(run,True);
end el se
Act orDo(run,f al se);
En l a propi edad del act or Rol l Angl e poner 90
As se ver l a ej ecucin
DRAGN
Agregar un vi ewer y un GLscene.
Agregar una cmara con su posot i on:
0,0,4.5.
Agregar un Basi c Gomet ry / di sco,
i nnerRadi us 0,(para que sea un di sco y no
una dona) y en out erRadi us 3, en l a posi t i on
0,- 1,0, di rect i on 0,1,0.
Agregar un Act or.
Asi gnar en l a cmara en t arget obj et =
act or1.
Al vi ewer en su propi edad cmara asi gnarl e cmara1.
Para qui t ar l as l uces en el vi ewer en l as propi edades, Buf f er, Li ght i ng = f al se.
Agregarl e al di sco una t ext ura en l a propi edad del mat eri al .
Y en Uses agregar Graphi cEx.
En el event o de l a f orma oncreat e, ent ramos al cdi go y agregamos l o si gui ent e:
Act or1.l oadFromFi l e('C:\ Pl ayers\ dragonkni ght \ t ri s.md2').
Debemos de i ndi car l a rut a compl et a en l a cual se encuent ra el archi vo .md2.,
Ej empl o:
Act or1.Mat eri al .Text ure.Image.LoadFromFi l e(C:\ Pl ayers\ dragonkni ght \ dragon_armou
r.pcx).
En Act or1.scal e.set vect or(0.04,0.04,0.04,0), oj o el 0 es para no escal ar.
Para que aparezca l a t ext ura asi gnada en cdi go, en el act or en l a propi edad Materi al ,
Text ure, di sabl e= f alse.
Aadi r un combobox y en l a propi edad St yl e = csDropDownLi st .
Ahora ponemos: Act or1.Ani mat i ons.Set ToSt ri ngs(combobox1.i t ems);
Y ponemos est e cdi go al event o onmousedown del vi ewer: mdx := x; mdy := y;
Escri bi mos est e cdi go al event o onmousemove del viewer:
i f shi f t < > [] t hen
gl Camera1.movearoundt arget (mdy- y,mdx- x);
mdx := x;
mdy := y;.
E i nt roduci r est e cdi go al de l a f orma: Combobox1.It emIndex := 0.
Ahora agregamos un bot n y l e ponemos est e cdi go en cl i c: Act or1.Ani mat i onMode
:= aaml oop;
Escri bi r est e cdi go en el event o onchage del combobox:
Act or1.Swi t chToAni mat i on(Combobox1.t ext , t rue).
Agregamos un cadencer y l e asi gnamos en cadencer scene = scene1, y en su event o
onprogress poner: gl scenevi ewer1.Inval i dat e.
Para ver l os f rames de l a ani maci n ponemos el si gui ent e cdi go en changed del
act or1.
Para acercarse o al ej arse con el mouse: En l os event os de l a f orma
en OnMouseWheel ponemos: GLcamera1.Adj ust Di st anceToTarget (Power(1.1,
wheel del t a/ 120));
y agregamos Mat h, por que Power corresponde a una f unci n de esa l i brera.
Poner un cabal l ero al dragn.
Agregar un act or 2 que depende el act or1.
en el event o onCreat e de l a f orma, ant es del combobox1:
Act or2.LoadFromFi l e('C:\ Pl ayers\ dragonkni ght \ weapon.md2');
Act or2.Mat eri al .Text ure.Image.LoadFromFi l e('C:\ Pl ayers\ dragonkni ght \ weapon.pcx');
Act or2.Ani mat i ons.Assi gn(Act or1.Ani mat i ons); Act or2.Synchroni ze(Act or1).
Y en l as propi edades del act or2 en mat eri al , t ext ure en di sable = f al se
En combobox changed: Act or2.Synchroni ze (act or1);.
En el bot n l e agregamos: Act or2.Ani mat i onMode := aaml oop.
Agregar un obj et o Proxi Obj et s, en su propi edad MAt erObj ect l e i ndi camos que obj et o
va a copi ar y cambi amos su posi ci n - 1,0,0
Al ej ecut arl o se ver de l a si gui ent e manera, en el combo podemos el egi r l a serie de
movi mi ent os que har el dragn
TERRAGEN
Se puede descargar el Terragen de www.pl anet si de.co.uk e i nst al arl o, al abri rl o
aparecer una pant al l a como l a si gui ent e:
Hacemos vari os t razos con el scul pt i ng t ool sobre el rea de di buj o para crear
nuest ra i magen y agregamos el ef ect o de agua al pai saj e y se ver de l a si gui ent e
manera
Despus hay que dar l e Render Previ ew, para ver l a i magen que hemos creado.
Despus dar un cl i c en ender i mage para poder ver l a i magen en grande, y se ver
al go como est o
Despus hay que guardar l a i magen y abri r l a en un programa l l amado Wi l bur
y guardar l a i magen en escal a de gri ses como bmp, (8- bi t BMP Surf ace (8- bi t (*.bmp))
para que Del phi l o pueda i nt erpret ar.