#include <raycaster.h>
Inheritance diagram for Perspective:

Public Methods | |
| Perspective () | |
| ~Perspective () | |
| bool | Initialize (VECTOR eye, float dist, int width, int height, float steplength, Data *data, Transfunc *tf) |
| bool | RotateX (float alpha) |
| bool | RotateY (float alpha) |
| bool | RotateZ (float alpha) |
| bool | Raycast () |
Private Attributes | |
| VECTOR | m_eye |
| float | m_dist |
|
|
Definition at line 403 of file raycaster.cpp. References m_dist, Raycaster::m_dOwnType, m_eye, and PERSPECTIVE.
00403 {
00404 m_eye = VECTOR(0,0,-10);
00405 m_dist = 0;
00406
00407 m_dOwnType = PERSPECTIVE;
00408 }
|
|
|
Definition at line 410 of file raycaster.cpp.
00410 {}
|
|
||||||||||||||||||||||||||||||||
|
Definition at line 413 of file raycaster.cpp. References Data::GetXDim(), Data::GetYDim(), Data::GetZDim(), Raycaster::m_data, m_dist, m_eye, Raycaster::m_height, Raycaster::m_steplength, Raycaster::m_tf, Raycaster::m_viewingplane, Raycaster::m_width, VECTOR::normalize(), and Raycaster::Zoom().
00413 {
00414 m_eye = eye;
00415 m_data = data;
00416 m_tf = tf;
00417 m_width = width;
00418 m_height = height;
00419 m_steplength = steplength;
00420 m_dist = dist;
00421 int maxX = m_data->GetXDim()-1;
00422 int maxY = m_data->GetYDim()-1;
00423 int maxZ = m_data->GetZDim()-1;
00424 VECTOR viewingplanenormal = VECTOR(maxX/2,maxY/2,maxZ/2)-m_eye;
00425 viewingplanenormal.normalize();
00426
00427 VECTOR viewingplanepos = m_eye + m_dist * viewingplanenormal;
00428 m_viewingplane = new Plane(viewingplanenormal,viewingplanepos);
00429
00430 Zoom(m_zoom);
00431
00432 if(m_viewingplane == NULL) return false;
00433 if(m_data == NULL) return false;
00434 if(m_tf == NULL) return false;
00435 return true;
00436 }
|
|
|
Reimplemented from Raycaster. Definition at line 440 of file raycaster.cpp. References Ray::CastNext(), FH, Ray::GetCurrentColor(), Ray::Initialize(), Raycaster::m_data, m_eye, Raycaster::m_height, Raycaster::m_image, Raycaster::m_raytype, Raycaster::m_viewingplane, Raycaster::m_width, Raycaster::m_xdir, Raycaster::m_ydir, MI, NN, Plane::point, Raycaster::ready, Ray::Reset(), Ray::SetLight(), Ray::SetPosDir(), Data::SetPreCalc(), Ray::SetViewingCondition(), STANDARD, Color::toRGB(), TRI, and XRAY.
00440 {
00441
00442 CWnd* pFrame = AfxGetMainWnd();
00443
00444
00445 m_data->SetPreCalc(m_precalc);
00446 m_image = new rgb[m_width*m_height];
00447
00448 VECTOR pos = m_viewingplane->point-m_width/2*m_xdir-m_height/2*m_ydir;
00449 VECTOR backup = pos;
00450
00451 VECTOR direction;
00452
00453 int loadSize = (m_height * m_width) / 100;
00454 int counter = loadSize / 100;
00455 int progPos = 0;
00456
00457
00458
00459 Ray *r;
00460
00461 switch (m_rendermode) {
00462 case STANDARD:
00463 if (m_raytype == NN)
00464 r = new Ray();
00465 else if (m_raytype == TRI)
00466 r = new Trilinear();
00467 break;
00468 case FH:
00469 if (m_raytype == NN) {
00470 r = new FirstHitNN();
00471 ((FirstHitNN *)r)->SetTreshold(m_treshold);
00472 }
00473 else if (m_raytype == TRI) {
00474 r = new FirstHitTRI();
00475 ((FirstHitTRI *)r)->SetTreshold(m_treshold);
00476 }
00477 break;
00478 case MI:
00479 if (m_raytype == NN)
00480 r = new MaxIntensityNN();
00481 else if (m_raytype == TRI)
00482 r = new MaxIntensityTRI();
00483 break;
00484 case XRAY:
00485 if (m_raytype == NN)
00486 r = new XRayNN();
00487 else if (m_raytype == TRI)
00488 r = new XRayTRI();
00489 break;
00490 }
00491
00492 r->SetViewingCondition(m_lightpos, m_ambient, m_diffuse, m_specular, m_highlight);
00493 r->Initialize(m_background,m_background,m_steplength,m_viewingplane,m_data,m_tf);
00494 r->SetLight(m_light);
00495
00496 for(int j = 0; j < m_height; j++) {
00497 for(int i = 0; i < m_width; i++) {
00498 r->Reset();
00499 direction = pos-m_eye;
00500 r->SetPosDir(m_eye,direction);
00501 r->CastNext();
00502 m_image[j*m_width+i] = r->GetCurrentColor().toRGB();
00503
00504
00505 pos += m_xdir;
00506
00507 if ((counter-- <= 0) && (progPos < 100)) {
00508 counter = loadSize;
00509 pFrame->SendMessage(MYWM_PROGRESS, progPos++);
00510 }
00511
00512
00513 } // inner for
00514 pos = backup;
00515 pos += j*m_ydir;
00516
00517 pFrame->SendMessage(MYWM_PROGRESS, 0);
00518
00519 }
00520
00521
00522
00523
00524
00525 /*
00526 Ray *r;
00527 Trilinear *tri;
00528 FirstHitNN *fhnn;
00529 FirstHitTRI *fhtri;
00530 MaxIntensityNN *minn;
00531 MaxIntensityTRI *mitri;
00532 XRayNN *xraynn;
00533 XRayTRI *xraytri;
00534
00535 if(m_raytype == NN && m_rendermode == STANDARD) {
00536 r = new Ray();
00537 r->SetViewingCondition(m_lightpos, m_ambient, m_diffuse, m_specular, m_highlight);
00538 r->Initialize(m_background,m_background,m_steplength,m_viewingplane,m_data,m_tf);
00539 r->SetLight(m_light);
00540 }
00541 if(m_raytype == TRI && m_rendermode == STANDARD) {
00542 tri = new Trilinear();
00543 tri->SetViewingCondition(m_lightpos, m_ambient, m_diffuse, m_specular, m_highlight);
00544 tri->Initialize(m_background,m_background,m_steplength,m_viewingplane,m_data,m_tf);
00545 tri->SetLight(m_light);
00546 }
00547 if(m_raytype == NN && m_rendermode == FH) {
00548 fhnn = new FirstHitNN();
00549 fhnn->SetViewingCondition(m_lightpos, m_ambient, m_diffuse, m_specular, m_highlight);
00550 fhnn->SetTreshold(m_treshold);
00551 fhnn->Initialize(m_background,m_background,m_steplength,m_viewingplane,m_data,m_tf);
00552 fhnn->SetLight(m_light);
00553 }
00554 if(m_raytype == TRI && m_rendermode == FH) {
00555 fhtri = new FirstHitTRI();
00556 fhtri->SetViewingCondition(m_lightpos, m_ambient, m_diffuse, m_specular, m_highlight);
00557 fhtri->SetTreshold(m_treshold);
00558 fhtri->Initialize(m_background,m_background,m_steplength,m_viewingplane,m_data,m_tf);
00559 fhtri->SetLight(m_light);
00560 }
00561 if(m_raytype == NN && m_rendermode == MI) {
00562 minn = new MaxIntensityNN();
00563 minn->SetViewingCondition(m_lightpos, m_ambient, m_diffuse, m_specular, m_highlight);
00564 minn->Initialize(m_background,m_background,m_steplength,m_viewingplane,m_data,m_tf);
00565 }
00566 if(m_raytype == TRI && m_rendermode == MI) {
00567 mitri = new MaxIntensityTRI();
00568 mitri->SetViewingCondition(m_lightpos, m_ambient, m_diffuse, m_specular, m_highlight);
00569 mitri->Initialize(m_background,m_background,m_steplength,m_viewingplane,m_data,m_tf);
00570 }
00571 if(m_raytype == NN && m_rendermode == XRAY) {
00572 xraynn = new XRayNN();
00573 xraynn->SetViewingCondition(m_lightpos, m_ambient, m_diffuse, m_specular, m_highlight);
00574 xraynn->Initialize(m_background,m_background,m_steplength,m_viewingplane,m_data,m_tf);
00575 }
00576 if(m_raytype == TRI && m_rendermode == XRAY) {
00577 xraytri = new XRayTRI();
00578 xraytri->SetViewingCondition(m_lightpos, m_ambient, m_diffuse, m_specular, m_highlight);
00579 xraytri->Initialize(m_background,m_background,m_steplength,m_viewingplane,m_data,m_tf);
00580 }
00581
00582 for(int j = 0; j < m_height; j++) {
00583 for(int i = 0; i < m_width; i++) {
00584 if(m_raytype == NN && m_rendermode == STANDARD) {
00585 r->Reset();
00586 direction = pos-m_eye;
00587 r->SetPosDir(m_eye,direction);
00588 r->CastNext();
00589 m_image[j*m_width+i] = r->GetCurrentColor().toRGB();
00590 }
00591 if(m_raytype == TRI && m_rendermode == STANDARD) {
00592 tri->Reset();
00593 direction = pos-m_eye;
00594 tri->SetPosDir(m_eye,direction);
00595 tri->CastNext();
00596 m_image[j*m_width+i] = tri->GetCurrentColor().toRGB();
00597 }
00598 if(m_raytype == NN && m_rendermode == FH) {
00599 fhnn->Reset();
00600 direction = pos-m_eye;
00601 fhnn->SetPosDir(m_eye,direction);
00602 fhnn->CastNext();
00603 m_image[j*m_width+i] = fhnn->GetCurrentColor().toRGB();
00604 }
00605 if(m_raytype == TRI && m_rendermode == FH) {
00606 fhtri->Reset();
00607 direction = pos-m_eye;
00608 fhtri->SetPosDir(m_eye,direction);
00609 fhtri->CastNext();
00610 m_image[j*m_width+i] = fhtri->GetCurrentColor().toRGB();
00611 }
00612 if(m_raytype == NN && m_rendermode == MI) {
00613 minn->Reset();
00614 direction = pos-m_eye;
00615 minn->SetPosDir(m_eye,direction);
00616 minn->CastNext();
00617 m_image[j*m_width+i] = minn->GetCurrentColor().toRGB();
00618 }
00619 if(m_raytype == TRI && m_rendermode == MI) {
00620 mitri->Reset();
00621 direction = pos-m_eye;
00622 mitri->SetPosDir(m_eye,direction);
00623 mitri->CastNext();
00624 m_image[j*m_width+i] = mitri->GetCurrentColor().toRGB();
00625 }
00626 if(m_raytype == NN && m_rendermode == XRAY) {
00627 xraynn->Reset();
00628 direction = pos-m_eye;
00629 xraynn->SetPosDir(m_eye,direction);
00630 xraynn->CastNext();
00631 m_image[j*m_width+i] = xraynn->GetCurrentColor().toRGB();
00632 }
00633 if(m_raytype == TRI && m_rendermode == XRAY) {
00634 xraytri->Reset();
00635 direction = pos-m_eye;
00636 xraytri->SetPosDir(m_eye,direction);
00637 xraytri->CastNext();
00638 m_image[j*m_width+i] = xraytri->GetCurrentColor().toRGB();
00639 }
00640
00641
00642 pos += m_xdir;
00643
00644
00645 if ((counter-- <= 0) && (progPos < 100)) {
00646 counter = loadSize;
00647 pFrame->SendMessage(MYWM_PROGRESS, progPos++);
00648 }
00649
00650
00651 } // inner for
00652 pos = backup;
00653 pos += j*m_ydir;
00654
00655 pFrame->SendMessage(MYWM_PROGRESS, 0);
00656
00657 }
00658 */
00659 if (r)
00660 delete r;
00661
00662 ready = true;
00663 return true;
00664 }
|
|
|
Reimplemented from Raycaster. Definition at line 668 of file raycaster.cpp. References Data::GetXDim(), Data::GetYDim(), Data::GetZDim(), Raycaster::m_data, m_dist, m_eye, Raycaster::m_viewingplane, Plane::normal, VECTOR::normalize(), Plane::point, Matrix4x4::rotateX(), and Raycaster::SetViewingMatrix().
00668 {
00669 int maxX = m_data->GetXDim()-1;
00670 int maxY = m_data->GetYDim()-1;
00671 int maxZ = m_data->GetZDim()-1;
00672 Matrix4x4 rotmat;
00673 rotmat.rotateX(-alpha);
00674 m_eye = rotmat*m_eye;
00675 m_viewingplane->normal = VECTOR(maxX/2,maxY/2,maxZ/2)-m_eye;
00676 m_viewingplane->normal.normalize();
00677 m_viewingplane->point = m_eye + m_dist*m_viewingplane->normal;
00678
00679 SetViewingMatrix();
00680 return true;
00681 }
|
|
|
Reimplemented from Raycaster. Definition at line 684 of file raycaster.cpp. References Data::GetXDim(), Data::GetYDim(), Data::GetZDim(), Raycaster::m_data, m_dist, m_eye, Raycaster::m_viewingplane, Plane::normal, VECTOR::normalize(), Plane::point, Matrix4x4::rotateY(), and Raycaster::SetViewingMatrix().
00684 {
00685 int maxX = m_data->GetXDim()-1;
00686 int maxY = m_data->GetYDim()-1;
00687 int maxZ = m_data->GetZDim()-1;
00688 Matrix4x4 rotmat;
00689 rotmat.rotateY(-alpha);
00690 m_eye = rotmat*m_eye;
00691 m_viewingplane->normal = VECTOR(maxX/2,maxY/2,maxZ/2)-m_eye;
00692 m_viewingplane->normal.normalize();
00693 m_viewingplane->point = m_eye + m_dist*m_viewingplane->normal;
00694
00695 SetViewingMatrix();
00696 return true;
00697 }
|
|
|
Reimplemented from Raycaster. Definition at line 700 of file raycaster.cpp. References Data::GetXDim(), Data::GetYDim(), Data::GetZDim(), Raycaster::m_data, m_dist, m_eye, Raycaster::m_viewingplane, Plane::normal, VECTOR::normalize(), Plane::point, Matrix4x4::rotateZ(), and Raycaster::SetViewingMatrix().
00700 {
00701 int maxX = m_data->GetXDim()-1;
00702 int maxY = m_data->GetYDim()-1;
00703 int maxZ = m_data->GetZDim()-1;
00704 Matrix4x4 rotmat;
00705 rotmat.rotateZ(-alpha);
00706 m_eye = rotmat*m_eye;
00707 m_viewingplane->normal = VECTOR(maxX/2,maxY/2,maxZ/2)-m_eye;
00708 m_viewingplane->normal.normalize();
00709 m_viewingplane->point = m_eye + m_dist*m_viewingplane->normal;
00710
00711 SetViewingMatrix();
00712 return true;
00713 } |
|
|
Definition at line 82 of file raycaster.h. Referenced by Initialize(), Perspective(), RotateX(), RotateY(), and RotateZ(). |
|
|
Definition at line 81 of file raycaster.h. Referenced by Initialize(), Perspective(), Raycast(), RotateX(), RotateY(), and RotateZ(). |
1.3-rc2