Morph-SynRJ
view trans_explode2.cxx @ 0:22de913c2d84
morph-synrj intro
| author | "Cedric Pinson <cedric.pinson@alcove.fr> <mornifle@plopbyte.net>" |
|---|---|
| date | Tue Nov 27 15:23:52 2007 +0100 (2007-11-27) |
| parents | |
| children |
line source
1 #include "trans_explode2.h"
2 #include "gl_header.h"
3 #include "cmn_intro.h"
4 #include "cmn_texture.h"
12 void transExplode2_t::Init(int _xsection,int _ysection)
13 {
14 texture=txtCreateEmptyTexture(1024,1024);
16 nbElements=_xsection*_ysection;
17 resY=_ysection;
18 resX=_xsection;
21 elements=new transExplode2Element_t[nbElements];
23 float divx=RX*1.0/1024/resX;
24 float divy=RY*1.0/1024/resY;
26 const float SizeX=1.5*800.0/600/resX;
27 const float SizeY=SizeX;
30 int i,j;
31 for (j=0;j<resY;j++)
32 for (i=0;i<resX;i++) {
33 elements[i+j*resX].position.Init(i*SizeX-resX*SizeX/2+SizeX/2,j*SizeY-resY*SizeY/2+SizeY/2,0);
34 elements[i+j*resX].size[0]=SizeX*1.0/2;
35 elements[i+j*resX].size[1]=SizeY*1.0/2;
36 elements[i+j*resX].uvs.Init(i*divx,j*divy);
37 elements[i+j*resX].uvsVec.Init(divx,divy);
38 // elements[i+j*resX].uvs.Init(0,0);
39 // elements[i+j*resX].uvsVec.Init(800.0/1024,600.0/1024);
40 elements[i+j*resX].alpha=1.0;
41 elements[i+j*resX].angle=5;
42 elements[i+j*resX].rotation.InitRandomVectorInBox(20);
43 elements[i+j*resX].rotation.Normalize();
44 elements[i+j*resX].velocity.InitRandomVectorInBox(20);
45 elements[i+j*resX].velocity[2]=-mth::Abs(elements[i+j*resX].velocity[2]);
46 elements[i+j*resX].velocity.Normalize();
47 //elements[i+j*resX].velocity*=5;
48 }
51 started=false;
52 }
55 void transExplode2_t::GetBuffer1()
56 {
57 CopyBackBufferToTexture(texture,RX,RY);
58 //started=true;
59 }
63 void transExplode2Element_t::Update()
64 {
65 const float AngleAdd=100;
66 const float AlphaAdd=-0.5;
68 double dt=Timer->GetFrameTime();
69 angle+=AngleAdd*dt;
70 position+=velocity*dt;
71 alpha+=AlphaAdd*dt;
73 }
78 void transExplode2Element_t::Draw()
79 {
81 // cmnDisplayBackground(texture[0]);
82 // return ;
84 cmnPushMatrix();
85 glMatrixMode(GL_MODELVIEW);
86 glTranslatef(position[0],position[1],position[2]);
87 glRotatef(angle,rotation[0],rotation[1],rotation[2]);
89 glBegin(GL_QUADS);
90 glColor4f(1,1,1,alpha);
91 glTexCoord2f(uvs[0],uvs[1]+uvsVec[1]);
92 glVertex3f(-size[0],size[1],0);
94 glColor4f(1,1,1,alpha);
95 glTexCoord2f(uvs[0]+uvsVec[0],uvs[1]+uvsVec[1]);
96 glVertex3f(size[0],size[1],0);
98 glColor4f(1,1,1,alpha);
99 glTexCoord2f(uvs[0]+uvsVec[0],uvs[1]);
100 glVertex3f(size[0],-size[1],0);
102 glColor4f(1,1,1,alpha);
103 glTexCoord2f(uvs[0],uvs[1]);
104 glVertex3f(-size[0],-size[1],0);
105 glEnd();
106 //glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_COLOR);
108 cmnPopMatrix();
109 }
112 void transExplode2_t::Draw()
113 {
114 int i;
116 cmnPushMatrix();
117 cmnSetFrustrum(90);
118 cmnSetCamera(mth::Vector3_t(0,0,1),mth::Vector3_t(0,0,0));
119 glMatrixMode(GL_MODELVIEW);
120 //glLoadIdentity();
121 glEnable(GL_BLEND);
122 //glEnable(GL_BLEND);
123 glBlendFunc(GL_SRC_ALPHA,GL_ONE);
124 glDisable(GL_DEPTH_TEST);
125 glDisable(GL_CULL_FACE);
126 txtBindTexture2d(texture,0);
127 for (i=0;i<nbElements;i++)
128 elements[i].Draw();
130 txtUnBindTexture2d(0);
132 cmnPopMatrix();
133 }
136 void transExplode2_t::Update()
137 {
138 int i;
139 for (i=0;i<nbElements;i++)
140 elements[i].Update();
141 // elements[i].position+=mth::Vector3_t(0,0,-10)*Timer->GetFrameTime();
143 }
