00001
00002
00003 #include <vcl.h>
00004 #pragma hdrstop
00005
00006 #include "MDITransparent.h"
00007 #include "MDIEdit.h"
00008 #include "MDIFrame.h"
00009
00010 #pragma package(smart_init)
00011 #pragma resource "*.dfm"
00012 TTransparentForm *TransparentForm;
00013 rgb *transparentview;
00014
00015 long testx,testy,testz;
00016 const float pi=3.141592;
00017 const float pi2=2*pi;
00018 const float pih=pi/2;
00019 const float pirad=pi/180;
00020 int ox,oy, mrotx, mroty;
00021 bool mdown;
00022
00023
00024 __fastcall TTransparentForm::TTransparentForm(TComponent* Owner)
00025 : TForm(Owner)
00026 {
00027 }
00028
00029 void __fastcall TTransparentForm::SetPixelFormatDescriptor()
00030 {
00031 PIXELFORMATDESCRIPTOR pfd = {
00032 sizeof(PIXELFORMATDESCRIPTOR),
00033 1,
00034 PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
00035 PFD_TYPE_RGBA,
00036 24,
00037 0,0,0,0,0,0,
00038 0,0,
00039 0,0,0,0,0,
00040 32,
00041 0,
00042 0,
00043 PFD_MAIN_PLANE,
00044 0,
00045 0,0,
00046 };
00047 PixelFormat = ChoosePixelFormat(hdc, &pfd);
00048 SetPixelFormat(hdc, PixelFormat, &pfd);
00049 }
00050
00051
00052 void __fastcall TTransparentForm::FormClose(TObject *Sender, TCloseAction &Action)
00053 {
00054 delete [] transparentview;
00055 Action=caFree;
00056 FrameForm->Transparent->Checked = false;
00057 memusage = memusage - 3*1024*1024;
00058 FrameForm->memupdate();
00059 wglDeleteContext(hrc);
00060 ReleaseDC(Handle,hdc);
00061 }
00062
00063 void __fastcall TTransparentForm::FormCreate(TObject *Sender)
00064 {
00065 int i,a;
00066
00067 transparentview = new rgb[1024*1024];
00068 memusage = memusage + 3*1024*1024;
00069 FrameForm->memupdate();
00070
00071 mrotx=0; mroty=0;xres=256;yres=256;thresh = 400;
00072 hdc = GetDC(Handle);
00073 SetPixelFormatDescriptor();
00074 hrc = wglCreateContext(hdc);
00075 if(hrc == NULL) ShowMessage("Could not create DC!");
00076 wglMakeCurrent(hdc, hrc);
00077
00078 w = ClientWidth;
00079 h = ClientHeight;
00080
00081 glEnable(GL_DEPTH_TEST);
00082 glEnable(GL_CULL_FACE);
00083
00084 glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
00085 glOrtho (-50.0,50.0,-50.0,50.0,-50.0,50.0);
00086
00087 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00088 glFlush();
00089 SwapBuffers(hdc);
00090 FormResize(Sender);
00091 RayCast();
00092 }
00093
00094 void __fastcall TTransparentForm::FormResize(TObject *Sender)
00095 {
00096 PrepareGLWindow();
00097 if (autores->Checked) {RayCast();}
00098 PaintGL();
00099 }
00100
00101 void __fastcall TTransparentForm::FormPaint(TObject *Sender)
00102 {
00103 PaintGL();
00104 }
00105
00106 void __fastcall TTransparentForm::PaintGL()
00107 {
00108 float i;
00109
00110 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00111 PrepareGLWindow();
00112 glColor3f(0.6f,0.6f,0.6f);
00113 glLineWidth(3.0f);
00114 glBegin(GL_LINE_STRIP);
00115 glVertex3f(-50,-50,0);
00116 glVertex3f(50,-50,0);
00117 glVertex3f(50,50,0);
00118 glVertex3f(-50,50,0);
00119 glVertex3f(-50,-50,0);
00120 glEnd();
00121
00122 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
00123 glDrawPixels(xres, yres, GL_RGB, GL_UNSIGNED_BYTE,transparentview);
00124
00125
00126
00127 glFlush();
00128 SwapBuffers(hdc);
00129 }
00130
00131 void __fastcall TTransparentForm::PrepareGLWindow()
00132 {
00133 wglMakeCurrent(hdc, hrc);
00134
00135 GLfloat nRange = 50.0;
00136 w = ClientWidth-200;
00137 h = ClientHeight;
00138
00139 if(h == 0) h = 1;
00140 if(w == 0) w = 1;
00141
00142 glViewport(200, 0, w, h);
00143 glLoadIdentity();
00144
00145 if (w <= h)
00146 { glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange);
00147 glPixelZoom((float)w/(float)xres, (float)w/(float)yres);}
00148 else
00149 { glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);
00150 glPixelZoom((float)h/(float)xres, (float)h/(float)yres);}
00151
00152 glRasterPos2d(-50,-50);
00153 }
00154
00155
00156 void __fastcall TTransparentForm::FormActivate(TObject *Sender)
00157 {
00158 PaintGL();
00159 }
00160
00161 void __fastcall TTransparentForm::RayCast()
00162 {
00163 int a,i,k,maxres;
00164 __int16 value;
00165 int aktpos, rowsize,pagesize, px, py, pz;
00166 int h,ita, ite;
00167 float j,t,ta,te,tx,ty,tz,xrcos,yrcos,zrcos,xrsin,yrsin,zrsin,xrot,yrot,zrot;
00168 float valcr, valcg, valcb, valgx,valgy,valgz,value1,value2,value3, value4, value11, value22,pfx,pfy,pfz,sx,sy,sz,s1x,s1y;
00169 float temp, fr, fg, fb;
00170 bool detset;
00171 double valsh, ac, ac2;
00172 float lx, ly, lz, alphasum, alpha;
00173 unsigned char col, vcol;
00174 const trlimit = 1/256;
00175
00176 alphasum = 1.0;
00177
00178 vertex pppos;
00179 vertex dlookup[1024];
00180 if (autores->Checked)
00181 { if (w>h) {xres=h;yres=h;} else {xres=w;yres=w;} }
00182 else
00183 {
00184 xres = StrToInt(textx->Caption);
00185 yres = StrToInt(texty->Caption);
00186 }
00187 xrot = (float)StrToFloat(txrot->Text)*pirad;
00188
00189 zrot = (float)StrToFloat(tzrot->Text)*pirad;
00190
00191 xrcos = _fm_cos(xrot);
00192
00193 zrcos = _fm_cos(zrot);
00194 xrsin = _fm_sin(xrot);
00195
00196 zrsin = _fm_sin(zrot);
00197
00198 FrameForm->StatusProgress->Position = 0;
00199 FrameForm->StatusProgress->Visible = true;
00200 maxres = MAX(MAX(sizeX,sizeY),sizeZ);
00201
00202
00203 lx =0; ly=1; lz=0;
00204
00205 temp = ly;
00206 ly = temp*xrcos - lz * xrsin;
00207 lz = temp*xrsin + lz * xrcos;
00208
00209 temp = lx;
00210 lx = temp*zrcos - ly * zrsin;
00211 ly = temp*zrsin + ly * zrcos;
00212
00213
00214 dx.x = (float)maxres/(float)xres;
00215 dx.y = 0;
00216 dx.z = 0;
00217
00218 temp = dx.y;
00219
00220 dx.x = dx.x;
00221 dx.y = temp * xrcos - dx.z*xrsin;
00222 dx.z = temp * xrsin + dx.z*xrcos;
00223
00224 temp = dx.x;
00225
00226 dx.x = temp * zrcos - dx.y * zrsin;
00227 dx.y = temp * zrsin + dx.y * zrcos;
00228 dx.z = dx.z;
00229
00230 dy.x = 0;
00231 dy.y = 0;
00232 dy.z = (float)maxres/(float)yres;
00233
00234 temp = dy.y;
00235
00236 dy.x = dy.x;
00237 dy.y = temp * xrcos - dy.z*xrsin;
00238 dy.z = temp * xrsin + dy.z*xrcos;
00239
00240 temp = dy.x;
00241
00242 dy.x = temp * zrcos - dy.y * zrsin;
00243 dy.y = temp * zrsin + dy.y * zrcos;
00244 dy.z = dy.z;
00245
00246
00247 dz.x = 0;
00248 dz.y = 1;
00249 dz.z = 0;
00250
00251 temp = dz.y;
00252
00253 dz.x = dz.x;
00254 dz.y = temp * xrcos - dz.z*xrsin;
00255 dz.z = temp * xrsin + dz.z*xrcos;
00256
00257 temp = dz.x;
00258
00259 dz.x = temp * zrcos - dz.y * zrsin;
00260 dz.y = temp * zrsin + dz.y * zrcos;
00261 dz.z = dz.z;
00262
00263 o.x = -(maxres/2);
00264 o.y = -(sizeY/2);
00265 o.z = -(maxres/2);
00266
00267 temp = o.y;
00268
00269 o.x = o.x;
00270 o.y = temp * xrcos - o.z*xrsin;
00271 o.z = temp * xrsin + o.z*xrcos;
00272
00273 temp = o.x;
00274
00275 o.x = temp * zrcos - o.y * zrsin;
00276 o.y = temp * zrsin + o.y * zrcos;
00277 o.z = o.z;
00278
00279 o.x = o.x + sizeX/2;
00280 o.y = o.y + sizeY/2;
00281 o.z = o.z + sizeZ/2;
00282
00283 pagesize = sizeX*sizeY;
00284 rowsize = sizeX;
00285
00286 for (i=0; i<1024; i++)
00287 {
00288 dlookup[i].x = (i-512) * dz.x;
00289 dlookup[i].y = (i-512) * dz.y;
00290 dlookup[i].z = (i-512) * dz.z;
00291 }
00292
00293 k = 0;
00294 for (a=0; a<yres; a++)
00295 {
00296 pppos.x = o.x + a * dy.x;
00297 pppos.y = o.y + a * dy.y;
00298 pppos.z = o.z + a * dy.z;
00299
00300 if (arepaint->Checked == false) {FrameForm->StatusProgress->Position = (int)(100 * ((float)a / (float)yres));}
00301 for (i=0; i<xres; i++)
00302 {
00303 ppos.x = pppos.x + i * dx.x;
00304 ppos.y = pppos.y + i * dx.y;
00305 ppos.z = pppos.z + i * dx.z;
00306
00307 ta = 9999;
00308 te = 9999;
00309
00310 if (dz.x!=0)
00311 {
00312 t = -ppos.x/dz.x;
00313 ty = ppos.y + t*dz.y;
00314 tz = ppos.z + t*dz.z;
00315 if (ty>=0 && tz>=2 && ty<sizeY-1 && tz<sizeZ-3) { if (ta==9999) ta=t; else te=t; }
00316
00317 t = (sizeX-1-ppos.x)/dz.x;
00318 ty = ppos.y + t*dz.y;
00319 tz = ppos.z + t*dz.z;
00320 if (ty>=0 && tz>=2 && ty<sizeY-1 && tz<sizeZ-3) { if (ta==9999) ta=t; else te=t; }
00321 }
00322
00323 if (dz.y!=0)
00324 {
00325 t = -ppos.y/dz.y;
00326 tx = ppos.x + t*dz.x;
00327 tz = ppos.z + t*dz.z;
00328 if (tx>=0 && tz>=2 && tx<sizeX-1 && tz<sizeZ-3) { if (ta==9999) ta=t; else te=t; }
00329
00330 t = (sizeY-1-ppos.y)/dz.y;
00331 tx = ppos.x + t*dz.x;
00332 tz = ppos.z + t*dz.z;
00333 if (tx>=0 && tz>=2 && tx<sizeX-1 && tz<sizeZ-3) { if (ta==9999) ta=t; else te=t; }
00334 }
00335
00336 if (dz.z!=0)
00337 {
00338 t = (2-ppos.z)/dz.z;
00339 tx = ppos.x + t*dz.x;
00340 ty = ppos.y + t*dz.y;
00341 if (tx>=0 && ty>=0 && tx<sizeX-1 && ty<sizeY-1) { if (ta==9999) ta=t; else te=t; }
00342
00343 t = (sizeZ-3-ppos.z)/dz.z;
00344 tx = ppos.x + t*dz.x;
00345 ty = ppos.y + t*dz.y;
00346 if (tx>=0 && ty>=0 && tx<sizeX-1 && ty<sizeY-1) { if (ta==9999) ta=t; else te=t; }
00347 }
00348
00349 if (ta>te) {t=ta; ta=te; te=t;}
00350
00351 if (te==9999)
00352 {
00353 transparentview[k].r=transparentview[k].b=transparentview[k].g = 0;
00354 }
00355 else
00356 {
00357 value = 0; ita = (int)ta+512; ite = (int)te+512-2;
00358 alphasum = 1.0;fr = 0.0; fg = 0.0; fb = 0.0;
00359 for (j=ta; j<te && alphasum>trlimit; j = j + 1.0)
00360 {
00361
00362 pfx = (ppos.x) + j * dz.x;
00363 pfy = (ppos.y) + j * dz.y;
00364 pfz = (ppos.z) + j * dz.z;
00365
00366
00367
00368
00369
00370 px = (int)pfx;
00371 py = (int)pfy;
00372 pz = (int)pfz;
00373 if (pz>=sizeZ) {pz=sizeZ-1;}
00374 aktpos = pagesize*pz + rowsize*py + px;
00375 if (trilinear->Checked)
00376 {
00377 sx = pfx-px;
00378 sy = pfy-py;
00379 sz = pfz-pz;
00380 s1x = 1-sx;
00381 s1y = 1-sy;
00382 value1 = (float)data[aktpos]*s1x + (float)data[aktpos+1]*sx;
00383 value2 = (float)data[aktpos+rowsize]*s1x + (float)data[aktpos+rowsize+1]*sx;
00384 value3 = (float)data[aktpos+pagesize+rowsize]*s1x + (float)data[aktpos+pagesize+rowsize+1]*sx;
00385 value4 = (float)data[aktpos+pagesize]*s1x + (float)data[aktpos+pagesize+1]*sx;
00386 value11 = value1*(s1y) + value2*(sy);
00387 value22 = value4*(s1y) + value3*(sy);
00388 value = (int)(value11*(1-sz) + value22*(sz));
00389 }
00390 else
00391 {
00392 value = data[pagesize*pz + rowsize*py + px];
00393 }
00394
00395 if (trilinear->Checked)
00396 {sx = fabs(pfx-(float)px);
00397 sy = fabs(pfy-(float)py);
00398 sz = fabs(pfz-(float)pz);
00399 s1x = (float)1-sx;
00400 value1 = (float)color[aktpos].a*s1x + (float)color[aktpos+1].a*sx;
00401 value2 = (float)color[aktpos+rowsize].a*s1x + (float)color[aktpos+rowsize+1].a*sx;
00402 value3 = (float)color[aktpos+pagesize+rowsize].a*s1x + (float)color[aktpos+pagesize+rowsize+1].a*sx;
00403 value4 = (float)color[aktpos+pagesize].a*s1x + (float)color[aktpos+pagesize+1].a*sx;
00404 value11 = value1*(1-sy) + value2*(sy);
00405 value22 = value4*(1-sy) + value3*(sy);
00406 alpha=(float)((value11*(1-sz) + value22*(sz))/255);
00407
00408
00409
00410 if (alpha>0.0)
00411 {
00412 value1 = (float)color[aktpos].r*s1x + (float)color[aktpos+1].r*sx;
00413 value2 = (float)color[aktpos+rowsize].r*s1x + (float)color[aktpos+rowsize+1].r*sx;
00414 value3 = (float)color[aktpos+pagesize+rowsize].r*s1x + (float)color[aktpos+pagesize+rowsize+1].r*sx;
00415 value4 = (float)color[aktpos+pagesize].r*s1x + (float)color[aktpos+pagesize+1].r*sx;
00416 value11 = value1*(1-sy) + value2*(sy);
00417 value22 = value4*(1-sy) + value3*(sy);
00418 valcr=((value11*(1-sz) + value22*(sz)));
00419
00420
00421 value1 = (float)color[aktpos].g*s1x + (float)color[aktpos+1].g*sx;
00422 value2 = (float)color[aktpos+rowsize].g*s1x + (float)color[aktpos+rowsize+1].g*sx;
00423 value3 = (float)color[aktpos+pagesize+rowsize].g*s1x + (float)color[aktpos+pagesize+rowsize+1].g*sx;
00424 value4 = (float)color[aktpos+pagesize].g*s1x + (float)color[aktpos+pagesize+1].g*sx;
00425 value11 = value1*(1-sy) + value2*(sy);
00426 value22 = value4*(1-sy) + value3*(sy);
00427 valcg=((value11*(1-sz) + value22*(sz)));
00428
00429
00430 value1 = (float)color[aktpos].b*s1x + (float)color[aktpos+1].b*sx;
00431 value2 = (float)color[aktpos+rowsize].b*s1x + (float)color[aktpos+rowsize+1].b*sx;
00432 value3 = (float)color[aktpos+pagesize+rowsize].b*s1x + (float)color[aktpos+pagesize+rowsize+1].b*sx;
00433 value4 = (float)color[aktpos+pagesize].b*s1x + (float)color[aktpos+pagesize+1].b*sx;
00434 value11 = value1*(1-sy) + value2*(sy);
00435 value22 = value4*(1-sy) + value3*(sy);
00436 valcb=((value11*(1-sz) + value22*(sz)));
00437
00438
00439 value1 = (float)gradient[aktpos].y*s1x + (float)gradient[aktpos+1].y*sx;
00440 value2 = (float)gradient[aktpos+rowsize].y*s1x + (float)gradient[aktpos+rowsize+1].y*sx;
00441 value3 = (float)gradient[aktpos+pagesize+rowsize].y*s1x + (float)gradient[aktpos+pagesize+rowsize+1].y*sx;
00442 value4 = (float)gradient[aktpos+pagesize].y*s1x + (float)gradient[aktpos+pagesize+1].y*sx;
00443 value11 = value1*(1-sy) + value2*(sy);
00444 value22 = value4*(1-sy) + value3*(sy);
00445 valgy=((value11*(1-sz) + value22*(sz)));
00446
00447 value1 = (float)gradient[aktpos].x*s1x + (float)gradient[aktpos+1].x*sx;
00448 value2 = (float)gradient[aktpos+rowsize].x*s1x + (float)gradient[aktpos+rowsize+1].x*sx;
00449 value3 = (float)gradient[aktpos+pagesize+rowsize].x*s1x + (float)gradient[aktpos+pagesize+rowsize+1].x*sx;
00450 value4 = (float)gradient[aktpos+pagesize].x*s1x + (float)gradient[aktpos+pagesize+1].x*sx;
00451 value11 = value1*(1-sy) + value2*(sy);
00452 value22 = value4*(1-sy) + value3*(sy);
00453 valgx=((value11*(1-sz) + value22*(sz)));
00454
00455 value1 = (float)gradient[aktpos].z*s1x + (float)gradient[aktpos+1].z*sx;
00456 value2 = (float)gradient[aktpos+rowsize].z*s1x + (float)gradient[aktpos+rowsize+1].z*sx;
00457 value3 = (float)gradient[aktpos+pagesize+rowsize].z*s1x + (float)gradient[aktpos+pagesize+rowsize+1].z*sx;
00458 value4 = (float)gradient[aktpos+pagesize].z*s1x + (float)gradient[aktpos+pagesize+1].z*sx;
00459 value11 = value1*(1-sy) + value2*(sy);
00460 value22 = value4*(1-sy) + value3*(sy);
00461 valgz=((value11*(1-sz) + value22*(sz)));
00462
00463 valsh = fabs(valgx*lx+valgy*ly+valgz*lz);
00464 if (valsh>1) {valsh=1.0;}
00465 if (valsh<0) {valsh=0.0;}
00466 ac=_fm_acos(valsh);
00467 if (ac<0) {ac=0;}
00468 if (ac>pih) {ac=pih;}
00469 ac = 1-(ac/pih);
00470
00471 if (highlights->Checked) {
00472 valsh = valsh*valsh;
00473 valsh = valsh*valsh;
00474 valsh = valsh*valsh;
00475 valsh = valsh*valsh;
00476 valsh = valsh*valsh;
00477
00478 ac2 = (float)255*valsh;
00479
00480
00481 fr = fr + (float)((alphasum) * (alpha) * ac * (valcr+ac2));
00482 fg = fg + (float)((alphasum) * (alpha) * ac * (valcg+ac2));
00483 fb = fb + (float)((alphasum) * (alpha) * ac * (valcb+ac2));
00484 }
00485 else {
00486 fr = fr + (float)((alphasum) * (alpha) * ac * valcr);
00487 fg = fg + (float)((alphasum) * (alpha) * ac * valcg);
00488 fb = fb + (float)((alphasum) * (alpha) * ac * valcb);
00489 }
00490
00491 alphasum = alphasum * (1-alpha);
00492 }
00493 }
00494 else
00495 {
00496 alpha = (float)color[aktpos].a/255;
00497
00498 if (alpha>0.0)
00499 {valsh = fabs(gradient[pagesize*pz + rowsize*py + px].x*lx+gradient[pagesize*pz + rowsize*py + px].y*ly+gradient[pagesize*pz + rowsize*py + px].z*lz);
00500 if (valsh>1) {valsh=1.0;}
00501 if (valsh<0) {valsh=0.0;}
00502 ac=_fm_acos(valsh);
00503 if (ac<0) {ac=0;}
00504 if (ac>pih) {ac=pih;}
00505 ac = 1-(ac/pih);
00506
00507 if (highlights->Checked) {
00508 valsh = valsh*valsh;
00509 valsh = valsh*valsh;
00510 valsh = valsh*valsh;
00511 valsh = valsh*valsh;
00512 valsh = valsh*valsh;
00513 valsh = valsh*valsh;
00514 ac2 = 255*valsh;
00515
00516
00517 fr = fr + (float)((alphasum) * (alpha) * ac * (color[aktpos].r+ac2));
00518 fg = fg + (float)((alphasum) * (alpha) * ac * (color[aktpos].g+ac2));
00519 fb = fb + (float)((alphasum) * (alpha) * ac * (color[aktpos].b+ac2));
00520 }
00521 else {
00522 fr = fr + (float)((alphasum) * (alpha) * ac * color[aktpos].r);
00523 fg = fg + (float)((alphasum) * (alpha) * ac * color[aktpos].g);
00524 fb = fb + (float)((alphasum) * (alpha) * ac * color[aktpos].b);
00525 }
00526
00527 alphasum = alphasum * (1-alpha);
00528 }
00529 }
00530 }
00531 if (alphasum>trlimit)
00532 {
00533
00534
00535
00536 }
00537 if (fr>255) {fr=255;}
00538 if (fg>255) {fg=255;}
00539 if (fb>255) {fb=255;}
00540 transparentview[k].r= (unsigned char)fr;
00541 transparentview[k].g= (unsigned char)fg;
00542 transparentview[k].b= (unsigned char)fb;
00543 }
00544
00545 k++;
00546 }
00547 }
00548 FrameForm->StatusProgress->Visible = false;
00549 }
00550
00551
00552 void __fastcall TTransparentForm::FormMouseDown(TObject *Sender,
00553 TMouseButton Button, TShiftState Shift, int X, int Y)
00554 {
00555 mdown=true;
00556 ox = X;
00557 oy = Y;
00558 }
00559
00560
00561 void __fastcall TTransparentForm::FormMouseMove(TObject *Sender,
00562 TShiftState Shift, int X, int Y)
00563 {
00564 if (mdown)
00565 {
00566 mrotx -= (Y-oy);
00567 mroty -= (X-ox);
00568 if (mrotx<0) mrotx += 360;
00569 if (mrotx>360) mrotx -= 360;
00570 if (mroty<0) mroty += 360;
00571 if (mroty>360) mroty -= 360;
00572
00573 if (arepaint->Checked) {RayCast(); PaintGL(); }
00574 txrot->Text = IntToStr(mrotx);
00575 tzrot->Text = IntToStr(mroty);
00576 ox = X;
00577 oy = Y;
00578 }
00579
00580 }
00581
00582
00583 void __fastcall TTransparentForm::FormMouseUp(TObject *Sender,
00584 TMouseButton Button, TShiftState Shift, int X, int Y)
00585 {
00586 mdown=false;
00587 RayCast();
00588 PaintGL();
00589
00590 }
00591
00592
00593 void __fastcall TTransparentForm::autoresClick(TObject *Sender)
00594 {
00595 if (autores->Checked==true)
00596 {
00597 ResTrackBar->Enabled=false;
00598 textx->Enabled=false;
00599 Label2->Enabled=false;
00600 texty->Enabled=false;
00601 }
00602 else
00603 {
00604 ResTrackBar->Enabled=true;
00605 textx->Enabled=true;
00606 Label2->Enabled=true;
00607 texty->Enabled=true;
00608 }
00609 if (arepaint->Checked) {RayCast();PaintGL();}
00610
00611 }
00612
00613
00614 void __fastcall TTransparentForm::trilinearClick(TObject *Sender)
00615 {
00616 if (arepaint->Checked) {RayCast();PaintGL();}
00617 }
00618
00619
00620 void __fastcall TTransparentForm::ResTrackBarChange(TObject *Sender)
00621 {
00622 switch (ResTrackBar->Position)
00623 {
00624 case 1: textx->Caption = "32"; texty->Caption = "32"; break;
00625 case 2: textx->Caption = "64"; texty->Caption = "64"; break;
00626 case 3: textx->Caption = "128"; texty->Caption = "128"; break;
00627 case 4: textx->Caption = "256"; texty->Caption = "256"; break;
00628 case 5: textx->Caption = "512"; texty->Caption = "512"; break;
00629 case 6: textx->Caption = "1024"; texty->Caption = "1024";
00630 }
00631 if (arepaint->Checked) {RayCast();PaintGL();}
00632
00633 }
00634
00635