Morph-SynRJ

view efx_equa.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 "efx_equa.h"
2 #include "gl_header.h"
3 #include "cmn_intro.h"
5 #define FINAL_RELEASE
7 void efxEquaBox_t::Init(const mth::Vector3_t& _pos)
8 {
10 x.Init(EQUA_SIZE_X/2,0,0);
11 y.Init(0,EQUA_SIZE_Y/2,0);
12 z.Init(0,0,EQUA_DEPTH);
13 z2.Init(0,0,EQUA_DEPTH+EQUA_DEPTH_OFFSET);
16 vertexes[0]=_pos-x+y;
17 vertexes[1]=_pos+x+y;
18 vertexes[2]=_pos+x-y;
19 vertexes[3]=_pos-x-y;
21 vertexes[4]=vertexes[0]+z;
22 vertexes[5]=vertexes[1]+z;
23 vertexes[6]=vertexes[2]+z2;
24 vertexes[7]=vertexes[3]+z2;
26 baseLevel=0;
27 }
29 void efxEquaBox_t::SetDepthLevel(float _level)
30 {
31 vertexes[4]=vertexes[0]+z *(_level);
32 vertexes[5]=vertexes[1]+z *(_level);
33 vertexes[6]=vertexes[2]+z2*(_level);
34 vertexes[7]=vertexes[3]+z2*(_level);
35 vertexes[4][2]+=baseLevel;
36 vertexes[5][2]+=baseLevel;
37 vertexes[6][2]+=baseLevel;
38 vertexes[7][2]+=baseLevel;
39 level=_level;
41 }
44 void efxEquaBox_t::DrawQuad(int _number,float _nx,float _ny)
45 {
46 glNormal3f(_nx,_ny,0);
47 glTexCoord2f(0,0);
48 glVertex3fv(vertexes[4+_number]);
49 glTexCoord2f(1,0);
50 glVertex3fv(vertexes[4+(1+_number)%4]);
51 glTexCoord2f(1,1);
52 glVertex3fv(vertexes[0+(1+_number)%4]);
53 glTexCoord2f(0,1);
54 glVertex3fv(vertexes[0+_number]);
55 }
58 void efxEquaBox_t::Draw()
59 {
60 #ifdef FINAL_RELEASE
61 DrawQuad(0,0,1);
62 DrawQuad(1,1,0);
63 DrawQuad(2,0,-1);
64 DrawQuad(3,-1,0);
65 #else
66 glNormal3f(0,1,0);
67 glVertex3fv(&vertexes[4][0]);
68 glVertex3fv(&vertexes[5][0]);
69 glVertex3fv(&vertexes[1][0]);
70 glVertex3fv(&vertexes[0][0]);
72 glNormal3f(1,0,0);
73 glVertex3fv(&vertexes[5][0]);
74 glVertex3fv(&vertexes[6][0]);
75 glVertex3fv(&vertexes[2][0]);
76 glVertex3fv(&vertexes[1][0]);
78 glNormal3f(0,-1,0);
79 glVertex3fv(&vertexes[6][0]);
80 glVertex3fv(&vertexes[7][0]);
81 glVertex3fv(&vertexes[3][0]);
82 glVertex3fv(&vertexes[2][0]);
84 glNormal3f(-1,0,0);
85 glVertex3fv(&vertexes[7][0]);
86 glVertex3fv(&vertexes[4][0]);
87 glVertex3fv(&vertexes[0][0]);
88 glVertex3fv(&vertexes[3][0]);
89 #endif
91 glNormal3f(0,0.7,0.7);
92 glTexCoord2f(0,0);
93 glVertex3fv(vertexes[7]);
94 glTexCoord2f(1,0);
95 glVertex3fv(vertexes[6]);
96 glTexCoord2f(1,1);
97 glVertex3fv(vertexes[5]);
98 glTexCoord2f(0,1);
99 glVertex3fv(vertexes[4]);
102 }
105 void efxEqua_t::Kill()
106 {
107 if (box)
108 delete [] box;
109 box=0;
110 }
114 efxEqua_t::efxEqua_t()
115 {
116 box=0;
117 pos[0]=pos[1]=pos[2]=0;
118 }
121 void efxEqua_t::Init(int _res)
122 {
123 resolution=_res;
124 Kill();
125 box=new efxEquaBox_t[resolution*resolution];
127 mth::Vector3_t pos;
128 for (int i=0;i<resolution;i++)
129 for (int j=0;j<resolution;j++) {
130 pos.Init( (i-resolution*1.0/4)*(EQUA_SIZE_X+EQUA_SIZE_SPACE),
131 (j-resolution*1.0/4)*(EQUA_SIZE_Y+EQUA_SIZE_SPACE),
132 0);
133 box[i+j*resolution].Init(pos);
134 }
137 lightIntensity=0.9;
138 }
141 void efxEqua_t::SetDepthLevel(int _i,float _level)
142 {
143 SYS_ASSERT(_i>=0 && _i<resolution*resolution);
144 box[_i].SetDepthLevel(_level);
145 }
149 void efxEqua_t::Draw(/*GLenum _mode*/)
150 {
151 cmnPushMatrix();
152 glTranslatef(pos[0],pos[1],pos[2]);
153 glBegin(/*_mode*/ GL_QUADS);
154 for (int i=0;i<resolution*resolution;i++)
155 box[i].Draw();
156 glEnd();
157 cmnPopMatrix();
158 }