Vous êtes sur la page 1sur 50

GUA PRCTICA PARA EL

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.

Vous aimerez peut-être aussi