From d4acfacc3fb2a246efd623b518e3235d273373b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= Date: Wed, 8 Feb 2017 17:04:18 +0100 Subject: [PATCH] Initial commit Code from an old svn, still working --- shaders/shader.frag | 23 + shaders/shader.vert | 6 + shaders/shader3D.frag | 22 + src/BBWindow.cpp | 881 ++++++++++ src/BBWindow.h | 212 +++ src/Billboard.cpp | 696 ++++++++ src/Billboard.h | 273 +++ src/BillboardCloud.cpp | 266 +++ src/BillboardCloud.h | 113 ++ src/Camera.cpp | 226 +++ src/Camera.h | 89 + src/Color.cpp | 18 + src/Color.h | 176 ++ src/Density.cpp | 692 ++++++++ src/Density.h | 199 +++ src/DensityViewer.cpp | 171 ++ src/DensityViewer.h | 75 + src/Entity.cpp | 134 ++ src/Entity.h | 83 + src/Image.cpp | 438 +++++ src/Image.h | 97 + src/Light.cpp | 152 ++ src/Light.h | 84 + src/Material.cpp | 184 ++ src/Material.h | 125 ++ src/Matrix3.cpp | 1557 +++++++++++++++++ src/Matrix3.h | 178 ++ src/Matrix4.cpp | 90 + src/Matrix4.h | 437 +++++ src/Mesh.cpp | 950 ++++++++++ src/Mesh.h | 206 +++ src/ObjectView.cpp | 118 ++ src/OffScreenRendering.cpp | 411 +++++ src/OffScreenRendering.h | 269 +++ src/OpenGL.h | 58 + src/Plane.cpp | 101 ++ src/Plane.h | 45 + src/Quaternion.cpp | 460 +++++ src/Quaternion.h | 126 ++ src/Scene.cpp | 233 +++ src/Scene.h | 145 ++ src/ShadowMap.cpp | 178 ++ src/ShadowMap.h | 104 ++ src/TextureLayer.cpp | 129 ++ src/TextureLayer.h | 76 + src/TgaLoader.cpp | 548 ++++++ src/TgaLoader.h | 96 + src/Timer.h | 64 + src/Transform.cpp | 84 + src/Transform.h | 103 ++ src/Vector3.cpp | 34 + src/Vector3.h | 587 +++++++ src/Viewer.cpp | 382 ++++ src/Viewer.h | 137 ++ src/W_Density.ui | 56 + src/W_Main.ui | 504 ++++++ src/application.qrc | 24 + src/icones/actions/back.png | Bin 0 -> 7028 bytes src/icones/actions/bbc.png | Bin 0 -> 9833 bytes src/icones/actions/billboard.png | Bin 0 -> 10499 bytes src/icones/actions/editcopy.png | Bin 0 -> 9833 bytes src/icones/actions/editcut.png | Bin 0 -> 11591 bytes src/icones/actions/editpaste.png | Bin 0 -> 11856 bytes src/icones/actions/fileprint.png | Bin 0 -> 17340 bytes src/icones/actions/forward.png | Bin 0 -> 7072 bytes src/icones/actions/gohome.png | Bin 0 -> 14580 bytes src/icones/actions/openterm.png | Bin 0 -> 8328 bytes src/icones/actions/reload.png | Bin 0 -> 15054 bytes src/icones/actions/stop.png | Bin 0 -> 15974 bytes src/icones/actions/up.png | Bin 0 -> 6968 bytes src/icones/actions/viewmag+.png | Bin 0 -> 6136 bytes src/icones/actions/viewmag-.png | Bin 0 -> 5826 bytes src/icones/apps/clanbomber.png | Bin 0 -> 15974 bytes src/icones/apps/densite.png | Bin 0 -> 7679 bytes src/icones/apps/gimp.png | Bin 0 -> 10769 bytes src/icones/apps/go.png | Bin 0 -> 15534 bytes src/icones/apps/k3b.png | Bin 0 -> 22565 bytes src/icones/apps/kaddressbook.png | Bin 0 -> 12052 bytes src/icones/apps/kate.png | Bin 0 -> 15096 bytes src/icones/apps/kcontrol.png | Bin 0 -> 15799 bytes src/icones/apps/kedit.png | Bin 0 -> 14305 bytes src/icones/apps/kfind.png | Bin 0 -> 15722 bytes src/icones/apps/kmail.png | Bin 0 -> 23521 bytes src/icones/apps/konsole.png | Bin 0 -> 8328 bytes src/icones/apps/kopete.png | Bin 0 -> 18160 bytes src/icones/apps/kview.png | Bin 0 -> 20739 bytes src/icones/apps/kwrite.png | Bin 0 -> 14374 bytes src/icones/apps/mac.png | Bin 0 -> 12510 bytes src/icones/apps/mozilla.png | Bin 0 -> 22417 bytes src/icones/apps/noatun.png | Bin 0 -> 17790 bytes src/icones/apps/realplayer.png | Bin 0 -> 14558 bytes src/icones/apps/safari1.png | Bin 0 -> 19119 bytes src/icones/apps/safari2.png | Bin 0 -> 21751 bytes src/icones/apps/safari3.png | Bin 0 -> 21354 bytes src/icones/apps/tux.png | Bin 0 -> 17689 bytes src/icones/apps/x.png | Bin 0 -> 11576 bytes src/icones/apps/xapp.png | Bin 0 -> 11576 bytes src/icones/apps/xeyes.png | Bin 0 -> 12244 bytes src/icones/apps/xmms.png | Bin 0 -> 19640 bytes src/icones/bbexit.xpm | 218 +++ src/icones/devices/3floppy_unmount.png | Bin 0 -> 14014 bytes src/icones/devices/bak/bak2/cdrom_unmount.png | Bin 0 -> 22565 bytes .../devices/bak/bak2/cdwriter_unmount.png | Bin 0 -> 20980 bytes src/icones/devices/bak/cdwriter_mount.png | Bin 0 -> 13202 bytes src/icones/devices/bak/cdwriter_unmount.png | Bin 0 -> 12935 bytes src/icones/devices/cdaudio_unmount.png | Bin 0 -> 24670 bytes src/icones/devices/cdrom_unmount.png | Bin 0 -> 23690 bytes src/icones/devices/hdd_unmount.png | Bin 0 -> 12358 bytes src/icones/devices/hdd_unmount_other.png | Bin 0 -> 7909 bytes src/icones/devices/nfs_unmount.png | Bin 0 -> 11689 bytes src/icones/devices/print.png | Bin 0 -> 17340 bytes src/icones/fileopen.xpm | 22 + src/icones/fileprint.xpm | 24 + src/icones/filesave.xpm | 22 + src/icones/filesystems/desktop.png | Bin 0 -> 9970 bytes src/icones/filesystems/exec.png | Bin 0 -> 15434 bytes src/icones/filesystems/folder.png | Bin 0 -> 9230 bytes src/icones/filesystems/folder_home.png | Bin 0 -> 14580 bytes src/icones/meshopen.xpm | 96 + src/icones/meshtexopen.xpm | 292 ++++ src/icones/mimetypes/image.png | Bin 0 -> 10929 bytes src/icones/mimetypes/sound.png | Bin 0 -> 10399 bytes src/icones/mimetypes/txt.png | Bin 0 -> 10019 bytes src/icones/mimetypes/unknown.png | Bin 0 -> 9176 bytes src/icones/splashlogo.png | Bin 0 -> 62466 bytes src/main.cpp | 44 + src/src.pro | 89 + src/textfile.cpp | 68 + src/textfile.h | 10 + templates/cpp | 19 + templates/h | 19 + ter.pro | 2 + 132 files changed, 14850 insertions(+) create mode 100644 shaders/shader.frag create mode 100644 shaders/shader.vert create mode 100644 shaders/shader3D.frag create mode 100644 src/BBWindow.cpp create mode 100644 src/BBWindow.h create mode 100644 src/Billboard.cpp create mode 100644 src/Billboard.h create mode 100644 src/BillboardCloud.cpp create mode 100644 src/BillboardCloud.h create mode 100644 src/Camera.cpp create mode 100644 src/Camera.h create mode 100644 src/Color.cpp create mode 100644 src/Color.h create mode 100644 src/Density.cpp create mode 100644 src/Density.h create mode 100644 src/DensityViewer.cpp create mode 100644 src/DensityViewer.h create mode 100644 src/Entity.cpp create mode 100644 src/Entity.h create mode 100644 src/Image.cpp create mode 100644 src/Image.h create mode 100644 src/Light.cpp create mode 100644 src/Light.h create mode 100644 src/Material.cpp create mode 100644 src/Material.h create mode 100644 src/Matrix3.cpp create mode 100644 src/Matrix3.h create mode 100644 src/Matrix4.cpp create mode 100644 src/Matrix4.h create mode 100644 src/Mesh.cpp create mode 100644 src/Mesh.h create mode 100644 src/ObjectView.cpp create mode 100644 src/OffScreenRendering.cpp create mode 100644 src/OffScreenRendering.h create mode 100644 src/OpenGL.h create mode 100644 src/Plane.cpp create mode 100644 src/Plane.h create mode 100644 src/Quaternion.cpp create mode 100644 src/Quaternion.h create mode 100644 src/Scene.cpp create mode 100644 src/Scene.h create mode 100644 src/ShadowMap.cpp create mode 100644 src/ShadowMap.h create mode 100644 src/TextureLayer.cpp create mode 100644 src/TextureLayer.h create mode 100644 src/TgaLoader.cpp create mode 100644 src/TgaLoader.h create mode 100644 src/Timer.h create mode 100644 src/Transform.cpp create mode 100644 src/Transform.h create mode 100644 src/Vector3.cpp create mode 100644 src/Vector3.h create mode 100644 src/Viewer.cpp create mode 100644 src/Viewer.h create mode 100644 src/W_Density.ui create mode 100644 src/W_Main.ui create mode 100644 src/application.qrc create mode 100644 src/icones/actions/back.png create mode 100644 src/icones/actions/bbc.png create mode 100644 src/icones/actions/billboard.png create mode 100644 src/icones/actions/editcopy.png create mode 100644 src/icones/actions/editcut.png create mode 100644 src/icones/actions/editpaste.png create mode 100644 src/icones/actions/fileprint.png create mode 100644 src/icones/actions/forward.png create mode 100644 src/icones/actions/gohome.png create mode 100644 src/icones/actions/openterm.png create mode 100644 src/icones/actions/reload.png create mode 100644 src/icones/actions/stop.png create mode 100644 src/icones/actions/up.png create mode 100644 src/icones/actions/viewmag+.png create mode 100644 src/icones/actions/viewmag-.png create mode 100644 src/icones/apps/clanbomber.png create mode 100644 src/icones/apps/densite.png create mode 100644 src/icones/apps/gimp.png create mode 100644 src/icones/apps/go.png create mode 100644 src/icones/apps/k3b.png create mode 100644 src/icones/apps/kaddressbook.png create mode 100644 src/icones/apps/kate.png create mode 100644 src/icones/apps/kcontrol.png create mode 100644 src/icones/apps/kedit.png create mode 100644 src/icones/apps/kfind.png create mode 100644 src/icones/apps/kmail.png create mode 100644 src/icones/apps/konsole.png create mode 100644 src/icones/apps/kopete.png create mode 100644 src/icones/apps/kview.png create mode 100644 src/icones/apps/kwrite.png create mode 100644 src/icones/apps/mac.png create mode 100644 src/icones/apps/mozilla.png create mode 100644 src/icones/apps/noatun.png create mode 100644 src/icones/apps/realplayer.png create mode 100644 src/icones/apps/safari1.png create mode 100644 src/icones/apps/safari2.png create mode 100644 src/icones/apps/safari3.png create mode 100644 src/icones/apps/tux.png create mode 100644 src/icones/apps/x.png create mode 100644 src/icones/apps/xapp.png create mode 100644 src/icones/apps/xeyes.png create mode 100644 src/icones/apps/xmms.png create mode 100644 src/icones/bbexit.xpm create mode 100644 src/icones/devices/3floppy_unmount.png create mode 100644 src/icones/devices/bak/bak2/cdrom_unmount.png create mode 100644 src/icones/devices/bak/bak2/cdwriter_unmount.png create mode 100644 src/icones/devices/bak/cdwriter_mount.png create mode 100644 src/icones/devices/bak/cdwriter_unmount.png create mode 100644 src/icones/devices/cdaudio_unmount.png create mode 100644 src/icones/devices/cdrom_unmount.png create mode 100644 src/icones/devices/hdd_unmount.png create mode 100644 src/icones/devices/hdd_unmount_other.png create mode 100644 src/icones/devices/nfs_unmount.png create mode 100644 src/icones/devices/print.png create mode 100644 src/icones/fileopen.xpm create mode 100644 src/icones/fileprint.xpm create mode 100644 src/icones/filesave.xpm create mode 100644 src/icones/filesystems/desktop.png create mode 100644 src/icones/filesystems/exec.png create mode 100644 src/icones/filesystems/folder.png create mode 100644 src/icones/filesystems/folder_home.png create mode 100644 src/icones/meshopen.xpm create mode 100644 src/icones/meshtexopen.xpm create mode 100644 src/icones/mimetypes/image.png create mode 100644 src/icones/mimetypes/sound.png create mode 100644 src/icones/mimetypes/txt.png create mode 100644 src/icones/mimetypes/unknown.png create mode 100644 src/icones/splashlogo.png create mode 100644 src/main.cpp create mode 100644 src/src.pro create mode 100644 src/textfile.cpp create mode 100644 src/textfile.h create mode 100644 templates/cpp create mode 100644 templates/h create mode 100644 ter.pro diff --git a/shaders/shader.frag b/shaders/shader.frag new file mode 100644 index 0000000..3932671 --- /dev/null +++ b/shaders/shader.frag @@ -0,0 +1,23 @@ +//varying vec3 normal, lightDir; +uniform sampler2D tex; + +void main() +{ + vec4 color; + vec4 texel; + float alpha,r,g,b ; + + texel = texture2D(tex,gl_TexCoord[0].st); + alpha = texel.a; + + r = ((-(alpha-1.0)*(alpha-1.0)/0.1)+1.0); + g = (5.0*(-((alpha-0.5)*(alpha-0.5))/0.4)+1.0); + b = ((-(alpha * alpha)/0.15)+1.0); + + if (r<0) r=0 ; + if (g<0) g=0 ; + if (b<0) b=0 ; + + color = vec4(r,g,b,alpha); + gl_FragColor = color; +} diff --git a/shaders/shader.vert b/shaders/shader.vert new file mode 100644 index 0000000..9577eed --- /dev/null +++ b/shaders/shader.vert @@ -0,0 +1,6 @@ + +void main() +{ + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = ftransform(); +} diff --git a/shaders/shader3D.frag b/shaders/shader3D.frag new file mode 100644 index 0000000..e46d34c --- /dev/null +++ b/shaders/shader3D.frag @@ -0,0 +1,22 @@ +uniform sampler3D tex; + +void main() +{ + vec4 color; + vec4 texel; + float alpha,r,g,b ; + + texel = texture3D(tex,gl_TexCoord[0].xyz); + alpha = texel.a; + + r = ((-(alpha-1.0)*(alpha-1.0)/0.1)+1.0); + g = (5.0*(-((alpha-0.5)*(alpha-0.5))/0.4)+1.0); + b = ((-(alpha * alpha)/0.15)+1.0); + + if (r<0) r=0 ; + if (g<0) g=0 ; + if (b<0) b=0 ; + + color = vec4(r,g,b,alpha); + gl_FragColor = color; +} \ No newline at end of file diff --git a/src/BBWindow.cpp b/src/BBWindow.cpp new file mode 100644 index 0000000..2003905 --- /dev/null +++ b/src/BBWindow.cpp @@ -0,0 +1,881 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "BBWindow.h" + +BBWindow::BBWindow() + :QMainWindow(), mShowFps(false), mDensityWidget(NULL), numScene(1),isBCC(false) +{ + ui.setupUi(this); + + // Init QGL + QGLFormat format; + format.setDoubleBuffer(true); + format.setDepth(true); + format.setRgba(true); + format.setAlpha(true); + format.setStencil(true); + format.setStereo(false); + QGLFormat::setDefaultFormat(format); + + // Chargement viewer en fenètre Main + mViewer = new Viewer(this); + mViewer->setFocus(); + setCentralWidget(mViewer); + // Attachement d'une scène au viewer + mScene = new Scene(); + mScene2 = new Scene(); + + mViewer->attachScene(mScene, mScene2); + + // /!\ Ne Pas Modifier la fenètre ICI ! Utiliser QtDesigner et le .ui ! + // Action de la fenêtre Main + connect(mViewer, SIGNAL(glInitialized()), this, SLOT(createScene())); + + // Fichier + connect(ui.actionCharger_un_Maillage, SIGNAL(triggered()), this, SLOT(loadObjectDialog())); + connect(ui.actionChargerTexture,SIGNAL(triggered()), this, SLOT(loadTextureDialog())); + connect(ui.actionSauvegarder,SIGNAL(triggered()), this, SLOT(SaveAs())); + connect(ui.actionQuit, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); + + // Affichage + connect(ui.actionGauche,SIGNAL(triggered()), this, SLOT(selectViewPortLeft())); + connect(ui.actionDroite,SIGNAL(triggered()), this, SLOT(selectViewPortRight())); + + connect(ui.actionMode_Normal,SIGNAL(triggered()), this, SLOT(toggleNormal())); + connect(ui.actionMode_SplitScreen,SIGNAL(triggered()), this, SLOT(toggleSplitScreen())); + connect(ui.actionMode_Fusion,SIGNAL(triggered()), this, SLOT(toggleFusion())); + + connect(ui.actionAfficher_Cacher_le_Rep_re,SIGNAL(triggered()), this, SLOT(viewerAxis())); + connect(ui.actionWireMode,SIGNAL(triggered()), this, SLOT(viewerWireMode())); + connect(ui.actionVider_la_Sc_ne, SIGNAL(triggered()), this, SLOT(fileCleanScene())); + connect(ui.actionReset_Camera, SIGNAL(triggered()), this, SLOT(toolCamReset())); + connect(ui.actionSelecteur, SIGNAL(triggered()), this, SLOT(toogleBorder())); + + connect(ui.actionToggleFPS,SIGNAL(triggered()), this, SLOT(toggleShowFps())); + connect(ui.actionInformation_Objet,SIGNAL(triggered()), this, SLOT(toggleInfo())); + + // Densité + connect(ui.actionCharger_la_Densite,SIGNAL(triggered()), this, SLOT(showDensity())); + + // Billboard + connect(ui.actionBillboard,SIGNAL(triggered()), this, SLOT(BB())); + connect(ui.actionBillboardCloud,SIGNAL(triggered()), this, SLOT(BBC())); + +}; + +void BBWindow::closeEvent(QCloseEvent *event) +{ + event->accept(); +#ifdef DEBUG + std::cout << "Quitter" << std::endl ; +#endif +} + +void BBWindow::createScene (void) +{ + Light *pLight; + Light *pLight2; + Light *pLight3; + + GLenum err = glewInit(); + if (GLEW_OK != err) + { + std::cout << "Erreur !! GlewInit : " << glewGetErrorString(err) << std::endl; + } else { + // On lance la suite ... + std::cout << "Utilisation de GLEW Version: " << glewGetString (GLEW_VERSION) << std::endl; + pLight = new Light (Light::LT_POINT); + pLight->setPosition (Vector3 (3., 5.,5.)); + pLight->setColor (Color (1.,1.,1.)); + + pLight2 = new Light (Light::LT_POINT); + pLight2->setPosition (Vector3 (3., -5.,-5.)); + pLight2->setColor (Color (1.,1.,1.)); + + pLight3 = new Light (Light::LT_POINT); + pLight3->setPosition (Vector3 (-5., 0.,0.)); + pLight3->setColor (Color (1.,1.,1.)); + + mScene->add (pLight, false); + mScene->add (pLight2, false); + mScene->add (pLight3, false); + + //// Scene deuxieme viewport ///// + mScene2->add (pLight, false); + mScene2->add (pLight2, false); + mScene2->add (pLight3, false); + ////////////////////////////////// +#ifdef DEBUG + std::cout << "Creation de la Scene : OK !" << std::endl ; +#endif + } +} + +void BBWindow::loadObjectDialog() +{ + QString fileName = QFileDialog::getOpenFileName(this, + "Choisissez un Objet à Charger", + "./../../branches/Objets", + tr("Tous les fichiers objet (*.3ds *.gts *.obj *.off *.ply *.bb *.bbc);;3D Studio files (*.3ds);;GNU Triangulated Surface (*.gts);;WaveFront model file (*.obj);;DEC Object File Format (*.off);;Stanford triangle format (*.ply);; ;;Tous les types Billboard (*.bb *.bbc);;Billboard (*.bb);;Billboard Cloud (*.bbc)"), 0,0); + if ( !fileName.isEmpty() ) + loadObject( fileName ); + else + ui.statusbar->showMessage( tr("Chargement annulé"), 0 ); +} + +void BBWindow::loadTextureDialog() +{ + bool ok= true; + if(numScene==1 && !mScene->isTextureEnable()) ok = false; + if(numScene==2 && !mScene2->isTextureEnable()) ok = false; + + if(ok){ + QString textureName = QFileDialog::getOpenFileName(this, + "Choisissez une texture à charger", + "../../branches/Objets/", + tr("Tous les fichiers image (*.bmp *.jpeg *.jpg *.png *.tga);; ;;Joint Photographic Experts Group (*.jpg *.jpeg);;PNG (*.png);; Windows BITMAP(*.bmp) ;; Truevision Targa (*.tga)"), 0,0); + if ( !textureName.isEmpty() ) + loadTexture( textureName ); + else + ui.statusbar->showMessage( tr("Chargement annulé"), 0 ); + } + else ui.statusbar->showMessage( tr("Chargement Impossible : Pas d'objet valide à texturer dans la scène."), 2000 ); +} + +void BBWindow::loadObject( const QString &fileName) +{ + timer(true); + Entity *pEntity; + Transform t; + Material *pMat; + numScene = mViewer->getViewport(); + + if(numScene==2 && mScene->isEmpty()) { + selectViewPortLeft(); + numScene=1; + } + + int mode =1; + if (ui.actionMode_Normal->isChecked() & numScene==1) mode =0; + if (ui.actionMode_Fusion->isChecked() & numScene==1) mode =0; + if (ui.actionMode_Fusion->isChecked() & numScene==2) mode =2; + + QFile f( fileName ); + if ( !f.open( QIODevice::ReadOnly ) ) + { + ui.statusbar->showMessage( tr("Chargement annulé"), 2000 ); + return; + } + // Test si l'objet à charger est un billboard cloud + if(fileName.contains(".bbc")) + { + bbc = new BillboardCloud(fileName,mViewer); + switch(numScene) + { + case 1: + mScene->remove(); + mScene->add(bbc); + mScene->setTextureEnable(false); + break; + case 2: + mScene2->remove(); + mScene2->add(bbc); + mScene2->setTextureEnable(false); + break; + } + bbc->setMode(mode,ui.actionInformation_Objet->isChecked()); + timer(false); + bbc->setTime(time); + } + // Test si l'objet à charger est un billboard + else if (fileName.contains(".bb")) + { + billbo = new Billboard(fileName,mViewer); + switch(numScene) + { + case 1: + mScene->remove(); + mScene->add(billbo); + mScene->setTextureEnable(false); + break; + case 2: + mScene2->remove(); + mScene2->add(billbo); + mScene2->setTextureEnable(false); + break; + } + billbo->setMode(mode,ui.actionInformation_Objet->isChecked()); + timer(false); + billbo->setTime(time); + } + // Chargement des autres objets + else + { + pEntity = new Mesh(fileName, "obj", ui.actionActiver_Desactiver_VBO->isChecked() + , mode); + t.setIdentity(); + t.setPosition(0., 0., 0.); + pEntity->setTransform(t); + pMat = new Material(); + pMat->setBaseColor(Color(0.8,0.6,0.5), 0.4); + pMat->setSpecular(Color::WHITE, 1); + pEntity->setMaterial(pMat); + if (numScene==1) + { + mScene->remove(); + mScene->add(pEntity); + mScene->setTextureEnable(true); + } + else + { + mScene2->remove(); + mScene2->add(pEntity); + mScene2->setTextureEnable(true); + } + ui.statusbar->showMessage( tr("Objet Chargé : ")+fileName, 0 ); + ui.menuBillboard->setEnabled(true); + ui.actionBillboard->setEnabled(true); + ui.actionBillboardCloud->setEnabled(true); + ui.actionSauvegarder->setEnabled(false); + } + ui.actionMode_SplitScreen->setEnabled(true); + ui.actionMode_Fusion->setEnabled(true); + + if (ObjIsAMesh()) ui.actionChargerTexture->setEnabled(true); + else ui.actionChargerTexture->setEnabled(false); + ui.menuViewport->setEnabled(true); + mViewer->maj(); +} + +void BBWindow::loadTexture(const QString &textureName) +{ + Entity *pEntity; + TextureLayer* pLayer; + Material *pMat; + numScene=mViewer->getViewport(); + + if (numScene==1) + { + pEntity=mScene->getByName("obj"); + } + else + { + pEntity=mScene2->getByName("obj"); + } + + pMat=pEntity->getMaterial(); + pLayer = new TextureLayer(textureName); + if (pMat->getNumberOfLayers()!=0) pMat->popTextureLayer(); + pMat->setBaseColor(Color::WHITE, 0.3); + pMat->pushTextureLayer(pLayer); + pMat->setAlphaRejection(0.5); + + pEntity->setMaterial(pMat); + if (numScene==1) + { + mScene->remove(false); + mScene->add(pEntity); + } + else + { + mScene2->remove(false); + mScene2->add(pEntity); + } + + ui.statusbar->showMessage( tr("Chargement de la Texture ")+textureName+" sur l'objet de la scène", 0 ); + mViewer->updateGL(); +} + + + +void BBWindow::viewerAxis() +{ + mViewer->setAxes(); + mViewer->updateGL(); +} + +void BBWindow::fileCleanScene() +{ + mScene->remove(); + mScene2->remove(); + mScene->setTextureEnable(false); + mScene2->setTextureEnable(false); + ui.actionChargerTexture->setEnabled(false); + + ui.actionMode_Normal->setChecked(true); + ui.actionMode_SplitScreen->setChecked(false); + ui.actionMode_Fusion->setChecked(false); + ui.actionMode_SplitScreen->setEnabled(false); + ui.actionMode_Fusion->setEnabled(false); + + ui.menuViewport->setEnabled(false); + ui.actionGauche->setChecked(true); + ui.actionDroite->setChecked(false); + + ui.menuBillboard->setEnabled(false); + ui.actionBillboard->setEnabled(false); + ui.actionBillboardCloud->setEnabled(false); + ui.actionSauvegarder->setEnabled(false); + + Camera *mpCamera = mViewer->getCamera() ; + mpCamera->reinit(0,0,0); + reinitViewPort(); + mViewer->updateGL(); + +} + +void BBWindow::toolCamReset() +{ + Camera *mpCamera = mViewer->getCamera() ; + //si la scene est vide on centre la camera sur le centre du repere + if(mScene->isEmpty()) mpCamera->reinit(0,0,0); + //sinon sur le centre de l'objet + else mViewer->maj(); + mViewer->updateGL(); +} + +void BBWindow::showDensity() +{ + int nbRowDensity; + bool ok; + int res = QInputDialog::getInteger(this, "Densité", "Taille de la matrice de densité",64, 4, 1024, 2,&ok,0); + if ( ok ) { + nbRowDensity=res; + } else { + nbRowDensity=0; + } + + if (nbRowDensity != 0 ) + { + DensityViewer * mm = new DensityViewer(nbRowDensity, ui.actionDensiteTex3D->isChecked(), mScene); + mm->show(); + } +} + +BBWindow::~BBWindow() +{ +} + + +void BBWindow::BB() +{ + //si l'objet de la scene peut etre texture alors il a un objet sur lequel on peur creer un Billboard + if(mScene->isTextureEnable()){ + bool ok=false; + int res = QInputDialog::getInteger(this, "Resolution", "resolution du billboard",512, 16, 512, 2,&ok,0); + if(ok){ + timer(true); + reinitViewPort(); + mScene->afficheInfo(4); + mViewer->modifAxes(false); + Density *densite = new Density(64); + Entity* pEntity = mScene->getEntity(); + int reso=2 ; + while ( reso < res) reso *= 2; + + std::vector vecto2; + densite->reset(); + mScene->fDensity( 4,densite); + densite->extractAllPlane(0.3,1,vecto2); + billbo = new Billboard(vecto2[0],pEntity,1.,mViewer,reso); + + timer(false); + billbo->setTime(time); + int mode =1; + if (ui.actionMode_Normal->isChecked() & numScene==1) mode =0; + if (ui.actionMode_Fusion->isChecked() & numScene==1) mode =0; + if (ui.actionMode_Fusion->isChecked() & numScene==2) mode =2; + billbo->setMode(mode,ui.actionInformation_Objet->isChecked()); + + numScene=1; + mViewer->selectViewPort(numScene); + mViewer->changeMode(1); + mScene2->remove(); + mScene2->add(billbo); + + ui.actionSauvegarder->setEnabled(true); + toggleSplitScreen(); + mScene->afficheInfo(5); + mViewer->maj(); + isBCC=false; + ui.actionChargerTexture->setEnabled(true); + } + } + else statusBar()->showMessage( tr("Pas d'objet valide dans la scène pour la construction"), 2000 ); +} + + +void BBWindow::BBC(){ + if(ui.actionBoite_Englobante->isChecked()) + { + BBCBox(); + return; + } + if(mScene->isTextureEnable()){ + timer(true); + bool ok=false; + int res = QInputDialog::getInteger(this, "Choix de résolution maximale", "résolution du billboardCloud",512, 16, 512, 2,&ok,0); + if(ok){ + ok = false; + int nbBB = QInputDialog::getInteger(this, "Choix du nombre de Billboards", "Combien de Billboards ?",50, 1, 500, 1,&ok,0); + if(ok){ + reinitViewPort(); + mScene->afficheInfo(4); + mViewer->modifAxes(false); + Density *densite = new Density(128); + Entity* pEntity = mScene->getEntity(); + int reso=2 ; + while ( reso < res) reso *= 2; + + std::vector vecto2; + densite->reset(); + int coverage = QInputDialog::getInteger(this, "Choix du coverage", "Quel coverage?",5, 1, 20, 1,&ok,0); + mScene->fDensity( coverage,densite); + densite->extractAllPlane(0.0001,nbBB,vecto2); + bbc = new BillboardCloud(pEntity,vecto2,mViewer,0.025,reso); + + timer(false); + bbc->setTime(time); + numScene=1; + mViewer->selectViewPort(numScene); + mViewer->changeMode(1); + mScene2->remove(); + mScene2->add(bbc); + int mode =1; + if (ui.actionMode_Normal->isChecked() & numScene==1) mode =0; + if (ui.actionMode_Fusion->isChecked() & numScene==1) mode =0; + if (ui.actionMode_Fusion->isChecked() & numScene==2) mode =2; + bbc->setMode(mode,ui.actionInformation_Objet->isChecked()); + + + ui.actionSauvegarder->setEnabled(true); + toggleSplitScreen(); + mScene->afficheInfo(5); + ui.actionChargerTexture->setEnabled(true); + isBCC=true; + mViewer->maj(); + } + } + } + else statusBar()->showMessage( tr("Pas d'objet valide dans la scène pour la construction"), 2000 ); +} + +void BBWindow::BBCBox(){ + if(mScene->isTextureEnable()){ + bool ok=false; + int res = QInputDialog::getInteger(this, "Choix de résolution maximale", "résolution du billboard",512, 16, 512, 2,&ok,0); + if(ok){ + timer(true); + reinitViewPort(); + mScene->afficheInfo(4); + + mViewer->modifAxes(false); + + std::vector vecto; + Entity* pEntity = mScene->getEntity(); + //pour la creation de la boite englobante + Billboard *bb = new Billboard(pEntity,mViewer); + + + float a,b,c,d,e,f,g,h,i,ap,bp,cp,dp; + // plan 1 + a=(bb->getBox()[0]).x; + b=(bb->getBox()[0]).y; + c=(bb->getBox()[0]).z; + d=(bb->getBox()[1]).x; + e=(bb->getBox()[1]).y; + f=(bb->getBox()[1]).z; + g=(bb->getBox()[2]).x; + h=(bb->getBox()[2]).y; + i=(bb->getBox()[2]).z; + + ap = b*f + e*i + h*c - f*h - i*b - c*e ; + bp = -(a*f + d*i + g*c - f*g - i*a - c*d); + cp = a*e + d*h + g*b - e*g - h*a - b*d; + dp = -(a*e*i + d*h*c + g*b*f - c*e*g - f*h*a - i*b*d); + + float fl[4] = {ap,bp,cp,dp}; + vecto.push_back(fl); + + // plan 2 + a=(bb->getBox()[0]).x; + b=(bb->getBox()[0]).y; + c=(bb->getBox()[0]).z; + d=(bb->getBox()[1]).x; + e=(bb->getBox()[1]).y; + f=(bb->getBox()[1]).z; + g=(bb->getBox()[7]).x; + h=(bb->getBox()[7]).y; + i=(bb->getBox()[7]).z; + + ap = b*f + e*i + h*c - f*h - i*b - c*e ; + bp = -(a*f + d*i + g*c - f*g - i*a - c*d); + cp = a*e + d*h + g*b - e*g - h*a - b*d; + dp = -(a*e*i + d*h*c + g*b*f - c*e*g - f*h*a - i*b*d); + + float fl2[4] = {ap,bp,cp,dp}; + vecto.push_back(fl2); + + //plan 3 + a=(bb->getBox()[3]).x; + b=(bb->getBox()[3]).y; + c=(bb->getBox()[3]).z; + d=(bb->getBox()[1]).x; + e=(bb->getBox()[1]).y; + f=(bb->getBox()[1]).z; + g=(bb->getBox()[7]).x; + h=(bb->getBox()[7]).y; + i=(bb->getBox()[7]).z; + + ap = b*f + e*i + h*c - f*h - i*b - c*e ; + bp = -(a*f + d*i + g*c - f*g - i*a - c*d); + cp = a*e + d*h + g*b - e*g - h*a - b*d; + dp = -(a*e*i + d*h*c + g*b*f - c*e*g - f*h*a - i*b*d); + + float fl3[4] = {ap,bp,cp,dp}; + vecto.push_back(fl3); + + //plan 4 + a=(bb->getBox()[4]).x; + b=(bb->getBox()[4]).y; + c=(bb->getBox()[4]).z; + d=(bb->getBox()[5]).x; + e=(bb->getBox()[5]).y; + f=(bb->getBox()[5]).z; + g=(bb->getBox()[7]).x; + h=(bb->getBox()[7]).y; + i=(bb->getBox()[7]).z; + + ap = b*f + e*i + h*c - f*h - i*b - c*e ; + bp = -(a*f + d*i + g*c - f*g - i*a - c*d); + cp = a*e + d*h + g*b - e*g - h*a - b*d; + dp = -(a*e*i + d*h*c + g*b*f - c*e*g - f*h*a - i*b*d); + + float fl4[4] = {ap,bp,cp,dp}; + vecto.push_back(fl4); + + //plan 5 + a=(bb->getBox()[0]).x; + b=(bb->getBox()[0]).y; + c=(bb->getBox()[0]).z; + d=(bb->getBox()[2]).x; + e=(bb->getBox()[2]).y; + f=(bb->getBox()[2]).z; + g=(bb->getBox()[6]).x; + h=(bb->getBox()[6]).y; + i=(bb->getBox()[6]).z; + + ap = b*f + e*i + h*c - f*h - i*b - c*e ; + bp = -(a*f + d*i + g*c - f*g - i*a - c*d); + cp = a*e + d*h + g*b - e*g - h*a - b*d; + dp = -(a*e*i + d*h*c + g*b*f - c*e*g - f*h*a - i*b*d); + + float fl5[4] = {ap,bp,cp,dp}; + vecto.push_back(fl5); + + //plan 6 + a=(bb->getBox()[2]).x; + b=(bb->getBox()[2]).y; + c=(bb->getBox()[2]).z; + d=(bb->getBox()[3]).x; + e=(bb->getBox()[3]).y; + f=(bb->getBox()[3]).z; + g=(bb->getBox()[4]).x; + h=(bb->getBox()[4]).y; + i=(bb->getBox()[4]).z; + + ap = b*f + e*i + h*c - f*h - i*b - c*e ; + bp = -(a*f + d*i + g*c - f*g - i*a - c*d); + cp = a*e + d*h + g*b - e*g - h*a - b*d; + dp = -(a*e*i + d*h*c + g*b*f - c*e*g - f*h*a - i*b*d); + + float fl6[4] = {ap,bp,cp,dp}; + vecto.push_back(fl6); + + int reso=2 ; + while ( reso < res) reso *= 2; + + bbc = new BillboardCloud(pEntity,vecto,mViewer,0.1,reso); + + timer(false); + bbc->setTime(time); + numScene=1; + mViewer->selectViewPort(numScene); + mViewer->changeMode(1); + mScene2->remove(); + mScene2->add(bbc); + int mode =1; + if (ui.actionMode_Normal->isChecked() & numScene==1) mode =0; + if (ui.actionMode_Fusion->isChecked() & numScene==1) mode =0; + if (ui.actionMode_Fusion->isChecked() & numScene==2) mode =2; + bbc->setMode(mode,ui.actionInformation_Objet->isChecked()); + + ui.actionSauvegarder->setEnabled(true); + toggleSplitScreen(); + mScene->afficheInfo(5); + ui.actionChargerTexture->setEnabled(true); + isBCC=true; + mViewer->maj(); + } + } + else statusBar()->showMessage( tr("Pas d'objet valide dans la scène pour la construction"), 2000 ); +} + +void BBWindow::viewerWireMode(){ + + if (mViewer->isWireframeEnabled()) + mViewer->setWireframeEnabled(false); + else + mViewer->setWireframeEnabled(true); +} + +void BBWindow::statusChanged(const QString &message) +{ + ui.statusbar->showMessage( message, 0 ); +} + +void BBWindow::toggleShowFps(void) +{ + mShowFps = !mShowFps; + if(mShowFps) + { + connect(mViewer, SIGNAL(fpsChanged(const QString &)), this, SLOT(statusChanged(const QString &))); + } + else + { + disconnect(mViewer, SIGNAL(fpsChanged(const QString &)), this, SLOT(statusChanged(const QString &))); + ui.statusbar->showMessage( tr(" "), 0 ); + } + mViewer->updateGL(); +} + +void BBWindow::toogleBorder(void) +{ + mViewer->borderChange(); + mViewer->updateGL(); +} + +void BBWindow::toggleNormal(void) +{ + ui.actionMode_Normal->setChecked(true); + ui.actionMode_SplitScreen->setChecked(false); + ui.actionMode_Fusion->setChecked(false); + mViewer->changeMode(0); + + if(numScene==1){ + ui.actionGauche->setChecked(true); + ui.actionDroite->setChecked(false); + mScene->afficheInfo(2); + } + else{ + ui.actionGauche->setChecked(false); + ui.actionDroite->setChecked(true); + mScene2->afficheInfo(2); + } + mViewer->updateGL(); +} + +void BBWindow::toggleSplitScreen(void) +{ + if(ui.actionMode_SplitScreen->isEnabled()) + { + ui.actionMode_Normal->setChecked(false); + ui.actionMode_SplitScreen->setChecked(true); + ui.actionMode_Fusion->setChecked(false); + + ui.menuViewport->setEnabled(true); + + mViewer->changeMode(1); + + mScene->afficheInfo(1); + mScene2->afficheInfo(1); + mViewer->updateGL(); + } +} + +void BBWindow::toggleFusion() +{ + if(ui.actionMode_Fusion->isEnabled()) + { + ui.actionMode_Normal->setChecked(false); + ui.actionMode_SplitScreen->setChecked(false); + ui.actionMode_Fusion->setChecked(true); + + ui.menuViewport->setEnabled(true); + + mViewer->changeMode(2); + + mScene->afficheInfo(2); + mScene2->afficheInfo(3); + mViewer->updateGL(); + } +} + +void BBWindow::selectViewPortLeft(void) +{ + numScene=1; + mViewer->selectViewPort(numScene); + ui.actionDroite->setChecked(false); + if (ObjIsAMesh()) ui.actionChargerTexture->setEnabled(true); + else ui.actionChargerTexture->setEnabled(false); + mViewer->updateGL(); +} + +void BBWindow::selectViewPortRight(void) +{ + if(ui.menuViewport->isEnabled()) + { + numScene=2; + mViewer->selectViewPort(numScene); + ui.actionGauche->setChecked(false); + if (ObjIsAMesh()) ui.actionChargerTexture->setEnabled(true); + else ui.actionChargerTexture->setEnabled(false); + mViewer->updateGL(); + } +} + +void BBWindow::toggleInfo() +{ + mScene->afficheInfo(0); + mScene2->afficheInfo(0); + mViewer->updateGL(); +} + +void BBWindow::reinitViewPort(void) +{ + numScene=1; + mViewer->selectViewPort(numScene); + mViewer->changeMode(0); + ui.actionMode_SplitScreen->setChecked(false); + ui.actionMode_Fusion->setChecked(false); + ui.actionGauche->setChecked(true); + ui.actionDroite->setChecked(false); +} + +void BBWindow::SaveAs(void) +{ + if(!isBCC){ + QString filename; + QString fn = QFileDialog::getSaveFileName(this, "Enregistrer un Billboard","./../../branches/Objets/", + tr("Billboard (*.bb)"), 0,0); + if ( !fn.isEmpty() ) { + if(fn.contains(".bb")) filename=fn.section('.',0,0); + else filename = fn; + + QFile BBFile(filename.toAscii()+".png"); + if(BBFile.open(QIODevice::ReadOnly)) + { + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::Warning); + msgBox.setWindowTitle("Conflit : Texture déjà présente"); + msgBox.setText("Attention, la texture liée à ce Billboard est déjà liée à un autre Billboard, voulez-vous continuer?"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + switch (msgBox.exec()) { + case QMessageBox::Yes: + break; + case QMessageBox::No: + return ; + break; + } + } + QFile f( filename+".bb" ); + if ( !f.open( QIODevice::WriteOnly ) ) { + statusBar()->showMessage( tr("Pas de droit d'écriture").arg(fn),2000 ); + return; + } + QTextStream t( &f ); + t << billbo->saveBillboard(filename) ; + f.close(); + } else { + statusBar()->showMessage( tr("Sauvegarde annulée"), 2000 ); + } + } + else{ + QString filename; + QString fn = QFileDialog::getSaveFileName(this, "Enregistrer un BillboardCloud","./../../branches/Objets/", + tr("BillboardCloud (*.bbc)"), 0,0); + if ( !fn.isEmpty() ) { + if(fn.contains(".bbc")) filename=fn.section('.',0,0); + else filename = fn; + + QFile BBFile(filename.toAscii()+".png"); + if(BBFile.open(QIODevice::ReadOnly)) + { + QMessageBox msgBox; + msgBox.setIcon(QMessageBox::Warning); + msgBox.setWindowTitle("Conflit : Texture déjà présente"); + msgBox.setText("Attention, la texture liée à ce Billboard Cloud est déjà liée à un autre Billboard ou Billboard Cloud, voulez-vous continuer?"); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + switch (msgBox.exec()) { + case QMessageBox::Yes: + break; + case QMessageBox::No: + return ; + break; + } + } + + QFile f( filename+".bbc" ); + if ( !f.open( QIODevice::WriteOnly ) ) { + statusBar()->showMessage( tr("Pas de droit d'écriture").arg(fn),2000 ); + return; + } + QTextStream t( &f ); + t << bbc->saveBillboardCloud(filename) ; + f.close(); + } else { + statusBar()->showMessage( tr("Sauvegarde annulée"), 2000 ); + } + } +} + +bool BBWindow::ObjIsAMesh(void) +{ + Entity *pEntity; + if (numScene==1) + { + if(mScene->isEmpty()) return false; + pEntity=mScene->getEntity(); + } + else + { + if(mScene2->isEmpty()) return false; + pEntity=mScene2->getEntity(); + } + + if(pEntity->getName() == "obj" ) return true; + else return false; +} + +void BBWindow::timer(bool start) +{ + if(start) + { + debut = clock(); + fin = clock(); + } + else + { + fin = clock(); + time = (fin - debut) / CLOCKS_PER_SEC; + } +} + diff --git a/src/BBWindow.h b/src/BBWindow.h new file mode 100644 index 0000000..427e7a0 --- /dev/null +++ b/src/BBWindow.h @@ -0,0 +1,212 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef BBWindow_H +#define BBWindow_H + +#include + +#include + +#include "Light.h" +#include "Vector3.h" +#include "Entity.h" +#include "Material.h" +#include "TextureLayer.h" +#include "Mesh.h" +#include "Density.h" +#include "DensityViewer.h" +#include "Billboard.h" +#include "BillboardCloud.h" +#include "ui_W_Main.h" +#include "Viewer.h" +#include "Scene.h" +#include + + +/** + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + + class BBWindow :public QMainWindow +{ + Q_OBJECT + + public: +/** @name : BBWindow + * @brief : Constructeur + */ + BBWindow(); +/** @name : ~BBWindow + * @brief : Destructeur + */ + ~BBWindow(); + protected: + void closeEvent(QCloseEvent *event); +/** @name : loadObject + * @brief : chargement d'un objet maillé + * @param fileName : Nom du fichier + */ + void loadObject( const QString &fileName); + +/** @name : loadTexture + * @brief : chargement d'une texture sur l'objet courant + * @param textureName : Nom du fichier + */ + void loadTexture(const QString &textureName); + private slots: +/** @name : createScene + * @brief : Initialisation de la scène + */ + void createScene(void); + +/** @name : loadObjectDialog + * @brief : Affichage d'une boite de dialogue permettant le chargement des objets + */ + void loadObjectDialog(); + +/** @name : loadTextureDialog + * @brief : Affichage d'une boite de dialogue permettant le chargement des textures pour les objets maillé + */ + void loadTextureDialog(); + +/** @name : viewerAxis + * @brief : Active et désactive l'affichage du repère + */ + void viewerAxis(); + +/** @name : viewerWireMode + * @brief : Active/Désactive le mode filaire + */ + void viewerWireMode(); + +/** @name : fileCleanScene + * @brief : Efface la scène + */ + void fileCleanScene(); + + void toolCamReset(); +/** @name : showDensity + * @brief : Appel la fenêtre pour afficher la densité + */ + void showDensity(); + +/** @name : BB + * @brief : Crée un billboard + */ + void BB(); + +/** @name : BBC + * @brief : Crée un billboard cloud + */ + void BBC(); + +/** @name : BBCBox + * @brief : Crée un billboard cloud par rapport a la boite englobante de l'objet + */ + void BBCBox(); + +/** @name : statusChanged + * @brief : Affiche un message dans la barre de status + */ + void statusChanged(const QString &message); + +/** @name : toggleShowFps + * @brief : Active/Désactive l'affichage des FPS + */ + void toggleShowFps(void); + +/** @name : toggleNormal + * @brief : Active le mode Normal + */ + void toggleNormal(void); + +/** @name : toggleSplitScreen + * @brief : Active/Désactive le mode Split Screen(partage en 2 de l'écran) + * Cette fonction permet aussi de placer correctement l'affichage des + * informations en fonction du mode + */ + void toggleSplitScreen(void); + +/** @name : toggleFusion + * @brief : Active/Désactive le mode fusion + * Les 2 viewport sont l'un sur l'autre, l'un affiche sa partie droite, + * l'autre sa partie gauche. + * Cette fonction permet aussi de placer correctement l'affichage des + * informations en fonction du mode + */ + void toggleFusion(void); + +/** @name : selectViewPortLeft + * @brief : Selectionne le viewport de gauche + */ + void selectViewPortLeft(); + +/** @name : selectViewPortRight + * @brief : Selectionne le viewport de droite + */ + void selectViewPortRight(); + +/** @name : toggleInfo + * @brief : Active/Désactive l'affichage des informations à l'écran + */ + void toggleInfo(); + +/** @name : toogleBorder + * @brief : Active/Désactive l'affichage du cadre entourant le viewport + */ + void toogleBorder(); + +/** @name : SaveAs + * @brief : Sauvegarde d'un Billboard ou d'un Billboard cloud + * Si la variable save = true, l'objet a sauvegarder sera un Billboard + * Sinon ça sauvegardera un Billboard Cloud + */ + void SaveAs(); + private: +/** @name : reinitViewPort + * @brief : Réinitialise les viewport + */ + void reinitViewPort(void); + +/** @name : ObjIsAMesh + * @brief : Test si l'objet contenu dans le viewport courant est de type bb ou bbc + */ + bool ObjIsAMesh(void); + + Ui::MyWindow ui; + bool mShowFps; + Viewer *mViewer; + QDockWidget *mDensityWidget; + Scene *mScene; + Scene *mScene2; + BillboardCloud *bbc ; + int numScene; + Billboard * billbo; + bool isBCC; + + void timer(bool start); + double debut, fin; + double time; +}; + +#endif diff --git a/src/Billboard.cpp b/src/Billboard.cpp new file mode 100644 index 0000000..609dd14 --- /dev/null +++ b/src/Billboard.cpp @@ -0,0 +1,696 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "Billboard.h" + + + +float Billboard::distVertices(Vector3 vect1,Vector3 vect2){ + return (sqrt((vect1.x - vect2.x)*(vect1.x - vect2.x)+(vect1.y - vect2.y)*(vect1.y - vect2.y)+(vect1.z - vect2.z)*(vect1.z - vect2.z))); +} + + +void Billboard::projection(std::vector vect){ + + float a = plan[0]; + float b = plan[1]; + float c = plan[2]; + float d = plan[3]; + + float xp,yp,zp; + if(a!=0.){ + xp=-d/a; + yp=0.; + zp=0.; + } + else if(b!=0.){ + xp=0.; + yp=-d/b; + zp=0.; + } + else { + xp=0.; + yp=0.; + zp=-d/c; + } + + //la projection + for(std::vector::iterator it=vect.begin();it &vect, std::vector &frame){ + + // calcul du centre du nuage de points + Vector3 center(0.,0.,0.); + for (unsigned int i=0; i= eigenValue[1]) { + if (eigenValue[0] >= eigenValue[2]) { + frame.push_back(eigenVector[0]); + if (eigenValue[1] >= eigenValue[2]) { + frame.push_back(eigenVector[1]); + frame.push_back(eigenVector[2]); + } else { + frame.push_back(eigenVector[2]); + frame.push_back(eigenVector[1]); + } + } else { + frame.push_back(eigenVector[2]); + frame.push_back(eigenVector[0]); + frame.push_back(eigenVector[1]); + } + } else { + if (eigenValue[1] >= eigenValue[2]) { + frame.push_back(eigenVector[1]); + if (eigenValue[0] >= eigenValue[2]) { + frame.push_back(eigenVector[0]); + frame.push_back(eigenVector[2]); + } else { + frame.push_back(eigenVector[2]); + frame.push_back(eigenVector[0]); + } + } else { + frame.push_back(eigenVector[2]); + frame.push_back(eigenVector[1]); + frame.push_back(eigenVector[0]); + } + } + + //les vecteurs propres ne forment pas un triède direct + + //creation du repere direct O XYZ + + //OZ + Vector3 v1 = frame[2] - center; + //O(-Z) + Vector3 v2 = (-frame[2]) - center; + + Vector3 centre = entity->getCenter(); + //OP + Vector3 Z = centre - center; + + //les cosinus des angles + float cosa = v1.dotProduct(Z) / sqrt(v1.squaredLength() * Z.squaredLength()); + float cosb = v2.dotProduct(Z) / sqrt(v2.squaredLength() * Z.squaredLength()); + //maj de Z + if(acos(cosa)>acos(cosb)) frame[2]=-frame[2]; + + Vector3 Y(frame[1].x + 0.1,frame[1].y + 0.1,frame[1].z + 0.1); + //calcul de Y par rapport a l'angle + float cosc = Y.dotProduct( frame[2]) / sqrt(Y.squaredLength() * frame[2].squaredLength()); + if(cosc<0.) frame[1] = -frame[1]; + + //produit vectoriel pour calculer X + frame[0].x = frame[2].y * frame[1].z - frame[2].z * frame[1].y; + frame[0].y = frame[2].z * frame[1].x - frame[2].x *frame[1].z; + frame[0].z = frame[2].x * frame[1].y - frame[2].y *frame[1].x; + + return center; +} + + +Vector3* Billboard::findCoord(Matrix4* repere ,std::vector vect){ + Vector3 res; + Vector3 minX,minY,maxX,maxY; + +//recherche du rectangle englobant + for(int j=0;j<3;j++){ + minX.x=vect[0].x; + minX.y=vect[0].y; + minX.z=vect[0].z; + + minY.x=vect[0].x; + minY.y=vect[0].y; + minY.z=vect[0].z; + + maxX.x=vect[0].x; + maxX.y=vect[0].y; + maxX.z=vect[0].z; + + maxY.x=vect[0].x; + maxY.y=vect[0].y; + maxY.z=vect[0].z; + } + + for(unsigned int i=1;ivect[i].x) { + minX.x=vect[i].x; + minX.y=vect[i].y; + minX.z=vect[i].z; + } + if(minY.y>vect[i].y) { + minY.x=vect[i].x; + minY.y=vect[i].y; + minY.z=vect[i].z; + } + + if(maxX.x vecto; + Vector3 v3; + + v3.x=minX.x; + v3.y=maxY.y; + v3.z=0.; + vecto.push_back(v3); + + v3.x=minX.x; + v3.y=minY.y; + v3.z=0.; + vecto.push_back(v3); + + v3.x=maxX.x; + v3.y=minY.y; + v3.z=0.; + vecto.push_back(v3); + + v3.x=maxX.x; + v3.y=maxY.y; + v3.z=0.; + vecto.push_back(v3); + + //on stocke aussi le centre + epsilon qui sera la position de la camera + res.x=(minX.x+maxX.x)/2.; + res.y=(minY.y+maxY.y)/2.; + res.z=-epsilon;//car Z pointe vers l'objet + + vecto.push_back(res); + + std::vector vectoInv; + for (std::vector::iterator it=vecto.begin(); it != vecto.end(); it++) { + // projection sur le plan + Vector3 v = *repere * (*it); + vectoInv.push_back(v); + } + //sauvegarde des coordonnees du billboard + std::vector::iterator r; + r=vectoInv.begin(); + + verticesBB[0]=(*r).x; + verticesBB[1]=(*r).y; + verticesBB[2]=(*r).z; + + r++; + verticesBB[3]=(*r).x; + verticesBB[4]=(*r).y; + verticesBB[5]=(*r).z; + r++; + verticesBB[6]=(*r).x; + verticesBB[7]=(*r).y; + verticesBB[8]=(*r).z; + r++; + verticesBB[9]=(*r).x; + verticesBB[10]=(*r).y; + verticesBB[11]=(*r).z; + + r=(vectoInv.end() -1); + //retourne la position de la camera + return &(*r); +} + +void Billboard::createBox(){ + + std::vector vect = entity->getVertexArrayE(); +//recherche de la boite englobante + Vector3 minX(vect[0]); + Vector3 maxX(vect[0]); + Vector3 minY(vect[0]); + Vector3 maxY(vect[0]); + Vector3 minZ(vect[0]); + Vector3 maxZ(vect[0]); + + + for(unsigned int i=1;ivect[i].x) minX=vect[i]; + if(minY.y>vect[i].y) minY=vect[i]; + if(minZ.z>vect[i].z) minZ=vect[i]; + if(maxX.xd1) distMaxBox = d2; + if(d3>distMaxBox) distMaxBox = d3; +} + +int Billboard::resolution(float a){ + if(a>0.5) return resMax; + else if(a>0.25) return resMax/2; + else return resMax/4; + +} + +void Billboard::createBillboard(){ + + //projette les sommets de la boite englobante sur le plan + projection(box); + std::vector frame; + + // on parametre le plan : ACP + centre + Vector3 center = acp(projections, frame); + + // on construit la matrice de changement de repere + Matrix4 mat( + frame[0][0], frame[1][0],frame[2][0], center[0], + frame[0][1], frame[1][1],frame[2][1], center[1], + frame[0][2], frame[1][2],frame[2][2], center[2], + 0., 0., 0., 1. + ); + + mat = mat.inverse(); + std::vector projections2D; + + for (std::vector::iterator it=projections.begin(); it != projections.end(); it++) { + // projection sur le plan + Vector3 v = mat * (*it); + projections2D.push_back(v); + } + mat = mat.inverse(); + + //sauvegarde des normales du Billboard + normals.x = -frame[2].x; + normals.y = -frame[2].y; + normals.z = -frame[2].z; + + + //parametrisation de la camera + + Vector3* position = findCoord(&mat,projections2D); + + cam->setPosition(*position); + + cam->setX(frame[0]); + cam->setY(frame[1]); + cam->setZ(frame[2]); + + //parametrisation de la camera pour la texture + float d1 = sqrt((verticesBB[0] - verticesBB[3])*(verticesBB[0] - verticesBB[3])+(verticesBB[1] - verticesBB[4])*(verticesBB[1] - verticesBB[4])+(verticesBB[2] - verticesBB[5])*(verticesBB[2] - verticesBB[5])); + + float d2 = sqrt((verticesBB[0] - verticesBB[9])*(verticesBB[0] - verticesBB[9])+(verticesBB[1] - verticesBB[10])*(verticesBB[1] - verticesBB[10])+(verticesBB[2] - verticesBB[11])*(verticesBB[2] - verticesBB[11])); + + + float rapportX,rapportY; + bool t=false; + if(d1>d2){ + rapportX = d1/distMaxBox; + rapportY = d2/distMaxBox; + t=true; + } + else{ + rapportY = d1/distMaxBox; + rapportX = d2/distMaxBox; + } + + vX = resolution(rapportX); + vY = resolution(rapportY); + + if(t) cam->setViewport2( vX,vY,d1,d2,epsilon); + else cam->setViewport2( vX,vY,d2,d1,epsilon); + //activation du glOrtho + cam->setPerspective(false); +} + + + +void Billboard::generateTexture(){ + pixels = new unsigned char[vX*vY*4]; + glReadBuffer(GL_BACK); + glReadPixels(0, 0,vX,vY, GL_RGBA, GL_UNSIGNED_BYTE, pixels); + glGenTextures(1, _textureID); + glBindTexture(GL_TEXTURE_2D, _textureID[0]); + gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA,vX,vY,GL_RGBA,GL_UNSIGNED_BYTE,pixels); + glBindTexture(GL_TEXTURE_2D,0); + //desactivation du glOrtho,mode perspective + cam->setPerspective(true); +} + +void Billboard::drawGeometry(){ + + //affichage du billboard + glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); + glEnable(GL_LIGHTING); + glEnable(GL_ALPHA_TEST); + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, _textureID[0]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//GL_LINEAR + glBegin(GL_QUADS); + glNormal3f(normals.x,normals.y,normals.z);glTexCoord2d(tCoord[0],tCoord[1]); glVertex3f(verticesBB[0],verticesBB[1],verticesBB[2]); + glNormal3f(normals.x,normals.y,normals.z); glTexCoord2d(tCoord[2],tCoord[3]); glVertex3f(verticesBB[3],verticesBB[4],verticesBB[5]); + glNormal3f(normals.x,normals.y,normals.z); glTexCoord2d(tCoord[4],tCoord[5]); glVertex3f(verticesBB[6],verticesBB[7],verticesBB[8]); + glNormal3f(normals.x,normals.y,normals.z); glTexCoord2d(tCoord[6],tCoord[7]); glVertex3f(verticesBB[9],verticesBB[10],verticesBB[11]); + glEnd(); + glDisable(GL_TEXTURE_2D); + + // le mode filiaire + if(viewer->isWireframeEnabled()){ + + glEnable(GL_POLYGON_SMOOTH ); + glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); + glLineWidth(1.5); + glBegin(GL_QUADS); + glVertex3f(verticesBB[0],verticesBB[1],verticesBB[2]); + glVertex3f(verticesBB[3],verticesBB[4],verticesBB[5]); + glVertex3f(verticesBB[6],verticesBB[7],verticesBB[8]); + glVertex3f(verticesBB[9],verticesBB[10],verticesBB[11]); + glEnd(); + } + if (Binfo) drawText(); +} + +Vector3 Billboard::getCenterM(void) +{ + Vector3 center; + center.x=(verticesBB[0]+verticesBB[3]+verticesBB[6]+verticesBB[9])/4.; + center.y=(verticesBB[1]+verticesBB[4]+verticesBB[7]+verticesBB[10])/4.; + center.z=(verticesBB[2]+verticesBB[5]+verticesBB[8]+verticesBB[11])/4.; + return center; +} + +std::vector Billboard::getVertexArray(){ + std::vector vect; + return vect; +} + + +Billboard::Billboard(float *vect,Entity* entite,float ep, Viewer*view,int res):entity(entite),cam(view->getCamera()),epsilon(ep),viewer(view),resMax(res),isLoad(false),error(false), Binfo(false){ + for(int i=0;i<4;i++) plan[i] = vect[i]; + tCoord[0] = 0.; + tCoord[1] = 1.; + tCoord[2] = 0.; + tCoord[3] = 0.; + tCoord[4] = 1.; + tCoord[5] = 0.; + tCoord[6] = 1.; + tCoord[7] = 1.; + viewer->setWireframeEnabled(false); + createBox(); + createBillboard(); + viewer->updateGL(); + generateTexture(); +} + + +Billboard::Billboard(Entity* entite, Viewer*view): entity(entite),cam(view->getCamera()),viewer(view),error(false), Binfo(false){ + createBox(); +} + +Billboard::Billboard(const QString& filename,Viewer *v):viewer(v),isLoad(true),error(false), Binfo(false){ + viewer->setWireframeEnabled(false); + QFile BBFile(filename); + if(!BBFile.open(QIODevice::ReadOnly)) + { + std::cerr << "erreur :chargement Billboard : " << filename.toStdString() << std::endl; + return; + } + QTextStream in(&BBFile); + QString header; + in>>header; + QString path=(filename.section(".bb",0,0))+".png"; + Image im; + im = chargeImage(path.toAscii()); + if (im == NULL) + { + error=true; + return; + } + + vX = imageGetWidth(im); + vY = imageGetHeight(im); + + glGenTextures(1, _textureID); + glBindTexture(GL_TEXTURE_2D, _textureID[0]); + gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA,vX,vY,GL_RGBA,GL_UNSIGNED_BYTE,imageGetPixels(im)); + glBindTexture(GL_TEXTURE_2D,0); + int i=0; + while(i<12){ + verticesBB[i++]=header.toFloat(); + in>>header; + } + i=0; + while(!(in.atEnd())){ + normals[i++]=header.toFloat(); + in>>header; + } + tCoord[0] = 0.; + tCoord[1] = 1.; + tCoord[2] = 0.; + tCoord[3] = 0.; + tCoord[4] = 1.; + tCoord[5] = 0.; + tCoord[6] = 1.; + tCoord[7] = 1.; +} + + +Billboard::Billboard(Image im,Viewer *v,float *sommets,float *texCoord,Vector3 norm):viewer(v),normals(norm),isLoad(true),error(false), Binfo(false){ + viewer->setWireframeEnabled(false); + vX = imageGetWidth(im); + vY = imageGetHeight(im); + glBindTexture(GL_TEXTURE_2D, _textureID[0]); + gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGBA,vX,vY,GL_RGBA,GL_UNSIGNED_BYTE,imageGetPixels(im)); + glBindTexture(GL_TEXTURE_2D,0); + for(int i=0;i<12;i++) verticesBB[i] = sommets[i]; + for(int i=0;i<8;i++) tCoord[i]=texCoord[i]; +} + + +void Billboard::drawBillboard(){ + drawGeometry(); +} + +void Billboard::fillDensity(int coverage, Density *pDensity){} + +void Billboard::deleteVBO(){} + +unsigned char * Billboard::getPixels(){ + return pixels; +} + +int Billboard::getnX(){ + return vX; +} + +int Billboard::getnY(){ + return vY; +} + +QString Billboard::saveBillboard(const QString &filename){ + QString body; + QString str; + body=body+getCoord(); + Image ima; + ima= creeImage(pixels,vX,vY,4); + imageSauvePng(ima,filename.toAscii()+".png"); + + return body; +} +QString Billboard::getCoord(){ + QString str,body; + for(int i=0;i<12;i++) { + body=body+str.setNum(verticesBB[i])+" "; + if(i%3==2) body=body+"\n"; + } + body=body+str.setNum(normals.x)+" "; + body=body+str.setNum(normals.y)+" "; + body=body+str.setNum(normals.z)+"\n"; + return body; +} + +std::vector Billboard::getBox(){ + return box; +} + + +/// Tout ce qui suit concerne l'affichage des informations + +void Billboard::drawText() +{ + char info[10]; + bool Ecolormat = glIsEnabled(GL_COLOR_MATERIAL); + bool Elight = glIsEnabled(GL_LIGHTING); + bool Etext = glIsEnabled(GL_TEXTURE_2D); + char strMsg[100] = {0}; + int taille; + + glDisable(GL_LIGHTING); + glDisable(GL_COLOR_MATERIAL); + glDisable(GL_TEXTURE_2D); + glPushMatrix(); + glLoadIdentity(); + if (error) + { + glColor3f(1.,0.2,0.2); + glRasterPos3f(position.x,position.y,position.z); + sprintf ( strMsg, "Erreur de chargement : Texture introuvable"); + //actionBoite_Englobante + for (unsigned int i=0;i +#include "Camera.h" +#include "Viewer.h" +#include "Image.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Matrix3.h" +#include "Matrix4.h" +#include +#include +#include +#include + +/** + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + +class Billboard : public Entity +{ +public: + /** + @brief Construction d'un Billboard + @name Billboard + @param vect le plan du Billboard + @param entite l'objet à simuler + @param ep la distance entre le plan et les sommets qui vont être pris en compte pour la copie des textures + @param view le Viewer dans lequel on travaille + @param res la resolution maximum du billboard + */ + Billboard(float *vect, Entity* entite,float ep,Viewer *view,int res); + + /** + @brief Chargement d'un Billboard à partir d'un fichier par le biais de BillboardCloud. + @name Billboard + @param im contient la texture + @param v le Viewer dans lequel on travaille + @param sommets les coordonnees des sommets + @param texCoord les coordonnees de textures + @param norm la normale au plan + */ + Billboard(Image im,Viewer *v,float *sommets,float *texCoord,Vector3 norm); + /** + @brief Chargement d'un Billboard a partir d'un fichier texte. + @name Billboard + @param filename le fichier + @param v le Viewer dans lequel on travaille + */ + Billboard(const QString& filename,Viewer *v); + + /** + @brief Sert juste à recuperer la boite englobante de l'objet + @name Billboard + @param entite l'objet + @param view le Viewer dans lequel on travaille + */ + Billboard(Entity* entite, Viewer*view); + /** + @brief Calcul de la boite englobante de l'objet + @name createBox + */ + void createBox(); + /** + appele par BillboardCloud pour l'affichage + @name drawBillboard + */ + void drawBillboard(); + /** + @brief projection de points sur le plan du billboard + @name projection + @param vect les points à projetter + */ + void projection(std::vector vect); + /** + @brief Analyse en composante principales pour calculer le repere du plan + @name acp + @param vect les points projettes sur le plan + @param frame le repere du plan a calculer + @return le centre du Billboard + */ + Vector3 acp(const std::vector &vect, std::vector &frame); + + /** + @brief Calcule la distance entre deux sommets + @name distVertices + @param vect1 un sommet + @param vect2 un sommet + @return la distance entre ces deux sommets + */ + float distVertices(Vector3 vect1,Vector3 vect2); + /** + @brief Recherche des coordonnees du Billboard par rapport aux points projettés sur le plan + @name findCoord + @param repere le repere du plan + @param vertices les sommets + @return la position de la camera pour le placage des textures + */ + Vector3* findCoord(Matrix4* repere ,std::vector vertices); + /** + @brief Recupère la texture pour le Billboard + @name generateTexture + */ + void generateTexture(); + /** + @brief Création globale d'un billboard + @name createBillboard + */ + void createBillboard(); + /** + @brief Donne la resolution de texture par rapport à la longueur + @name resolution + @param a la distance entre 2 sommets + @return la resolution + */ + int resolution(float a); + /** + @name getPixels + @return renvoie la texture du Billboard + */ + unsigned char *getPixels(); + /** + @name getnX + @return renvoie la resolution du Billboard ppar rapport a sa largeur + */ + int getnX(); + /** + @name getnY + @return renvoie la resolution du Billboard ppar rapport a sa hauteur + */ + int getnY(); + /** + @name saveBillboard + @return les informations a sauvegarder + */ + QString saveBillboard(const QString &filename); + /** + @name getCoord + @return les cooordonnees du Billboard + */ + QString getCoord(); + /** + @name getBox + @return la boite englobante + */ + std::vector getBox(); + + /** @name setMode + * @brief Permet de définir le mode d'affichage en cour pour placer correctement les informations + * @param mode : le mode choisi + */ + void setMode(int mode, bool info); + + /** @name setTime + * @brief Affecte le temps passé à la création et au chargement du Billboard + * @param t : le temps passé + */ + void setTime(double t); + +protected : + + virtual void drawGeometry(void); + virtual Vector3 getCenterM(void); + virtual std::vector getVertexArray(); + virtual void deleteVBO(); + virtual void afficheInfoM(int split); + virtual void fillDensity(int coverage, Density *pDensity); + + /** + equation du plan + */ + float plan[4]; + /** + sommets du billboard a tracer + */ + float verticesBB[12]; + /** + distance qui sert de reference pour le calcul de la resolution de texture + */ + float distMaxBox; + /** + l'objet associe au billboard + */ + Entity* entity; + /** + la camera de la scene + */ + Camera *cam; + /** + identifiant de texture + */ + unsigned int _textureID[1]; + /** + la distance entre le plan et les sommets qui seront pris en compte lors du placage de la texture + */ + float epsilon; + /** + dimensions de la texture + */ + int vX,vY; + /** + le Viewer associe + */ + Viewer *viewer; + /** + la texture + */ + unsigned char *pixels; + /** + les sommets de la boite englobante projettes sur le plan + */ + std::vector projections; + /** + les coordonnees de textures + */ + float tCoord[8]; + /** + les normales du billboard + */ + Vector3 normals; + /** + la boite englobante + */ + std::vector box; + /** + resolution maximum du billboard + */ + int resMax; +private : + /// Fonction et variables utilisé pour l'affichage des informations + void drawText(void); + bool Binfo; + Vector3 position; + bool isLoad; + double time; + bool error; +}; + +#endif diff --git a/src/BillboardCloud.cpp b/src/BillboardCloud.cpp new file mode 100644 index 0000000..b305462 --- /dev/null +++ b/src/BillboardCloud.cpp @@ -0,0 +1,266 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + + +#include "BillboardCloud.h" + +BillboardCloud::BillboardCloud(Entity* entite,std::vector vect,Viewer*v,float ep,int reso): entity(entite),cam(v->getCamera()),viewer(v),isLoad(false), error(false), Binfo(false) +{ + //pour chaque plan on cree un Billboard + for(std::vector::iterator it = vect.begin();it!=vect.end();it++){ + Billboard *BB = new Billboard(*it, entity,ep,viewer,reso); + listBillboard.push_back(BB); + } +} + +BillboardCloud::BillboardCloud(const QString& filename,Viewer *v):viewer(v),isLoad(true), error(false), Binfo(false){ + QFile BBCFile(filename); + if(!BBCFile.open(QIODevice::ReadOnly)) + { + std::cerr << "erreur :chargement BillboardCloud : " << filename.toStdString() << std::endl; + return; + } + QTextStream in(&BBCFile); + QString header; + in>>header; + QString path=(filename.section(".bbc",0,0))+".png"; + Image im; + im = chargeImage(path.toAscii()); + if (im == NULL) + { + error=true; + return; + } + int nbBB = header.toInt(); + float texCoord[8]; + float coord[12]; + for(int i=0;i>header; + texCoord[j]=header.toFloat(); + } + for(int j=0;j<12;j++){ + in>>header; + coord[j]=header.toFloat(); + } + float f[3]; + for(int k=0;k<3;k++){ + in>>header; + f[k]=header.toFloat(); + } + Vector3 vect(f[0],f[1],f[2]); + Billboard *BB = new Billboard(im,viewer,coord,texCoord,vect); + listBillboard.push_back(BB); + } +} + + +BillboardCloud::~BillboardCloud(){ + +} + + +QString BillboardCloud::saveBillboardCloud(const QString &filename){ + QString body; + QString str; + + int count=0; + body=str.setNum(listBillboard.size())+"\n"; + while(!(filename.section('/',count,count)).isEmpty()) count++; + count--; + + int largeur=0,hauteur=0; + for(std::vector::iterator it=listBillboard.begin();it!=listBillboard.end();it++){ + if((*it)->getnX()>largeur) largeur = (*it)->getnX(); + hauteur += (*it)->getnY(); + } + unsigned char* image = new unsigned char[largeur * hauteur * 4]; + int h,l; + int index = 0; + float u,v,hauteurCourante=0.; + for(std::vector::iterator it=listBillboard.begin();it!=listBillboard.end();it++){ + l = (*it)->getnX() * 4; + h = (*it)->getnY(); + u=(l/4.)/largeur; + v=((float)h/(float)hauteur); + + hauteurCourante+=v; + + body=body+str.setNum(0.)+" "; + body=body+str.setNum(hauteurCourante)+"\n"; + + body=body+str.setNum(0.)+" "; + body=body+str.setNum(hauteurCourante - v)+"\n"; + + + body=body+str.setNum(u)+" "; + body=body+str.setNum(hauteurCourante-v)+"\n"; + + + body=body+str.setNum(u)+" "; + body=body+str.setNum(hauteurCourante)+"\n"; + + body=body+(*it)->getCoord(); + for(int i=0;igetPixels())[i*l+j]; + else if(j==l) image[index++]=((*it)->getPixels())[i*l+j-1]; + else image[index++] = 255; + } + + } + + } + Image ima; + ima= creeImage(image,largeur,hauteur,4); + imageSauvePng(ima,filename.toAscii()+".png"); + + return body; +} + +void BillboardCloud::drawGeometry(){ + for(std::vector::iterator it=listBillboard.begin();it!=listBillboard.end();it++){ + (*it)->drawBillboard(); + } + if (Binfo) drawText(); +} + + +Vector3 BillboardCloud::getCenterM(void) +{ + Vector3 center; + Vector3 centerBB; + std::vector::iterator ite; + float nb = (float)listBillboard.size(); + float x=0.,y=0., z=0.; + + for(std::vector::iterator it=listBillboard.begin();it!=listBillboard.end();it++) { + centerBB = (*it)->getCenter(); + x+= centerBB.x; + y+= centerBB.y; + z+= centerBB.z; + } + center.x=x/nb; + center.y=y/nb; + center.z=z/nb; + + return center; +} + +std::vector BillboardCloud::getVertexArray(){ + std::vector vect; + return vect; +} + + +void BillboardCloud::deleteVBO(){} + +void BillboardCloud::fillDensity(int coverage, Density *pDensity){} + + +/// Tout ce qui suit concerne l'affichage des informations + +void BillboardCloud::drawText() +{ + bool Ecolormat = glIsEnabled(GL_COLOR_MATERIAL); + bool Elight = glIsEnabled(GL_LIGHTING); + bool Etext = glIsEnabled(GL_TEXTURE_2D); + char strMsg[100] = {0}; + int taille; + char info[10]; + glDisable(GL_LIGHTING); + glDisable(GL_COLOR_MATERIAL); + glDisable(GL_TEXTURE_2D); + glPushMatrix(); + glLoadIdentity(); + if (error) + { + glColor3f(1.,0.2,0.2); + glRasterPos3f(position.x,position.y,position.z); + sprintf ( strMsg, "Erreur de chargement : Texture introuvable"); + + for (unsigned int i=0;i + +/** + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + +class BillboardCloud : public Entity +{ +public: + /** + @name BillboardCloud + @brief Construction d'un BillboardCloud + @param entite l'objet a simuler + @param vect les plans des Billboards + @param ep la distance entre le plan et les sommets qui vont etre pris en compte pour la copie des textures + @param v le Viewer dans lequel on travaille + @param reso la resolution maximum des billboards + */ + BillboardCloud(Entity* entite,std::vector vect,Viewer *v,float ep,int reso); + /** + @name BillboardCloud + @brief Chargement d'un BillboardCloud a partir d'un fichier texte + @param filename le fichier + @param v le Viewer dans lequel on travaille + */ + BillboardCloud(const QString& filename,Viewer *v); + /** + @name saveBillboardCloud + @return les informations a sauvegarder + */ + QString saveBillboardCloud(const QString &filename); + + virtual ~BillboardCloud(); + + /** @name setMode + * @brief Permet de définir le mode d'affichage en cour pour placer correctement les informations + * @param mode : le mode choisi + */ + void setMode(int mode, bool info); + + /** @name setTime + * @brief Affecte le temps passé à la création et au chargement du Billboard + * @param t : le temps passé + */ + void setTime(double t); +protected: + + virtual void drawGeometry(void); + virtual Vector3 getCenterM(void); + virtual std::vector getVertexArray(); + virtual void deleteVBO(); + virtual void afficheInfoM(int mode); + virtual void fillDensity(int coverage, Density *pDensity); + + /** + l'objet associe au billboard + */ + Entity* entity; + + /** + la liste des Billboard + */ + std::vector listBillboard; + /** + la camera de la scene + */ + Camera *cam; + /** + le Viewer associe + */ + Viewer *viewer; + +private : + /// Fonction et variables utilisé pour l'affichage des informations + void drawText(void); + bool Binfo; + Vector3 position; + bool isLoad; + double time; + bool error; +}; + + + diff --git a/src/Camera.cpp b/src/Camera.cpp new file mode 100644 index 0000000..375b1aa --- /dev/null +++ b/src/Camera.cpp @@ -0,0 +1,226 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "Camera.h" + +Camera::Camera() + : mCamX(1., 0., 0.), mCamY(0., 1., 0.), mCamZ(0., 0., -1.), + mPosition(0., 0., 2.), mDist(2.0), mFov(70.),mVectorUp(0., 1.0, 0.),mIsPerspective(true) +{ + mCamX.normalise(); + mCamY.normalise(); + mCamZ.normalise(); +} + + +Camera::Camera(const Vector3& viewDir, const Vector3& upDir, bool isPerspective) + : mCamY(upDir), mCamZ(viewDir), mDist(10.0), mFov(60.),mVectorUp(upDir),mIsPerspective(isPerspective) +{ + mCamZ.normalise(); + mCamX = mCamZ.crossProduct(mCamY); + mCamX.normalise(); + mCamY = mCamX.crossProduct(mCamZ); + mCamY.normalise(); + + mPosition = mCamZ*-10.0; +} + + +Camera::~Camera(){ +} + + +void Camera::renderGLStates() +{ + + // set the viewport + glViewport(mX, mY, mVpWidth, mVpHeight); + // set the projection matrix + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + float ratio = (float)mVpWidth/(float)mVpHeight; + + if (mIsPerspective){ + + gluPerspective(mFov, ratio, 0.05, 10000.); + mCamX.normalise(); + mCamY.normalise(); + mCamZ.normalise(); + } + else{ + //initialise le viewport et le glOrtho pour recuperer la texture + glViewport(mX, mY, nX, nY); + glOrtho(-pX/2.,pX/2.,-pY/2., pY/2.,0., epsilon*2.); + + } + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + Vector3 target(mPosition); + target += mDist * mCamZ; + gluLookAt( + mPosition.x, mPosition.y, mPosition.z, + target.x, target.y, target.z, + mCamY.x, mCamY.y, mCamY.z); +} + +void Camera::setViewportSize(int posX, int posY, int width, int height) +{ + mVpWidth = width; + mVpHeight = height; + mX=posX; + mY=posY; +} +int Camera::getWidth(void) +{ + return mVpWidth; +} +int Camera::getHeight(void) +{ + return mVpHeight; +} + +Vector3& Camera::getPosition(void) +{ + return mPosition; +} + +void Camera::setPosition(const Vector3& v) +{ + mPosition = v; +} + +void Camera::setDist(const float v) +{ + mDist = v; +} + +void Camera::polarRotate(float dTheta, float dPhi) +{ + if (mIsPerspective) { + + Vector3 diff = - mDist * mCamZ; + Vector3 target = mPosition - diff; + + Quaternion q0, q1; + q0.FromAngleAxis(dTheta, mCamY); + q1.FromAngleAxis(-dPhi, mCamX); + diff = (q1 * q0) * diff; + + mPosition = target + diff; + + mCamZ = -diff; + mCamZ.normalise(); + mCamX = mCamZ.crossProduct(mCamY); + // projection de mCamX sur le plan horizontal + //mCamX -= mVectorUp * mCamX.dotProduct(mVectorUp); + mCamX.normalise(); + mCamY = mCamX.crossProduct(mCamZ); + mCamY.normalise(); + mCamX = mCamZ.crossProduct(mCamY); + mCamX.normalise(); + } +} + +void Camera::polarZoom(float d) +{ + if(mDist>d) + { + mDist -= d; + mPosition += mCamZ * d; + } +} + +void Camera::localTranslate(const Vector3& t) +{ + mPosition += mCamX * t.x; + mPosition += mCamY * t.y; + mPosition += mCamZ * t.z; + if (!mIsPerspective) + if(mDist>t.z) + mDist -= t.z; + +} + +void Camera::localRotate(float dTheta, float dPhi) +{ + if (mIsPerspective) { + Quaternion q0, q1; + q0.FromAngleAxis(-dTheta, mCamY); + q1.FromAngleAxis(dPhi, mCamX); + mCamZ = (q0*q1) * mCamZ; + + mCamZ.normalise(); + mCamX = mCamZ.crossProduct(mCamY); + // projection de mCamX sur le plan horizontal + mCamX -= mVectorUp * mCamX.dotProduct(mVectorUp); + mCamX.normalise(); + mCamY = mCamX.crossProduct(mCamZ); + mCamY.normalise(); + mCamX = mCamZ.crossProduct(mCamY); + mCamX.normalise(); + } +} + +void Camera::reinit(float tx, float ty, float tz) + +{ + mCamX=Vector3(1., 0., 0.); + mCamY=Vector3(0., 1., 0.); + mCamZ=Vector3(0., 0., -1.); + mPosition=Vector3(0., 0., 2.); + mPosition+=Vector3(tx, ty, tz); + mDist=2.0; + mFov=70.; + mVectorUp=Vector3(0., 1.0, 0.); +} + +void Camera::setPerspective( bool b){ + mIsPerspective=b; +} + + +/** Nom: getValCam + * Utilit? : Retourne les param?tres de la cam?ra + * Param?tres : Aucun + * Sortie : un vector de Vector3, contenant les param?tre de la cam?ra + * - mCamX + * - mCamY + * - mCamZ + * - mPosition + * - mDistance + */ +std::vector Camera::getValCam(void) +{ + std::vector res; + res.push_back(mCamX); + res.push_back(mCamY); + res.push_back(mCamZ); + res.push_back(mPosition); + res.push_back(Vector3(mDist,0.,0.)); + return res; +} + +void Camera::setX(const Vector3& v){ + mCamX=v; +} + +void Camera::setY(const Vector3& v){ + mCamY=v; +} + +void Camera::setZ(const Vector3& v){ + mCamZ=v; +} + + +void Camera::setViewport2(int x, int y, float a, float b, float c){ + nX=x; + nY=y; + pX=a; + pY=b; + epsilon=c; +} diff --git a/src/Camera.h b/src/Camera.h new file mode 100644 index 0000000..30d3359 --- /dev/null +++ b/src/Camera.h @@ -0,0 +1,89 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _Camera_h_ +#define _Camera_h_ + +#include +#include +#include "Vector3.h" + + +/** + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + + +class Camera +{ +public: + + Camera(); + virtual ~Camera(); + Camera(const Vector3& viewDir, const Vector3& upDir, bool isPerspective = true); + virtual void renderGLStates(); + void setViewportSize(int posX, int posY, int width, int height); + int getWidth(void); + int getHeight(void); + void setPosition(const Vector3& v); + void setDist(const float v); + Vector3& getPosition(void); + std::vector getValCam(void); + void reinit(float tx, float ty, float tz); + void setPerspective(bool b); + /** + @name setX + @param v le nouveau vecteur X du repere camera + */ + void setX(const Vector3& v); + /** + @name setY + @param v le nouveau vecteur Y du repere camera + */ + void setY(const Vector3& v); + /** + @name setZ + @param v le nouveau vecteur Z du repere camera + */ + void setZ(const Vector3& v); + /** + @name setViewport2 + @param x largeur du viewport + @param y hauteur du viewport + @param a parametre pour la largeur du glOrtho + @param b parametre pour la hauteur du glOrtho + @param c parametre pour la profondeur du glOrtho + */ + void setViewport2(int x,int y, float a, float b,float c); + + virtual void polarRotate(float dTheta, float dPhi); + virtual void polarZoom(float d); + virtual void localTranslate(const Vector3& t); + virtual void localRotate(float dTheta, float dPhi); + protected: + Vector3 mCamX, mCamY, mCamZ; + Vector3 mPosition; + float mDist; + float mFov; + /** + les parametres du glOrtho + */ + float pX,pY,epsilon; + /** + les parametres du viewport + */ + int mVpWidth, mVpHeight,mX, mY,nX,nY; + Vector3 mVectorUp; + bool mIsPerspective; + +}; + +#endif + diff --git a/src/Color.cpp b/src/Color.cpp new file mode 100644 index 0000000..721b06d --- /dev/null +++ b/src/Color.cpp @@ -0,0 +1,18 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "Color.h" + +const Color Color::WHITE(1., 1., 1., 1.); +const Color Color::BLACK(0., 0., 0., 1.); +const Color Color::RED(1., 0., 0., 1.); +const Color Color::GREEN(0., 1., 0., 1.); +const Color Color::BLUE(0., 0., 1., 1.); +const Color Color::YELLOW(1., 1., 0., 1.); +const Color Color::GREY30(0.3, 0.3, 0.3, 1.); +const Color Color::GREY50(0.5, 0.5, 0.5, 1.); +const Color Color::GREY80(0.8, 0.8, 0.8, 1.); diff --git a/src/Color.h b/src/Color.h new file mode 100644 index 0000000..6bdd8d2 --- /dev/null +++ b/src/Color.h @@ -0,0 +1,176 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _Color_h_ +#define _Color_h_ + +/** + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + +class Color +{ +public: + float r, g, b, a; + Color(float _r=1., float _g=1., float _b=1., float _a=1.) + : r(_r), g(_g), b(_b), a(_a) + { + } + Color(const Color& c) + { + r = c.r; + g = c.g; + b = c.b; + a = c.a; + } + inline Color& operator = ( const Color& c ) + { + r = c.r; + g = c.g; + b = c.b; + a = c.a; + return *this; + } + inline Color operator * (float f) const + { + Color c; + c.r = r * f; + c.g = g * f; + c.b = b * f; + c.a = a; + return c; + } + inline Color& operator *= (float f) + { + r *= f; + g *= f; + b *= f; + a *= f; + return *this; + } + inline Color& operator += (const Color& c) + { + r += c.r; + g += c.g; + b += c.b; + a += c.a; + return *this; + } + inline operator float* () + { + return &r; + } + inline operator const float* () const + { + return &r; + } + inline void fromLerp(float t, const Color& c0, const Color& c1) + { + float t1 = (1.-t); + r = t1*c0.r + t*c1.r; + g = t1*c0.g + t*c1.g; + b = t1*c0.b + t*c1.b; + a = t1*c0.a + t*c1.a; + } + inline void fromBGRA(unsigned long rgba) + { + r = ((float)(rgba>>16 & 0xff))/255.; + g = ((float)(rgba>>8 & 0xff))/255.; + b = ((float)(rgba>>0 & 0xff))/255.; + a = ((float)(rgba>>24 & 0xff))/255.; + } + inline void fromRGBA(unsigned long rgba) + { + r = ((float)(rgba & 0xff))/255.; + g = ((float)(rgba>>8 & 0xff))/255.; + b = ((float)(rgba>>16 & 0xff))/255.; + a = ((float)(rgba>>24 & 0xff))/255.; + } + inline void fromRGB(unsigned long rgba) + { + r = ((float)(rgba & 0xff))/255.; + g = ((float)(rgba>>8 & 0xff))/255.; + b = ((float)(rgba>>16 & 0xff))/255.; + a = 1.; + } + inline void fromBGR(unsigned long rgba) + { + b = ((float)(rgba & 0xff))/255.; + g = ((float)(rgba>>8 & 0xff))/255.; + r = ((float)(rgba>>16 & 0xff))/255.; + a = 1.; + } + inline unsigned long toRGBA(void) const + { + unsigned char val8; + unsigned long val32 = 0; + + // Convert to 32bit pattern + // (ABRG = 8888) + + // Alpha + val8 = (unsigned char)(a * 255); + val32 = val8 << 24; + + // Blue + val8 = (unsigned char)(b * 255); + val32 += val8 << 16; + + // Green + val8 = (unsigned char)(g * 255); + val32 += val8 << 8; + + // Red + val8 = (unsigned char)(r * 255); + val32 += val8; + + + return val32; + } + inline unsigned long toABGR(void) const + { + unsigned char val8; + unsigned long val32 = 0; + + // Convert to 32bit pattern + // (RGBA = 8888) + + // Red + val8 = (unsigned char)(r * 255); + val32 = val8 << 24; + + // Green + val8 = (unsigned char)(g * 255); + val32 += val8 << 16; + + // Blue + val8 = (unsigned char)(b * 255); + val32 += val8 << 8; + + // Alpha + val8 = (unsigned char)(a * 255); + val32 += val8; + + return val32; + } + + static const Color WHITE; + static const Color BLACK; + static const Color RED; + static const Color GREEN; + static const Color BLUE; + static const Color GREY30; + static const Color GREY50; + static const Color GREY80; + static const Color YELLOW; +}; + + +#endif diff --git a/src/Density.cpp b/src/Density.cpp new file mode 100644 index 0000000..9c54a15 --- /dev/null +++ b/src/Density.cpp @@ -0,0 +1,692 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotmail.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "Density.h" +#include "math.h" +#include +#include "Vector3.h" +#include "Matrix4.h" + +#include "textfile.h" + +#define Pi 3.1416 + +Density::Density(const int nbRow, bool UseTex3D) + :DRow(nbRow),DensityTex3D(UseTex3D),minAlpha(0.0) +{ + _textureID[0]=0; + if ( nbRow%2!=0 && (nbRow/2)%2 != 0 || nbRow<=0) { + std::cout << "Taille de matrice de densitée incorrecte ! La taille doit être une puissance de 2." << std::endl; + Data=NULL; + DRow=0; + } + else { + int nbCell = nbRow*nbRow*nbRow ; + Data = new float [nbCell]; // Allocation du tableau + for (int i=0; iremoveShaders(); + delete [] Data; + Data = NULL; + _textureID[0] = 0; +} + +int Density::getRow() +{ + return DRow; +} + + +float Density::getElt(int coord) +{ + return Data[coord]; +} +float Density::getElt(int x, int y, int z) +{ + int coord = (x+(DRow*y)+(z*DRow*DRow)); + return Data[coord] ; +} + + + +void Density::setElt(int x, int y, int z, float c) +{ + int coord = (x+(DRow*y)+(z*DRow*DRow)); + Data[coord]=c; +} + + +void Density::setElt(int coord, float c) +{ + Data[coord]=c; +} + + +void Density::fill(int x, int y, int z, float alphaAdd) // x y z +{ + float c = this->getElt(x,y,z); + c += alphaAdd ; + this->setElt(x,y,z,c); +} + + +void Density::reset() +{ + Density::reset(0.0f); +} + + +void Density::reset(const float defVal) +{ + int nbCell = DRow*DRow*DRow ; + for (int i=0; i actuellement trace une sphère creuse dans la matrice + * ajoute une division du volume en suivant une courbe d'équation cubique. + */ +void Density::InitTest() +{ + // dessine un cercle + int rayon = (int)(DRow*(DRow/sqrt(DRow))) ; + int centre = DRow/2 ; + int tmp ; + for(int i=0; i= rayon-centre) + setElt(i,j,k,0.95); + } +} + + +void Density::initDraw() +{ + glGenTextures(1, _textureID); // On génére la texture + + // On initialiser les shaders pour la coloration + setShaders(); + //InitTest(); + + // Si en texture 2D + if (!DensityTex3D) + { + glBindTexture(GL_TEXTURE_2D, _textureID[0]); + /*glTexImage2D ( GL_TEXTURE_2D, //GLenum target, + 0, //GLint level, + GL_RGBA, // GLint internalFormat, + DRow, // GLsizei width, + DRow*DRow, // GLsizei height, + 0, // GLint border, + GL_RGBA, // GLenum format, + GL_FLOAT, // GLenum type, + Data); // const GLvoid * data + */ + // On préfèrera les mipmaps pour pouvoir + // utiliser des textures de grande taille. + gluBuild2DMipmaps(GL_TEXTURE_2D, + GL_ALPHA, + DRow, + DRow*DRow, + GL_ALPHA, + GL_FLOAT, + Data); + + glBindTexture(GL_TEXTURE_2D,0); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);// Linear Filtering GL_NEAREST_MIPMAP_LINEAR. + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_NEAREST);// Linear Filtering GL_LINEAR + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + } else { // Si en texture 3D + glBindTexture(GL_TEXTURE_3D, _textureID[0]); + glTexImage3D(GL_TEXTURE_3D, // enum target + 0, // int level + GL_ALPHA, // enum internalformat + DRow, + DRow, + DRow, + 0, // int border, + GL_ALPHA, // enum format + GL_FLOAT, // enum type, + Data); // const void* pixels + + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // GL_NEAREST GL_LINEAR + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // GL_NEAREST GL_LINEAR + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + } +} + + +void Density::drawDensity (Camera *camera) +{ + if (_textureID == 0) + std::cout << "drawDensity() : Draw's not initialized. Please run initDraw() before." << std::endl; + else + { + glDisable (GL_LIGHTING); + //glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL,GL_SEPARATE_SPECULAR_COLOR); + /* Alpha test : affiche les pixels qui ont un alpha suffisant */ + glEnable (GL_ALPHA_TEST); + glAlphaFunc (GL_GREATER, minAlpha); + /* BLENDING */ + glBlendFunc (GL_SRC_ALPHA,GL_ONE); + glEnable (GL_BLEND); + glDisable (GL_DEPTH_TEST); + /* La couleur de la texture remplace la couleur par defaut*/ + glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); // GL_MODULATE GL_REPLACE + + /* crée les plans texturés */ + if (!DensityTex3D) + drawSlicesTex2D (camera); + else + drawSlicesTex3D (camera); + drawBorder(); + + glDisable (GL_ALPHA_TEST); + glDisable (GL_BLEND); + glEnable (GL_DEPTH_TEST); + } +} + + +void Density::drawSlicesTex2D(Camera *camera) +{ + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, _textureID[0]); + + double haut, bas, gauche, droite, pos; + double div=1.0/DRow; + double div1=2.0/(DRow-1); + + if ((camera->getPosition()).z > 0 ) + { + // Traçage : a partir du dernier plan vers le premier + haut=1. ; bas=1. ; gauche=0. ; droite=1.;pos = -1.0; + for (int i=DRow; i>0 ; i--) + { + bas=haut; + haut-=div; + + glBegin(GL_QUADS); + glNormal3i(0,0,1); + glTexCoord2d(gauche,bas); glVertex3f( -1.f, -1.f, pos); // 0,1 + glTexCoord2d(droite,bas); glVertex3f( 1.f, -1.f, pos); // 1,1 + glTexCoord2d(droite,haut); glVertex3f( 1.f, 1.f, pos);// 1,0 + glTexCoord2d(gauche,haut); glVertex3f( -1.f, 1.f, pos);// 0,0 + glEnd(); + pos+=div1; + } + } + else + { + // Traçage : a partir du premier plan vers le dernier + haut=0. ,bas=0. ,gauche=0.,droite=1., pos=1.; + for (int i=DRow; i>0 ; i--) + { + haut=bas; + bas+=div; + + glBegin(GL_QUADS); + glNormal3i(0,0,-1); + glTexCoord2d(gauche,bas); glVertex3f( -1.f, -1.f, pos); // 0,1 + glTexCoord2d(droite,bas); glVertex3f( 1.f, -1.f, pos); // 1,1 + glTexCoord2d(droite,haut); glVertex3f( 1.f, 1.f, pos);// 1,0 + glTexCoord2d(gauche,haut); glVertex3f( -1.f, 1.f, pos);// 0,0 + glEnd(); + pos-=div1; + } + } + + glBindTexture(GL_TEXTURE_2D, 0); + glDisable(GL_TEXTURE_2D); +} + + +void Density::drawSlicesTex3D(Camera *cm) +{ + + glEnable(GL_TEXTURE_3D); + glBindTexture(GL_TEXTURE_3D, _textureID[0]); + + float pos = 1.5; + //float pos = -0.8; + float div1=3./(DRow-1); + // le tableau des points a tracer : + Vector3 Ptab [6]; + Vector3 Ttab [6]; + int nbpoint = 0 ; + +for (int i=DRow; i>0 ; i--) + { + // on génére le polygone + generatePolygon(nbpoint, Ptab, Ttab, cm, pos); + // on le rend convexe + makeConvexPolygon(nbpoint,Ptab,Ttab); + // et on trace les points + glBegin(GL_POLYGON); + //glBegin(GL_LINE_LOOP); + glColor3ub(255,255,255); + //glNormal3i(0,0,1); + for (int i=0; i &temp) +{ + float maxtemp=32000; + + int j=1; + float* CoordMax=this->convertMaxPlane(); + + float max=CoordMax[4]; + + float *coord = new float[4]; + for(int i=0;i<4;i++) coord[i]=CoordMax[i]; + temp.push_back(coord); + + + while(alpha*max<=maxtemp && jconvertMaxPlane(); + + maxtemp=CoordMax[4]; + + float *coord = new float[4]; + for(int i=0;i<4;i++) coord[i]=CoordMax[i]; + + if(maxtemp>alpha) + temp.push_back(coord); + + j++; + } +} + +float* Density::convertMaxPlane() +{ + + + //initialisation + int dim=this->getRow(); + int suppress = 3; + float* carthMaxPlane=new float[5]; + + //recherche de la coordonnées du maximum + float* densityCoordMax=this->extractMaxPlane(/*0,0,0,dim*/); + + + for(int covOfX = -suppress; covOfX <= suppress; covOfX++) + { + for(int covOfY = -suppress; covOfY <= suppress; covOfY++) + { + for(int covOfZ = -suppress; covOfZ <= suppress*10/(this->getDistanceMax()); covOfZ++) + { + if( densityCoordMax[0]+covOfX=0 && densityCoordMax[1]+covOfY>=0 && densityCoordMax[2]+covOfZ>=0) + { + + int neighbourDist=abs(covOfX); + if(neighbourDistsetElt( (int) densityCoordMax[0]+covOfX, (int) densityCoordMax[1]+covOfY, + (int) densityCoordMax[2]+covOfZ,0.); + } + } + } + } + + float phi =( ((densityCoordMax[0]/(this->getRow()-1))*3.1416 ) + ( (densityCoordMax[0]+1)/(this->getRow()-1)*3.1416) )/2; + float ro =( ((densityCoordMax[1]/(this->getRow()-1))*3.1416*2+3.1416 ) + ( (densityCoordMax[1]+1)/(this->getRow()-1)*3.1416*2+3.1416) )/2; + + float a=sin(phi)*cos(ro); + + float b=sin(phi)*sin(ro); + float c=cos(phi); + float d= ( densityCoordMax[2]/(this->getRow()) )*( this->getDistanceMax() ); + + carthMaxPlane[0]=a; + carthMaxPlane[1]=b; + carthMaxPlane[2]=c; + carthMaxPlane[3]=d; + carthMaxPlane[4]=densityCoordMax[3]; + + return carthMaxPlane; +} + + + +float* Density::extractMaxPlane(){ + + float* planeMax=new float[4]; + planeMax[3]=0.; + for(int i=0;iDRow;i++) + { + for(int j=0;jDRow;j++) + { + for(int k=0;kDRow;k++) + { + float c = this->getElt(i,j,k); + if(planeMax[3] cam = cm->getValCam(); + Vector3 mCamZ = cam.at(3) ; + + mCamZ.normalise(); + + if (mCamZ.z != 0) + { + Ztab[0]= -(pos + mCamZ.x + mCamZ.y)/mCamZ.z ; // 1 1 + Ztab[1]= -(pos - mCamZ.x + mCamZ.y)/mCamZ.z ; // -1 1 + Ztab[2]= -(pos - mCamZ.x - mCamZ.y)/mCamZ.z ; // -1 -1 + Ztab[3]= -(pos + mCamZ.x - mCamZ.y)/mCamZ.z ; // 1 -1 + } + if (mCamZ.x != 0) + { + Xtab[0]= -(pos + mCamZ.y + mCamZ.z)/mCamZ.x ;// 1 1 + Xtab[1]= -(pos - mCamZ.y + mCamZ.z)/mCamZ.x ;// -1 1 + Xtab[2]= -(pos - mCamZ.y - mCamZ.z)/mCamZ.x ;// -1 -1 + Xtab[3]= -(pos + mCamZ.y - mCamZ.z)/mCamZ.x ;// 1 -1 + } + if (mCamZ.y != 0) + { + Ytab[0]= -(pos + mCamZ.x + mCamZ.z)/mCamZ.y ;// 1 1 + Ytab[1]= -(pos - mCamZ.x + mCamZ.z)/mCamZ.y ;// -1 1 + Ytab[2]= -(pos - mCamZ.x - mCamZ.z)/mCamZ.y ;// -1 -1 + Ytab[3]= -(pos + mCamZ.x - mCamZ.z)/mCamZ.y ;// 1 -1 + } + // on a calculé tout nos points, on filtres ceux qui correspondent a des points a tracer : + n=0; + for (int i=0 ; i < 4 ; i++) + { + if (Ztab[i]>-1 && Ztab[i]<=1) + { + Ptab[n]=Vector3(helpPtab1[i], helpPtab2[i], Ztab[i]); + Ttab[n]=Vector3(helpTtab1[i], helpTtab2[i], (Ztab[i]+1.)/2.); + n++; + } + if (Ytab[i]>-1 && Ytab[i]<=1) + { + Ptab[n]=Vector3(helpPtab1[i], Ytab[i], helpPtab2[i]); + Ttab[n]=Vector3(helpTtab1[i], (Ytab[i]+1.)/2., helpTtab2[i]); + n++; + } + if (Xtab[i]>-1 && Xtab[i]<=1) + { + Ptab[n]=Vector3(Xtab[i], helpPtab1[i], helpPtab2[i]); + Ttab[n]=Vector3((Xtab[i]+1.)/2., helpTtab1[i], helpTtab2[i]); + n++; + } + } + //on connait aussi le nombre de points a tracer + nbPoint = n ; +} + +void Density::makeConvexPolygon ( int n, Vector3 *Ptab, Vector3 *Ttab ) +{ + int helptab[6] = {0,-1,-1,-1,-1,-1}; //comporte le n° de sommets contenu dans Ptab mais ici ordonnée + int helptab2[6] = {0,-1,-1,-1,-1,-1}; //pour se souvenir quel vecteur est mis dans le contour + Vector3 centre = Vector3 ( 0,0,0 ) ; // centre de gravité des points + if ( n !=0 ) + { + for ( int i=0; i 0 && tmpnorm.x > 0) + &&(normale.y < 0 && tmpnorm.y< 0)||(normale.y > 0 && tmpnorm.y > 0) + &&(normale.z < 0 && tmpnorm.z< 0)||(normale.z > 0 && tmpnorm.z > 0)) + || normale == Vector3(0,0,0)) + { + min = tmp ; + place = i; + normale = tmpnorm; + } + } + } + } + // pour le prochain tour on partira du meilleur sommet + if ( place != -1 ) + { + vect1=Ptab[place]-centre; // le meilleur dernierement trouvé + helptab[j]=place; // on le met dans le contour a sa place + helptab2[place]=place; // et on se souvient qu'il est dans le contour + } + place = -1; + min = Pi; + } + // on place les points dans l'ordre de helptab + Vector3 tmptab[2][6] ; + for(int i=0 ; idistMax=dmax; +} + + +float Density::getDistanceMax() +{ + return this->distMax; +} diff --git a/src/Density.h b/src/Density.h new file mode 100644 index 0000000..a24ce8e --- /dev/null +++ b/src/Density.h @@ -0,0 +1,199 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef _Density_h_ +#define _Density_h_ + +#include +#include +#include +#include "Color.h" +#include "Camera.h" +#include + +/** Density class. Density + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + + +class Density +{ + public: + Density(const int nbRow, bool UseTex3D=false); + ~Density(); + + /** @name getElt + * Renvoie la valeur d'un élément de la matrice + * @param x : coordonné x de l'élément + * @param y : coordonné y de l'élément + * @param z : coordonné z de l'élément + * @return float + */ + float getElt(int x, int y, int z); + + /** @name getElt + * Renvoie la valeur d'un élément de la matrice + * @param coord : coordonné x de l'élément Attention il faut parcourir la matrice de 4 en 4. + * @return float + */ + float getElt(int coord); + /** @name setElt + * Attribue une valeur a un élément de la matrice + * @param x : coordonné x de l'élément + * @param y : coordonné y de l'élément + * @param z : coordonné z de l'élément + * @param c : la valeur + */ + void setElt(int x, int y, int z, float elt); + + /** @name setElt + * Attribue une valeur a un élément de la matrice + * @param coord : coordonné de l'élément (ici la matrice est considérée comme un long tableau) + * @param c : la valeur + */ + void setElt(int coord, float c); + + /** @name fill + * Remplis un élément de la matrice en incrémentant l'alpha + * @param x : coordonné x de l'élément + * @param y : coordonné y de l'élément + * @param z : coordonné z de l'élément + * @param alphaAdd : intensité à ajouter à l'alpha + */ + void fill(int x, int y, int z, float alphaAdd); + + /** @name setDistanceMax + * Définit le plan de l'objet le plus éloigné du centre, cela est nécessaire pour remplir la matrice de densité + * @param dmax : valeur de cette distance maximale + */ + void setDistanceMax(float dmax); + + + /** @name getDistanceMax + * Restitue la valeur de la distance maximale d'un plan cela est nécessaire lors de l'extraction du maximum + * afin de retrouver notre équation de plan + * @return this->distMax : la valeur de la distance maximum + */ + float getDistanceMax(); + + /** + * @name convertMaxPlane + * @brief Récupère le plan d'intensité maximal + * @return maxPlane : le plan d'intensité maximale + */ + float* convertMaxPlane(); + + /** + * @name extractAllMaxPlane + * @brief Récupère les plans d'intensité maximal + * @param alpha : valeur limite pour extraire un plan en tant que plan max + * @param billboard : nombre de plan max à retirer + * @param listMaxPlan : la liste de tous les plans max (vide a l'origine) + */ + void extractAllPlane(float alpha,int billboard, std::vector &listMaxPlan); + + /** @name getRow + * Retourne la taille de la Densité + */ + int getRow(); + + /** + * @name reset + * Toutes les valeurs de la densité sont mis a 0.0 + */ + void reset(); + + /** + * @name reset + * Permet de remplir la densité avec une valeur par defaut + * @param defVal : valeur de remplissage + */ + void reset(float defVal); + + /** @name initDraw + * Crée les textures necessaires pour le rendu. + */ + void initDraw(); + + /** + * @name drawDensity + * @brief Trace la densité + * @param camera : La camera de la scéne -> permet de récupérer sa positon + */ + void drawDensity(Camera *camera); + + /** + * @name setMinAlpha + * modifie la valeur alpha du blending lors de + * l'affichage de la densité + */ + void setMinAlpha(float minf); + + // Provisoire + void InitTest(); + + void removeShaders(); + private : + + /** + * @name extractMaxPlane + * @brief Récupère le plan d'intensité maximal de la matrice de densité + * @return MaxPlane : le plan d'intensité maximale + */ + float* extractMaxPlane(); + + /** + * @name drawSlicesTex2D + * Trace des Slices de la matrice de densité en utilisant une texture 2D + * Les slices sont ordonnées pour être tracé du plus loin au plus prés. + */ + void drawSlicesTex2D(Camera *camera); + + /** + * @name drawSlicesTex3D + * Trace des slices dans le Volume de la texture 3D + * @param c : camera. + */ + void drawSlicesTex3D(Camera *camera); + + /** + * @name drawBorder + * Trace un cadre autout de la Densité + * en jaune : le cotés des tranches + * en rouge : quand on est en face + */ + void drawBorder(); + void generatePolygon(int & n, Vector3 *Ptab, Vector3 *Ttab, Camera *cm, float pos); + void makeConvexPolygon(int n, Vector3 *Ptab, Vector3 *Ttab); + void coloring(); + void setShaders(); + protected: + int DRow; + bool DensityTex3D ; + GLfloat minAlpha ; + float * Data; + unsigned int _textureID[1]; + GLuint mTexId; + GLuint mVertShader, mFragShader, mProgShader; + float distMax; +}; +#endif diff --git a/src/DensityViewer.cpp b/src/DensityViewer.cpp new file mode 100644 index 0000000..98fd8e7 --- /dev/null +++ b/src/DensityViewer.cpp @@ -0,0 +1,171 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "DensityViewer.h" + +DensityViewer::DensityViewer(int nbRowDensity, bool isT3D, Scene *parentScene) + :QMainWindow(), mShowFps(false), mDensityWidget(NULL), pScene(parentScene), numScene(1), pDensity(NULL), isTex3D(isT3D) +{ + ui.setupUi(this); + + // Init QGL + QGLFormat format; + format.setDoubleBuffer(true); + format.setDepth(true); + format.setRgba(true); + format.setAlpha(true); + format.setStencil(true); + format.setStereo(false); + QGLFormat::setDefaultFormat(format); + + // Chargement viewer en fenètre Main + mViewer = new Viewer(this); + mViewer->setFocus(); + setCentralWidget(mViewer); + // Attachement d'une scène au viewer + mScene = new Scene(); + + mViewer->attachScene(mScene, NULL); + + // Création de la densité + Density * pDensity = new Density(nbRowDensity, isTex3D); + // Création de la densité de l'objet + pScene->fDensity(0,pDensity); + attacheDensity(pDensity); + mViewer->setRotatePossible( false); + // /!\ Ne Pas Modifier la fenètre ICI ! Utiliser QtDesigner et le .ui ! + // Action de la fenêtre Main + connect(mViewer, SIGNAL(glInitialized()), this, SLOT(createScene())); + connect(ui.actionExit, SIGNAL(triggered()), this, SLOT(exit())); + connect(ui.actionDensityON,SIGNAL(triggered()), this, SLOT(showDensity())); + connect(ui.actionDensityOFF,SIGNAL(triggered()), this, SLOT(removeDensity())); +} + +void DensityViewer::closeEvent(QCloseEvent *event) +{ + (mDensityWidget->widget())->close(); + removeDockWidget(mDensityWidget); + mViewer->setRotatePossible(true); + this->removeDensity(); + event->accept(); +} + +void DensityViewer::exit() +{ + this->removeDensity(); + this->hide(); +} + +void DensityViewer::createScene (void) +{ + GLenum err = glewInit(); + if (GLEW_OK != err) + { + std::cout << "Erreur !! GlewInit : " << glewGetErrorString(err) << std::endl; + } + + showDensity(); +} + + +/** Nom: fileCleanScene + * Fct : efface la scène + */ +void DensityViewer::fileCleanScene() +{ + mScene->remove(); + Camera *mpCamera = mViewer->getCamera() ; + mpCamera->reinit(0,0,0); + numScene=1; + mViewer->selectViewPort(numScene); + mViewer->changeMode(0); + mViewer->updateGL(); +} + + +/** Nom: showDensity + * Fct : Appel la fenêtre pour afficher la densité + */ +void DensityViewer::showDensity() +{ + + if (pDensity != NULL ) + { + //mScene->fDensity(0,pDensity); + pDensity->initDraw(); + mViewer->freeDensity(); + mViewer->attachDensity(pDensity); + + //Ajout d'un widget + mDensityWidget = new QDockWidget("Densité minimale", this,0); + mDensityWidget->setFloating(true); + QDoubleSpinBox *w = new QDoubleSpinBox(mDensityWidget); + w->setValue(0); + w->setRange(0,1); + w->setSingleStep(0.01); + mDensityWidget->setWidget(w); + addDockWidget(Qt::RightDockWidgetArea, mDensityWidget); + + connect(w, SIGNAL(valueChanged(double)), this, SLOT(alphaChange(double))); + } +} + +void DensityViewer::alphaChange(double d) +{ + pDensity->setMinAlpha((float)d); + mViewer->updateGL(); +} + + +/** Nom : removeDensity + * Fct : Efface la densité + */ +void DensityViewer::removeDensity() +{ +// mViewer->freeDensity(); +// mViewer->updateGL(); + if (pDensity!=NULL) + { + delete pDensity; + } + pDensity=NULL; + + if (mScene!=NULL) + { + delete mScene; + } + mScene=NULL; + + if (mViewer!=NULL) + { + delete mViewer; + } + mViewer=NULL; +} + +DensityViewer::~DensityViewer() +{ + this->removeDensity(); +} + +void DensityViewer::attacheDensity(Density * mDensity) +{ + pDensity = mDensity; +} diff --git a/src/DensityViewer.h b/src/DensityViewer.h new file mode 100644 index 0000000..b607e3b --- /dev/null +++ b/src/DensityViewer.h @@ -0,0 +1,75 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef DENSITYVIEWER_H +#define DENSITYVIEWER_H + +#include + +#include +#include "Light.h" +#include "Vector3.h" +#include "Entity.h" +#include "Material.h" +#include "TextureLayer.h" +#include "Mesh.h" +#include "Density.h" +#include "ui_W_Density.h" +#include "Viewer.h" +#include "Scene.h" + + +/** + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + + +class DensityViewer :public QMainWindow +{ + Q_OBJECT + + public: + DensityViewer(int nbRowDensity, bool isT3D, Scene *parentScene); + ~DensityViewer(); + void attacheDensity(Density * pDensity); + + protected: + void closeEvent(QCloseEvent *event); + private slots: + void createScene(void); + void fileCleanScene(); + void showDensity(); + void removeDensity(); + void alphaChange(double d); + void exit(); + private: + Ui::DensityWindow ui; + bool mShowFps; + Viewer *mViewer; + QDockWidget *mDensityWidget; + Scene *mScene, *pScene; + Entity *bbc ; + int numScene; + Density * pDensity; + bool isTex3D; +}; + +#endif diff --git a/src/Entity.cpp b/src/Entity.cpp new file mode 100644 index 0000000..e551d0a --- /dev/null +++ b/src/Entity.cpp @@ -0,0 +1,134 @@ + +#include "Entity.h" +#include "Material.h" + + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +uint Entity::msEntitiesCount = 0; + +Entity::Entity(const QString& name) + : mName(name), mpMaterial(&Material::Default) +{ + if(mName=="") + { + mName = QString("Object%1").arg(msEntitiesCount++); + } + thetaX=0.; + thetaY=0.; + thetaZ=0.; +} +//-------------------------------------------------------------------------------- +Material* Entity::getMaterial(void) const +{ + return mpMaterial; +} +void Entity::setMaterial(Material* mat) +{ + mpMaterial = mat; +} +//-------------------------------------------------------------------------------- +void Entity::setTransform(const Transform& t) +{ + mTransform = t; +} +const Transform& Entity::getTransform(void) +{ + return mTransform; +} +void Entity::applyTransform(void) const +{ + mTransform.multCurrentMatrix(); +} +//-------------------------------------------------------------------------------- +void Entity::render(bool activateMaterial /* = true */) +{ + float tmpX=getCenter()[0],tmpY=getCenter()[1],tmpZ=getCenter()[2]; + + mpMaterial->activate(!activateMaterial); + glPushMatrix(); + + mTransform.multCurrentMatrix(); + + glTranslatef(tmpX,tmpY,tmpZ); + glRotatef (thetaX,1.,0.,0.); + glRotatef (thetaY,0.,1.,0.); + glRotatef (thetaZ,0.,0.,1.); + glTranslatef(-tmpX,-tmpY,-tmpZ); + + drawGeometry(); + + glPopMatrix(); + + mpMaterial->release(!activateMaterial); +} + +Vector3 Entity::getCenter(void) +{ + return getCenterM(); +} + +/** Nom: Rotation + * Utilité : Effectue une rotation a l'aide du clic droit de la souris + * Paramètres : dx : mouvement horizontale de la souris + * dy : mouvement verticale de la souris + * camParam : Paramètres de la caméra : + * camParam[0] : mCamX + * camParam[1] : mCamY + * camParam[2] : mCamZ + * camParam[3] : mPosition + * camParam[4][camParam[3]0] : mDist + * Sortie : l'objet à effectué une rotation + */ +void Entity::Rotation(float dx, float dy, std::vector camParam) +{ + if(camParam[3][0]*camParam[3][0] > camParam[3][2]*camParam[3][2]) + thetaZ+=camParam[2][0]*dy*-30.; + else + thetaX+=camParam[0][0]*dy*-30.; + + thetaY+=dx*30.; + + if (thetaX>360.) thetaX=0.; + if (thetaY>360.) thetaY=0.; + if (thetaZ>360.) thetaZ=0.; + if (thetaX<0.) thetaX=360.; + if (thetaY<0.) thetaY=360.; + if (thetaZ<0.) thetaZ=360.; + +} + +std::vector Entity::getVertexArrayE(){ + return getVertexArray(); +} + +/** Nom : deleteMesh + * Fct : détruit le VBO lors de la suppression d'une Mesh + */ +void Entity::deleteMesh(){ + deleteVBO(); +} + + +/** Nom : afficheInfo + * Fct : Appel la fonction pour afficher les informations à l'écran + * @param split: Indique quel mode est activée + * (normal=0, split screen=1, fusion(viewport 1)=2, fusion(viewport 2)=3) + */ +void Entity::afficheInfo(int split){ + afficheInfoM(split); +} + +/** Nom : fDensity + * Fct : Appel la fonction pour créer la matrice de densité d'un objet + * @param coverage : indice de couverture + * @param pDensity : matrice de densité + */ +void Entity::fDensity(int coverage, Density *pDensity) +{ + fillDensity(coverage, pDensity); +} diff --git a/src/Entity.h b/src/Entity.h new file mode 100644 index 0000000..84862c8 --- /dev/null +++ b/src/Entity.h @@ -0,0 +1,83 @@ +#ifndef _Entity_h_ +#define _Entity_h_ + + +#include +#include "Transform.h" +#include +#include +#include "Vector3.h" +#include "Density.h" + +class Material; + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + + +/** Classe abstraite représentant un objet dans la scène. + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + +class Entity +{ +public: + + Entity(const QString& name = ""); + + virtual ~Entity() {}; + + inline const QString& getName(void) const + { + return mName; + } + float thetaX,thetaY,thetaZ; + Material* getMaterial(void) const; + void setMaterial(Material* mat); + + void setTransform(const Transform& t); + const Transform& getTransform(void); + void applyTransform(void) const; + + void Rotation(float dTheta, float dPhi, std::vector camParam); + /** méthode à appeler pour tracer l'objet + */ + virtual void render(bool activateMaterial = true); + virtual Vector3 getCenter(void); + virtual std::vector getVertexArrayE(); + virtual void deleteMesh(void); + void afficheInfo(int split); + void fDensity(int coverage, Density *pDensity); +protected: + + /** Méthode chargée du tracée de la géométrie de l'objet. + */ + virtual void drawGeometry(void) = 0; + virtual Vector3 getCenterM(void)=0; + virtual std::vector getVertexArray()=0; + virtual void deleteVBO() = 0; + virtual void afficheInfoM(int split) = 0; + virtual void fillDensity(int coverage, Density *pDensity)=0; + QString mName; + + /** Stock le matériau de l'objet. + Un mére materiau peut être partagée entre plusieurs objets. + */ + Material* mpMaterial; + + /** Position, orientation et mise à l'echelle de l'objet. + */ + Transform mTransform; + + static uint msEntitiesCount; + +}; + + +#endif diff --git a/src/Image.cpp b/src/Image.cpp new file mode 100644 index 0000000..f507293 --- /dev/null +++ b/src/Image.cpp @@ -0,0 +1,438 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +/*-------------------------------------------------------------------- + -- Introduction a OpenGL + -- Master 1 Informatique + -- UPS + -- + -- Mathias Paulin 2006 + -- + -------------------------------------------------------------------*/ + +#include "Image.h" + +#include + +#include +#include + +#include + + +#include +#include + +/*------------------------------------------------------------------*/ +/* Definition du type complet */ + + +typedef struct _image { + int width; + int height; + int depth; + unsigned char *pixels; +} internalImageRepresentation; + +/*------------------------------------------------------------------*/ +/* fonctions de chargement d'une image */ + +/*------------------------------------------------------------------*/ + + +/*------------------------------------------------------------------*/ +/* PNG support */ +static double get_gamma_exp(void) +{ + static double default_exponent = 2.2; + static int set = 0; + if (! set) + { + #if defined(NeXT) + default_exponent = 1.0; + #elif defined(sgi) + FILE *infile; + default_exponent = 1.3; + if (infile = fopen("/etc/config/system.glGammaVal", "r")) + { + double sgi_gamma; + char fooline[80]; + fgets(fooline, sizeof(fooline), infile); + fclose(infile); + sgi_gamma = atof(fooline); + if (sgi_gamma > 0.0) + default_exponent = 2.2 / sgi_gamma; + } + #elif defined(Macintosh) + default_exponent = 1.5; + #endif + set = 1; + } + return default_exponent; +} + +int loadPng(internalImageRepresentation *imageDest, const char *localFileName) +{ + png_structp png_ptr; + png_infop info_ptr; + png_uint_32 width, height; + int bit_depth, color_type, interlace_type; + int bytes_per_row, row; + int gray_palette; + unsigned char *pixels = 0, **rows = 0; + unsigned int i; + + FILE *fp=fopen(localFileName,"rb"); + if (fp==NULL) return 0; + + png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0); + + if (png_ptr == NULL) return 0; + + info_ptr = png_create_info_struct(png_ptr); + if (info_ptr == NULL) + { + png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + return 0; + } + + if (setjmp(png_ptr->jmpbuf)) + { + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + + if (pixels) free(pixels); + if (rows) free(rows); + + return 0; + } + + png_init_io(png_ptr, fp); + + png_read_info(png_ptr, info_ptr); + + png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, + &interlace_type, NULL, NULL); + + imageDest->depth = png_get_channels(png_ptr, info_ptr); + + png_set_strip_16(png_ptr); + + png_set_packing(png_ptr); + + if (color_type == PNG_COLOR_TYPE_PALETTE) + { + png_set_expand(png_ptr); + imageDest->depth = 3; + } + + if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) + png_set_expand(png_ptr); + + if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) + { + png_set_expand(png_ptr); + ++(imageDest->depth); + } + + gray_palette = 0; + if (color_type == PNG_COLOR_TYPE_PALETTE) + { + int n, num_palette; + png_colorp palette; + if (png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette)) + { + gray_palette = 1; + for (n=0; ndepth * width; + + pixels = (unsigned char*) malloc(bytes_per_row * height); + rows = (unsigned char**) malloc(height * sizeof(char *)); + if (pixels == 0 || rows == 0) + { + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + return 0; + } + + for (row=0; row<(int)height; ++row) + rows[row] = &pixels[row * bytes_per_row]; + + png_read_image(png_ptr, rows); + + png_read_end(png_ptr, info_ptr); + + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + + free(rows); + + if (gray_palette) + { + int n, np = width * height; + if (imageDest->depth == 3) + { + for (n=1; ndepth = 1; + } + else if (imageDest->depth == 4) + { + for (n=0; ndepth = 2; + } + } + + imageDest->width = width; + imageDest->height = height; + imageDest->pixels = (unsigned char *)malloc(row * bytes_per_row); +// + for (i=0;iheight ;i++) + #ifdef WIN32 + memcpy(&(imageDest->pixels[i*bytes_per_row]),&(pixels[bytes_per_row *(imageDest->height-i-1)]),bytes_per_row); + #else + bcopy(&(pixels[bytes_per_row *(imageDest->height-i-1)]),&(imageDest->pixels[i*bytes_per_row]),bytes_per_row); + #endif +// #else +// for (i=0;iheight ;i++) +// #ifdef WIN32 +// memcpy(&(imageDest->pixels[i*bytes_per_row]),&(pixels[i*bytes_per_row]),bytes_per_row); +// #else +// bcopy(&(pixels[i*bytes_per_row]),&(imageDest->pixels[i*bytes_per_row]),bytes_per_row); +// #endif +// +// #endif + free(pixels); + + fclose(fp); + return 1; +} + +int write_png(const char *file_name, unsigned char *image, int width, int height, int depth) +{ + FILE *fp; + png_structp png_ptr; + png_infop info_ptr; + int k; + png_bytep *row_pointers; + /* open the file */ + fp = fopen(file_name, "wb"); + if (fp == NULL) + return 0; + /* Create and initialize the png_struct with the desired error handler + * functions. If you want to use the default stderr and longjump method, + * you can supply NULL for the last three parameters. We also check that + * the library version is compatible with the one used at compile time, + * in case we are using dynamically linked libraries. REQUIRED. + */ + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) + { + fclose(fp); + return 0; + } + /* Allocate/initialize the image information data. REQUIRED */ + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) + { + fclose(fp); + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + return 0; + } + /* Set error handling. REQUIRED if you aren't supplying your own + * error hadnling functions in the png_create_write_struct() call. + */ + if (setjmp(png_ptr->jmpbuf)) + { + /* If we get here, we had a problem writing the file */ + fclose(fp); + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + return 0; + } + /* set up the output control if you are using standard C streams */ + png_init_io(png_ptr, fp); + /* Set the image information here. Width and height are up to 2^31, + * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on + * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY, + * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB, + * or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or + * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST + * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED + */ + switch (depth) { + case 1: + png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_GRAY,\ + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + break; + case 2: + png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_GRAY_ALPHA,\ + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + break; + case 3: + png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB,\ + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + break; + case 4: + png_set_IHDR(png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB_ALPHA,\ + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + break; + default: + printf("Profondeur de couleur non support? pour la sauvegarde en png.\n"); + } + + /* Write the file header information. REQUIRED */ + png_write_info(png_ptr, info_ptr); + /* The easiest way to write the image (you may have a different memory + * layout, however, so choose what fits your needs best). You need to + * use the first method if you aren't handling interlacing yourself. + */ + row_pointers= (png_bytep *)malloc(sizeof(png_bytep) *height); + for (k = 0; k < height; k++) + row_pointers[k] = image + k*width*depth; + /* write out the entire image data in one call */ + png_write_image(png_ptr, row_pointers); + /* It is REQUIRED to call this to finish writing the rest of the file */ + png_write_end(png_ptr, info_ptr); + /* clean up after the write, and free any memory allocated */ + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + /* close the file */ + fclose(fp); + /* that's it */ + free (row_pointers); + return (1); +} + + +/*------------------------------------------------------------------*/ +/* fonction exportee par le module */ +#define MAX_STRING 2048 +Image chargeImage(const char *path) +{ + #ifdef WIN32 + char drive[MAX_STRING]; + char dir[MAX_STRING]; + char fname[MAX_STRING]; + char ext[MAX_STRING]; + #else + char ext[MAX_STRING]; + #endif + + Image newImage=(Image)malloc(sizeof(internalImageRepresentation)); + + #ifdef WIN32 + _splitpath( path, drive, dir, fname, ext ); + #else + strcpy(ext,strrchr(path,'.')); + #endif + + if ( (strcmp(ext,".png")==0) || (strcmp(ext,".PNG")==0) ) { + if (loadPng( newImage, path ) ) { + return (newImage); + } else { + return (NULL); + } + } + free (newImage); + return (NULL); +} +#undef MAX_STRING + +Image creeImage(unsigned char *pixels, int width, int height, int depth) +{ + Image newImage=(Image)malloc(sizeof(internalImageRepresentation)); + newImage->pixels=pixels; + newImage->width=width; + newImage->height=height; + newImage->depth=depth; + return (newImage); +} + +void detruireImage(Image *imageADetruire) +{ + free ((*imageADetruire)->pixels); + free (*imageADetruire); + *imageADetruire=NULL; +} + +void imageSauvePng(Image image, const char* path) +{ + + unsigned int i; + unsigned char *zap_image = (unsigned char*)malloc(image->width*image->height*image->depth*sizeof(unsigned char)); + + int bytes_per_row = image->width*image->depth; + for (i=0;iheight ;i++) + #ifdef WIN32 + memcpy(&(zap_image[i*bytes_per_row]),&(image->pixels[bytes_per_row*(image->height-i-1)]),bytes_per_row); + #else + bcopy(&(image->pixels[bytes_per_row*(image->height-i-1)]),&(zap_image[i*bytes_per_row]),bytes_per_row); + #endif + + if ( !write_png(path, zap_image, image->width,image->height,image->depth) ) + printf ("Probleme d'ecriture ... \n"); + + free (zap_image); +} + +unsigned char *imageGetPixels(Image image) +{ + return (image->pixels); +} + +int imageGetWidth(Image image) +{ + return (image->width); +} + +int imageGetHeight(Image image) +{ + return (image->height); +} + +int imageGetDepth(Image image) +{ + return (image->depth); +} + + + + + + \ No newline at end of file diff --git a/src/Image.h b/src/Image.h new file mode 100644 index 0000000..216ff3a --- /dev/null +++ b/src/Image.h @@ -0,0 +1,97 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +/*-------------------------------------------------------------------- + -- Introduction a OpenGL + -- Master 1 Informatique + -- UPS + -- + -- Mathias Paulin 2006 + -- + -------------------------------------------------------------------*/ +#ifndef __ImageTexture__ +#define __ImageTexture__ + +/** \addtogroup Image + + \bug A voir +*/ +/*@{*/ + +/** Type opaque Image. +*/ +typedef struct _image *Image; + +/** Cr?ation d'une image. + L'image cr??e sera charg?e a partir du fichier dont + le nom est pass? en param?tre. Les formats support?s sont : + - JPEG (attention, compr?ssion avec perte). + - PNG (conseill?, le plus g?n?ral). + \param path chemin d'acc?s ? l'image. + \return l'image charg?e, NULL si erreur. +*/ +Image chargeImage(const char *path); + +/** Cr?ation d'une image. + Cr?ation de la structure Image a partir d'un tableau de width*height pixels, + chaque pixel etant cod? par depth unsigned char. + Le tableau pixels contient l'image rang?e par ligne . Le pixel (i,j) + comence donc ? l'adresse pixels + (i*width*depth) + j*depth . + + \attention Si la taille de pixels n'est pas width*height*depth, il y aura + segmentation fault, voire pire!!! + + \param pixels tableau des pixels. + \param width largeur de l'image. + \param height hauteur de l'image. + \param depth profondeur de l'image. + +*/ +Image creeImage(unsigned char *pixels, int width, int height, int depth); + +/** Sauvegarde de l'image au format png. + \param image image ? sauver. + \param path nom du fichier destination. +*/ +void imageSauvePng(Image image, const char* path); + +/** Lib?ration de la structure image. +*/ +void detruireImage(Image *imageADetruire); + +/** Acces au tableau de pixels. +*/ +unsigned char *imageGetPixels(Image image); + +/** Acces ? la largeur de l'image. +*/ +int imageGetWidth(Image image); + +/** Acces ? la hauteur de l'image. +*/ +int imageGetHeight(Image image); + +/** Acces ? la profondeur de l'image. +*/ +int imageGetDepth(Image image); + +/** @} end */ + + +#endif diff --git a/src/Light.cpp b/src/Light.cpp new file mode 100644 index 0000000..db8bea5 --- /dev/null +++ b/src/Light.cpp @@ -0,0 +1,152 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "Light.h" +#include "Material.h" +//#include "OpenGL.h" +#include + +//-------------------------------------------------------------------------------- +Light::Light(LightType lt,const QString& name) + : Entity(name), mColor(Color::WHITE), mGlLightId(0), mType(lt), mAperture(45.), mExponent(10.) +{ + setPosition(Vector3(1.,1.,1.)); + setDirection(Vector3(-1.,-1.,-1.)); + mpMaterial = new Material(); + mpMaterial->setLighted(false); + mpMaterial->setBaseColor(mColor,0.5); +} +Light::~Light() +{ + delete mpMaterial; +} +//-------------------------------------------------------------------------------- +Light::LightType Light::getType(void) const +{ + return mType; +} +//-------------------------------------------------------------------------------- +void Light::activate(int num) +{ + float v4[4]; + + mGlLightId = GL_LIGHT0 + num; + + glLightfv(mGlLightId, GL_AMBIENT, Color::BLACK); + glLightfv(mGlLightId, GL_DIFFUSE, mColor); + glLightfv(mGlLightId, GL_SPECULAR, mColor); + + if(mType != LT_DIRECTIONAL) + { + Vector3 pos = getPosition(); + v4[0] = pos.x; v4[1] = pos.y; v4[2] = pos.z; + v4[3] = 1.; + } + else + { + Vector3 dir = getDirection(); + v4[0] = dir.x; v4[1] = dir.y; v4[2] = dir.z; + v4[3] = 0.; + } + glLightfv(mGlLightId, GL_POSITION, v4); + + if(mType == LT_SPOT) + { + Vector3 dir = getDirection(); + v4[0] = dir.x; v4[1] = dir.y; v4[2] = dir.z; + v4[3] = 1.; + glLightfv(mGlLightId, GL_SPOT_DIRECTION, v4); + glLightf(mGlLightId, GL_SPOT_CUTOFF, mAperture); + glLightf(mGlLightId, GL_SPOT_EXPONENT, mExponent); + } + else + { + glLightf(mGlLightId, GL_SPOT_CUTOFF, 180.); + } + glEnable(mGlLightId); +} +//-------------------------------------------------------------------------------- +void Light::release(void) +{ + glDisable(mGlLightId); + glLightfv(mGlLightId, GL_AMBIENT, Color::BLACK); + glLightfv(mGlLightId, GL_DIFFUSE, Color::BLACK); + glLightfv(mGlLightId, GL_SPECULAR, Color::BLACK); +} +//-------------------------------------------------------------------------------- +void Light::setPosition(const Vector3& pos) +{ + mTransform.setPosition(pos); +} +const Vector3& Light::getPosition(void) const +{ + return mTransform.getPosition(); +} +//-------------------------------------------------------------------------------- +void Light::setDirection(const Vector3& _dir) +{ + Vector3 dir = _dir; + dir.normalise(); + Vector3 rotAxes = Vector3::UNIT_Z.crossProduct(dir); + float rotAngle = acos(Vector3::UNIT_Z.dotProduct(dir)); + mTransform.setOrientation(rotAngle, rotAxes.x, rotAxes.y, rotAxes.z); +} +Vector3 Light::getDirection(void) const +{ + Vector3 x, y, z; + mTransform.getOrientation().ToAxes(x, y, z); + return z; +} +//-------------------------------------------------------------------------------- +void Light::setColor(const Color& c) +{ + mColor = c; + mpMaterial->setBaseColor(mColor,0.5); +} +//-------------------------------------------------------------------------------- +float Light::getAperture(void) const +{ + return mAperture; +} +void Light::setAperture(float a) +{ + if(a<90.) + mAperture = a; +} +float Light::getExponent(void) const +{ + return mExponent; +} +void Light::setExponent(float e) +{ + mExponent = e; +} +//-------------------------------------------------------------------------------- +void Light::drawGeometry(void) +{ +} + +Vector3 Light::getCenterM(void) +{ + Vector3 center; + center.x = 0.; + center.y = 0.; + center.z = 0.; + return center; +} + +std::vector Light::getVertexArray(){ + std::vector vect; + return vect; +} + + +void Light::deleteVBO(){} + +void Light::afficheInfoM(int split){} + +void Light::fillDensity(int coverage, Density *pDensity){} diff --git a/src/Light.h b/src/Light.h new file mode 100644 index 0000000..49341b2 --- /dev/null +++ b/src/Light.h @@ -0,0 +1,84 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _Light_h_ +#define _Light_h_ + +#include +#include "Vector3.h" +#include "Material.h" +#include "Entity.h" + +/** + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + +class Light : public Entity +{ +public: + enum LightType {LT_POINT, LT_DIRECTIONAL, LT_SPOT}; + + Light(LightType lt, const QString& name = ""); + + ~Light(); + + LightType getType(void) const; + + /** Met à  jour les états OpenGL et active la source lumineuse. + Le numéro de la source lumineuse OpenGL utilisé est GL_LIGHTnum, cà d GL_LIGHT0 + num. + */ + void activate(int num); + + /** Désactive la source lumimeuse. + */ + void release(void); + + /** Position de la source lumineuse. + Ignorée pour une source directionnelle. + */ + void setPosition(const Vector3& pos); + const Vector3& getPosition(void) const; + + /** Direction de la source lumineuse. + Ignorée pour une source ponctuelle. + */ + void setDirection(const Vector3& pos); + Vector3 getDirection(void) const; + + /** Couleur de la source lumineuse + */ + void setColor(const Color& c); + + /** Angle d'ouverture du spot. + */ + float getAperture(void) const; + void setAperture(float a); + + /** Atténuation du faisceau. + */ + float getExponent(void) const; + void setExponent(float e); + +protected: + + virtual void drawGeometry(void); + virtual Vector3 getCenterM(void); + virtual std::vector getVertexArray(); + virtual void deleteVBO(); + virtual void afficheInfoM(int split); + virtual void fillDensity(int coverage, Density *pDensity); + Color mColor; + int mGlLightId; + LightType mType; + float mAperture; + float mExponent; +}; + +#endif diff --git a/src/Material.cpp b/src/Material.cpp new file mode 100644 index 0000000..785ec7a --- /dev/null +++ b/src/Material.cpp @@ -0,0 +1,184 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "Material.h" +#include "TextureLayer.h" + + +bool Material::configEnableShaders = false; + +Material Material::Default; + +//-------------------------------------------------------------------------------- +Material::Material(void) + : mColor(0.8,0.8,0.8), mAmbient(0.3,0.3,0.3), mDiffuse(0.5,0.5,0.5), + mSpecular(0.8,0.8,0.8), mShininess(10), + mActiveBlending(false), mBlendSrcFunc(GL_ONE), mBlendDstFunc(GL_ZERO), + mAlphaRejection(false), mAlphaRejectionValue(1.), mIsLighted(true) +{ +} +//-------------------------------------------------------------------------------- +void Material::activate(bool alphaOnly /*= false*/) +{ + if(!alphaOnly) + { + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mAmbient); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mDiffuse); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mSpecular); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, mShininess); + + // si l'éclairage n'est pas activé + glColor4fv(mColor); + + if(!mIsLighted) + { + mPreviousLightingState = glIsEnabled(GL_LIGHTING); + glDisable(GL_LIGHTING); + } + + if(mActiveBlending) + { + glEnable(GL_BLEND); + glBlendFunc(mBlendSrcFunc, mBlendDstFunc); + } + } + + if(!alphaOnly || mAlphaRejection) + { + /*******************************************************************/ + /* Début code à  faire/completer par l'étudiant */ + /* Texture */ + /*******************************************************************/ + + // à  faire : activer chaque texture dans une unité de texture différente + GLuint unit = 0; + for(TextureLayers::iterator it = mTextureLayers.begin() ; + it!=mTextureLayers.end() ; ++unit, ++it) + { + glActiveTexture(GL_TEXTURE0 + unit); + (*it)->activate(); + } + glActiveTexture(GL_TEXTURE0); + + + /*******************************************************************/ + /* Fin code à  faire/completer par l'étudiant */ + /* Texture */ + /*******************************************************************/ + } + + if(mAlphaRejection) + { + glEnable(GL_ALPHA_TEST); + glAlphaFunc(GL_GREATER, mAlphaRejectionValue); + } +} +//-------------------------------------------------------------------------------- +void Material::release(bool alphaOnly /*= false*/) +{ + if(!alphaOnly) + { + if(mActiveBlending) + { + glDisable(GL_BLEND); + } + if(!mIsLighted && mPreviousLightingState) + { + glEnable(GL_LIGHTING); + } + } + + if(!alphaOnly || mAlphaRejection) + { + /*******************************************************************/ + /* Début code à  faire/completer par l'étudiant */ + /* Texture */ + /*******************************************************************/ + + // à  faire : désactiver chaque texture de leur unité respective + GLuint unit = GL_TEXTURE0; + for(TextureLayers::iterator it = mTextureLayers.begin() ; + it!=mTextureLayers.end() ; ++unit, ++it) + { + glActiveTexture(unit); + (*it)->release(); + } + glActiveTexture(GL_TEXTURE0); + + /*******************************************************************/ + /* Fin code à  faire/completer par l'étudiant */ + /* Texture */ + /*******************************************************************/ + } + + if(mAlphaRejection) + { + glDisable(GL_ALPHA_TEST); + } +} +//-------------------------------------------------------------------------------- +void Material::setBaseColor(const Color& c, float coeffAmbient) +{ + mAmbient = c * coeffAmbient * 2.0; + + mDiffuse = c * (1.-coeffAmbient); + + mColor = c; + + // l'alpha du sommet éclairé est égale à  l'alpha de la composante diffuse + mDiffuse.a = c.a; +} + +void Material::setSpecular(const Color& c, float shininess) +{ + mSpecular = c; + // shininess entre 0 et 1 + // pour OpenGL : entre 0 et 128 + mShininess = shininess * 128; +} +//-------------------------------------------------------------------------------- +void Material::setBlendFunc(GLenum src, GLenum dst) +{ + mBlendSrcFunc = src; + mBlendDstFunc = dst; + mActiveBlending = (src!=GL_ONE) || (dst!=GL_ZERO); +} +//-------------------------------------------------------------------------------- +void Material::setAlphaRejection(float value) +{ + mAlphaRejectionValue = value; + mAlphaRejection = (value>0.); +} + +bool Material::hasAlphaRejection(void) const +{ + return mAlphaRejection; +} +//-------------------------------------------------------------------------------- +void Material::setLighted(bool on) +{ + mIsLighted = on; +} +bool Material::isLighted(void) const +{ + return mIsLighted; +} +//-------------------------------------------------------------------------------- +void Material::pushTextureLayer(TextureLayer* pTex) +{ + mTextureLayers.push_back(pTex); +} +//-------------------------------------------------------------------------------- +int Material::getNumberOfLayers(void) +{ + return mTextureLayers.size(); +} +//-------------------------------------------------------------------------------- +void Material::popTextureLayer() +{ + mTextureLayers.pop_back(); +} diff --git a/src/Material.h b/src/Material.h new file mode 100644 index 0000000..c33cd36 --- /dev/null +++ b/src/Material.h @@ -0,0 +1,125 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _Material_h_ +#define _Material_h_ + +#include +#include +#include "OpenGL.h" + +#include "Color.h" + + +/** + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + +class TextureLayer; + +class Material +{ +public: + + Material(void); + + /** Active l'ensemble du materiau, cà d mà j des états OpenGL: + - materiaux + - blending + - test alpha + \note à  completer par l'étudiant (texture) + */ + void activate(bool alphaOnly = false); + + /** Désactive le blending, le test alpha + \note à  completer par l'étudiant (texture) + */ + void release(bool alphaOnly = false); + + + /** + \param c couleur de l'objet + \param coeffAmbient coefficient d'ambiant entre 0 et 1 + */ + void setBaseColor(const Color& c, float coeffAmbient); + + /** + \param c couleur des reflets spéculaires + \param shininess coefficient de brillance entre 0 et 1 + */ + void setSpecular(const Color& c, float shininess); + + /** Spécifie les facteurs de sources et de destination du blending. + Par defaut le blending est désactivé. + Utiliser setBlendFunc(GL_ONE,GL_ZERO) pour désactiver le blending dans le matériau + */ + void setBlendFunc(GLenum src, GLenum dst); + + /** Spécifie la valeur minimal de l'alpha des fragments. + Utiliser setAlphaRejection(0) pour désactiver le test sur l'alpha + */ + void setAlphaRejection(float value); + bool hasAlphaRejection(void) const; + + /** Spécifie si le matériau peut être éclairé ou non. + \note Ceci est utile pour les objets n'ayant pas de surface ou de normales. + */ + void setLighted(bool on); + bool isLighted(void) const; + + + /** Ajoute une couche de texture + */ + void pushTextureLayer(TextureLayer* pTex); + /** Retire une couche de texture + */ + void popTextureLayer(); + /** Nombre de couches de texture du materiau + */ + int getNumberOfLayers(void); + +public: + + /** Materiau par defaut. + */ + static Material Default; + + //-------------------------------------------------------------------------------- + // configuration globale + + /** active/désactive l'utilisation des shaders + */ + static bool configEnableShaders; + //-------------------------------------------------------------------------------- + +protected: + + Color mColor; + Color mAmbient; + Color mDiffuse; + Color mSpecular; + float mShininess; + + bool mActiveBlending; + GLenum mBlendSrcFunc; + GLenum mBlendDstFunc; + + bool mAlphaRejection; + float mAlphaRejectionValue; + + bool mIsLighted; + bool mPreviousLightingState; + + typedef std::vector TextureLayers; + /// Stocke la liste des textures associées au matériau. + TextureLayers mTextureLayers; +}; + +#endif diff --git a/src/Matrix3.cpp b/src/Matrix3.cpp new file mode 100644 index 0000000..b1eee61 --- /dev/null +++ b/src/Matrix3.cpp @@ -0,0 +1,1557 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE + (Object-oriented Graphics Rendering Engine) +For the latest info, see http://ogre.sourceforge.net/ + +Copyright © 2000-2002 The OGRE Team +Also see acknowledgements in Readme.html + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ +#include "Matrix3.h" + +#include +#include + +// Adapted from Matrix math by Wild Magic http://www.magic-software.com + + +const float Matrix3::EPSILON = 1e-06; +const Matrix3 Matrix3::ZERO(0,0,0,0,0,0,0,0,0); +const Matrix3 Matrix3::IDENTITY(1,0,0,0,1,0,0,0,1); +const float Matrix3::ms_fSvdEpsilon = 1e-04; +const int Matrix3::ms_iSvdMaxIterations = 32; + +//----------------------------------------------------------------------- +Matrix3::Matrix3 () +{ + // For efficiency reasons, do not initialize matrix. +} +//----------------------------------------------------------------------- +Matrix3::Matrix3 (const float aafEntry[3][3]) +{ + memcpy(m,aafEntry,9*sizeof(float)); +} +//----------------------------------------------------------------------- +Matrix3::Matrix3 (const Matrix3& rkMatrix) +{ + memcpy(m,rkMatrix.m,9*sizeof(float)); +} +//----------------------------------------------------------------------- +Matrix3::Matrix3 (float fEntry00, float fEntry01, float fEntry02, + float fEntry10, float fEntry11, float fEntry12, float fEntry20, + float fEntry21, float fEntry22) +{ + m[0][0] = fEntry00; + m[0][1] = fEntry01; + m[0][2] = fEntry02; + m[1][0] = fEntry10; + m[1][1] = fEntry11; + m[1][2] = fEntry12; + m[2][0] = fEntry20; + m[2][1] = fEntry21; + m[2][2] = fEntry22; +} +//----------------------------------------------------------------------- +float* Matrix3::operator[] (int iRow) const +{ + return (float*)m[iRow]; +} +//----------------------------------------------------------------------- +Matrix3::operator float* () +{ + return (float*)m[0]; +} +//----------------------------------------------------------------------- +Vector3 Matrix3::GetColumn (int iCol) const +{ + assert( 0 <= iCol && iCol < 3 ); + return Vector3(m[0][iCol],m[1][iCol], + m[2][iCol]); +} +//----------------------------------------------------------------------- +void Matrix3::SetColumn(int iCol, const Vector3& vec) +{ + assert( 0 <= iCol && iCol < 3 ); + m[0][iCol] = vec.x; + m[1][iCol] = vec.y; + m[2][iCol] = vec.z; + +} +//----------------------------------------------------------------------- +void Matrix3::FromAxes(const Vector3& xAxis, const Vector3& yAxis, const Vector3& zAxis) +{ + SetColumn(0,xAxis); + SetColumn(1,yAxis); + SetColumn(2,zAxis); + +} + +//----------------------------------------------------------------------- +Matrix3& Matrix3::operator= (const Matrix3& rkMatrix) +{ + memcpy(m,rkMatrix.m,9*sizeof(float)); + return *this; +} +//----------------------------------------------------------------------- +bool Matrix3::operator== (const Matrix3& rkMatrix) const +{ + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + { + if ( m[iRow][iCol] != rkMatrix.m[iRow][iCol] ) + return false; + } + } + + return true; +} +//----------------------------------------------------------------------- +bool Matrix3::operator!= (const Matrix3& rkMatrix) const +{ + return !operator==(rkMatrix); +} +//----------------------------------------------------------------------- +Matrix3 Matrix3::operator+ (const Matrix3& rkMatrix) const +{ + Matrix3 kSum; + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + { + kSum.m[iRow][iCol] = m[iRow][iCol] + + rkMatrix.m[iRow][iCol]; + } + } + return kSum; +} +//----------------------------------------------------------------------- +Matrix3 Matrix3::operator- (const Matrix3& rkMatrix) const +{ + Matrix3 kDiff; + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + { + kDiff.m[iRow][iCol] = m[iRow][iCol] - + rkMatrix.m[iRow][iCol]; + } + } + return kDiff; +} +//----------------------------------------------------------------------- +Matrix3 Matrix3::operator* (const Matrix3& rkMatrix) const +{ + Matrix3 kProd; + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + { + kProd.m[iRow][iCol] = + m[iRow][0]*rkMatrix.m[0][iCol] + + m[iRow][1]*rkMatrix.m[1][iCol] + + m[iRow][2]*rkMatrix.m[2][iCol]; + } + } + return kProd; +} +//----------------------------------------------------------------------- +Vector3 Matrix3::operator* (const Vector3& rkPoint) const +{ + Vector3 kProd; + for (int iRow = 0; iRow < 3; iRow++) + { + kProd[iRow] = + m[iRow][0]*rkPoint[0] + + m[iRow][1]*rkPoint[1] + + m[iRow][2]*rkPoint[2]; + } + return kProd; +} +//----------------------------------------------------------------------- +Vector3 operator* (const Vector3& rkPoint, const Matrix3& rkMatrix) +{ + Vector3 kProd; + for (int iRow = 0; iRow < 3; iRow++) + { + kProd[iRow] = + rkPoint[0]*rkMatrix.m[0][iRow] + + rkPoint[1]*rkMatrix.m[1][iRow] + + rkPoint[2]*rkMatrix.m[2][iRow]; + } + return kProd; +} +//----------------------------------------------------------------------- +Matrix3 Matrix3::operator- () const +{ + Matrix3 kNeg; + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + kNeg[iRow][iCol] = -m[iRow][iCol]; + } + return kNeg; +} +//----------------------------------------------------------------------- +Matrix3 Matrix3::operator* (float fScalar) const +{ + Matrix3 kProd; + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + kProd[iRow][iCol] = fScalar*m[iRow][iCol]; + } + return kProd; +} +//----------------------------------------------------------------------- +Matrix3 operator* (float fScalar, const Matrix3& rkMatrix) +{ + Matrix3 kProd; + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + kProd[iRow][iCol] = fScalar*rkMatrix.m[iRow][iCol]; + } + return kProd; +} +//----------------------------------------------------------------------- +Matrix3 Matrix3::Transpose () const +{ + Matrix3 kTranspose; + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + kTranspose[iRow][iCol] = m[iCol][iRow]; + } + return kTranspose; +} +//----------------------------------------------------------------------- +bool Matrix3::Inverse (Matrix3& rkInverse, float fTolerance) const +{ + // Invert a 3x3 using cofactors. This is about 8 times faster than + // the Numerical Recipes code which uses Gaussian elimination. + + rkInverse[0][0] = m[1][1]*m[2][2] - + m[1][2]*m[2][1]; + rkInverse[0][1] = m[0][2]*m[2][1] - + m[0][1]*m[2][2]; + rkInverse[0][2] = m[0][1]*m[1][2] - + m[0][2]*m[1][1]; + rkInverse[1][0] = m[1][2]*m[2][0] - + m[1][0]*m[2][2]; + rkInverse[1][1] = m[0][0]*m[2][2] - + m[0][2]*m[2][0]; + rkInverse[1][2] = m[0][2]*m[1][0] - + m[0][0]*m[1][2]; + rkInverse[2][0] = m[1][0]*m[2][1] - + m[1][1]*m[2][0]; + rkInverse[2][1] = m[0][1]*m[2][0] - + m[0][0]*m[2][1]; + rkInverse[2][2] = m[0][0]*m[1][1] - + m[0][1]*m[1][0]; + + float fDet = + m[0][0]*rkInverse[0][0] + + m[0][1]*rkInverse[1][0]+ + m[0][2]*rkInverse[2][0]; + + if ( fabs(fDet) <= fTolerance ) + return false; + + float fInvDet = 1.0/fDet; + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + rkInverse[iRow][iCol] *= fInvDet; + } + + return true; +} +//----------------------------------------------------------------------- +Matrix3 Matrix3::Inverse (float fTolerance) const +{ + Matrix3 kInverse = Matrix3::ZERO; + Inverse(kInverse,fTolerance); + return kInverse; +} +//----------------------------------------------------------------------- +float Matrix3::Determinant () const +{ + float fCofactor00 = m[1][1]*m[2][2] - + m[1][2]*m[2][1]; + float fCofactor10 = m[1][2]*m[2][0] - + m[1][0]*m[2][2]; + float fCofactor20 = m[1][0]*m[2][1] - + m[1][1]*m[2][0]; + + float fDet = + m[0][0]*fCofactor00 + + m[0][1]*fCofactor10 + + m[0][2]*fCofactor20; + + return fDet; +} +//----------------------------------------------------------------------- +void Matrix3::Bidiagonalize (Matrix3& kA, Matrix3& kL, + Matrix3& kR) +{ + float afV[3], afW[3]; + float fLength, fSign, fT1, fInvT1, fT2; + bool bIdentity; + + // map first column to (*,0,0) + fLength = sqrt(kA[0][0]*kA[0][0] + kA[1][0]*kA[1][0] + + kA[2][0]*kA[2][0]); + if ( fLength > 0.0 ) + { + fSign = (kA[0][0] > 0.0 ? 1.0 : -1.0); + fT1 = kA[0][0] + fSign*fLength; + fInvT1 = 1.0/fT1; + afV[1] = kA[1][0]*fInvT1; + afV[2] = kA[2][0]*fInvT1; + + fT2 = -2.0/(1.0+afV[1]*afV[1]+afV[2]*afV[2]); + afW[0] = fT2*(kA[0][0]+kA[1][0]*afV[1]+kA[2][0]*afV[2]); + afW[1] = fT2*(kA[0][1]+kA[1][1]*afV[1]+kA[2][1]*afV[2]); + afW[2] = fT2*(kA[0][2]+kA[1][2]*afV[1]+kA[2][2]*afV[2]); + kA[0][0] += afW[0]; + kA[0][1] += afW[1]; + kA[0][2] += afW[2]; + kA[1][1] += afV[1]*afW[1]; + kA[1][2] += afV[1]*afW[2]; + kA[2][1] += afV[2]*afW[1]; + kA[2][2] += afV[2]*afW[2]; + + kL[0][0] = 1.0+fT2; + kL[0][1] = kL[1][0] = fT2*afV[1]; + kL[0][2] = kL[2][0] = fT2*afV[2]; + kL[1][1] = 1.0+fT2*afV[1]*afV[1]; + kL[1][2] = kL[2][1] = fT2*afV[1]*afV[2]; + kL[2][2] = 1.0+fT2*afV[2]*afV[2]; + bIdentity = false; + } + else + { + kL = Matrix3::IDENTITY; + bIdentity = true; + } + + // map first row to (*,*,0) + fLength = sqrt(kA[0][1]*kA[0][1]+kA[0][2]*kA[0][2]); + if ( fLength > 0.0 ) + { + fSign = (kA[0][1] > 0.0 ? 1.0 : -1.0); + fT1 = kA[0][1] + fSign*fLength; + afV[2] = kA[0][2]/fT1; + + fT2 = -2.0/(1.0+afV[2]*afV[2]); + afW[0] = fT2*(kA[0][1]+kA[0][2]*afV[2]); + afW[1] = fT2*(kA[1][1]+kA[1][2]*afV[2]); + afW[2] = fT2*(kA[2][1]+kA[2][2]*afV[2]); + kA[0][1] += afW[0]; + kA[1][1] += afW[1]; + kA[1][2] += afW[1]*afV[2]; + kA[2][1] += afW[2]; + kA[2][2] += afW[2]*afV[2]; + + kR[0][0] = 1.0; + kR[0][1] = kR[1][0] = 0.0; + kR[0][2] = kR[2][0] = 0.0; + kR[1][1] = 1.0+fT2; + kR[1][2] = kR[2][1] = fT2*afV[2]; + kR[2][2] = 1.0+fT2*afV[2]*afV[2]; + } + else + { + kR = Matrix3::IDENTITY; + } + + // map second column to (*,*,0) + fLength = sqrt(kA[1][1]*kA[1][1]+kA[2][1]*kA[2][1]); + if ( fLength > 0.0 ) + { + fSign = (kA[1][1] > 0.0 ? 1.0 : -1.0); + fT1 = kA[1][1] + fSign*fLength; + afV[2] = kA[2][1]/fT1; + + fT2 = -2.0/(1.0+afV[2]*afV[2]); + afW[1] = fT2*(kA[1][1]+kA[2][1]*afV[2]); + afW[2] = fT2*(kA[1][2]+kA[2][2]*afV[2]); + kA[1][1] += afW[1]; + kA[1][2] += afW[2]; + kA[2][2] += afV[2]*afW[2]; + + float fA = 1.0+fT2; + float fB = fT2*afV[2]; + float fC = 1.0+fB*afV[2]; + + if ( bIdentity ) + { + kL[0][0] = 1.0; + kL[0][1] = kL[1][0] = 0.0; + kL[0][2] = kL[2][0] = 0.0; + kL[1][1] = fA; + kL[1][2] = kL[2][1] = fB; + kL[2][2] = fC; + } + else + { + for (int iRow = 0; iRow < 3; iRow++) + { + float fTmp0 = kL[iRow][1]; + float fTmp1 = kL[iRow][2]; + kL[iRow][1] = fA*fTmp0+fB*fTmp1; + kL[iRow][2] = fB*fTmp0+fC*fTmp1; + } + } + } +} +//----------------------------------------------------------------------- +void Matrix3::GolubKahanStep (Matrix3& kA, Matrix3& kL, + Matrix3& kR) +{ + float fT11 = kA[0][1]*kA[0][1]+kA[1][1]*kA[1][1]; + float fT22 = kA[1][2]*kA[1][2]+kA[2][2]*kA[2][2]; + float fT12 = kA[1][1]*kA[1][2]; + float fTrace = fT11+fT22; + float fDiff = fT11-fT22; + float fDiscr = sqrt(fDiff*fDiff+4.0*fT12*fT12); + float fRoot1 = 0.5*(fTrace+fDiscr); + float fRoot2 = 0.5*(fTrace-fDiscr); + + // adjust right + float fY = kA[0][0] - (fabs(fRoot1-fT22) <= + fabs(fRoot2-fT22) ? fRoot1 : fRoot2); + float fZ = kA[0][1]; + float fInvLength = 1.0/sqrt(fY*fY+fZ*fZ); + float fSin = fZ*fInvLength; + float fCos = -fY*fInvLength; + + float fTmp0 = kA[0][0]; + float fTmp1 = kA[0][1]; + kA[0][0] = fCos*fTmp0-fSin*fTmp1; + kA[0][1] = fSin*fTmp0+fCos*fTmp1; + kA[1][0] = -fSin*kA[1][1]; + kA[1][1] *= fCos; + + int iRow; + for (iRow = 0; iRow < 3; iRow++) + { + fTmp0 = kR[0][iRow]; + fTmp1 = kR[1][iRow]; + kR[0][iRow] = fCos*fTmp0-fSin*fTmp1; + kR[1][iRow] = fSin*fTmp0+fCos*fTmp1; + } + + // adjust left + fY = kA[0][0]; + fZ = kA[1][0]; + fInvLength = 1.0/sqrt(fY*fY+fZ*fZ); + fSin = fZ*fInvLength; + fCos = -fY*fInvLength; + + kA[0][0] = fCos*kA[0][0]-fSin*kA[1][0]; + fTmp0 = kA[0][1]; + fTmp1 = kA[1][1]; + kA[0][1] = fCos*fTmp0-fSin*fTmp1; + kA[1][1] = fSin*fTmp0+fCos*fTmp1; + kA[0][2] = -fSin*kA[1][2]; + kA[1][2] *= fCos; + + int iCol; + for (iCol = 0; iCol < 3; iCol++) + { + fTmp0 = kL[iCol][0]; + fTmp1 = kL[iCol][1]; + kL[iCol][0] = fCos*fTmp0-fSin*fTmp1; + kL[iCol][1] = fSin*fTmp0+fCos*fTmp1; + } + + // adjust right + fY = kA[0][1]; + fZ = kA[0][2]; + fInvLength = 1.0/sqrt(fY*fY+fZ*fZ); + fSin = fZ*fInvLength; + fCos = -fY*fInvLength; + + kA[0][1] = fCos*kA[0][1]-fSin*kA[0][2]; + fTmp0 = kA[1][1]; + fTmp1 = kA[1][2]; + kA[1][1] = fCos*fTmp0-fSin*fTmp1; + kA[1][2] = fSin*fTmp0+fCos*fTmp1; + kA[2][1] = -fSin*kA[2][2]; + kA[2][2] *= fCos; + + for (iRow = 0; iRow < 3; iRow++) + { + fTmp0 = kR[1][iRow]; + fTmp1 = kR[2][iRow]; + kR[1][iRow] = fCos*fTmp0-fSin*fTmp1; + kR[2][iRow] = fSin*fTmp0+fCos*fTmp1; + } + + // adjust left + fY = kA[1][1]; + fZ = kA[2][1]; + fInvLength = 1.0/sqrt(fY*fY+fZ*fZ); + fSin = fZ*fInvLength; + fCos = -fY*fInvLength; + + kA[1][1] = fCos*kA[1][1]-fSin*kA[2][1]; + fTmp0 = kA[1][2]; + fTmp1 = kA[2][2]; + kA[1][2] = fCos*fTmp0-fSin*fTmp1; + kA[2][2] = fSin*fTmp0+fCos*fTmp1; + + for (iCol = 0; iCol < 3; iCol++) + { + fTmp0 = kL[iCol][1]; + fTmp1 = kL[iCol][2]; + kL[iCol][1] = fCos*fTmp0-fSin*fTmp1; + kL[iCol][2] = fSin*fTmp0+fCos*fTmp1; + } +} +//----------------------------------------------------------------------- +void Matrix3::SingularValueDecomposition (Matrix3& kL, Vector3& kS, + Matrix3& kR) const +{ + // temas: currently unused + //const int iMax = 16; + int iRow, iCol; + + Matrix3 kA = *this; + Bidiagonalize(kA,kL,kR); + + for (int i = 0; i < ms_iSvdMaxIterations; i++) + { + float fTmp, fTmp0, fTmp1; + float fSin0, fCos0, fTan0; + float fSin1, fCos1, fTan1; + + bool bTest1 = (fabs(kA[0][1]) <= + ms_fSvdEpsilon*(fabs(kA[0][0])+fabs(kA[1][1]))); + bool bTest2 = (fabs(kA[1][2]) <= + ms_fSvdEpsilon*(fabs(kA[1][1])+fabs(kA[2][2]))); + if ( bTest1 ) + { + if ( bTest2 ) + { + kS[0] = kA[0][0]; + kS[1] = kA[1][1]; + kS[2] = kA[2][2]; + break; + } + else + { + // 2x2 closed form factorization + fTmp = (kA[1][1]*kA[1][1] - kA[2][2]*kA[2][2] + + kA[1][2]*kA[1][2])/(kA[1][2]*kA[2][2]); + fTan0 = 0.5*(fTmp+sqrt(fTmp*fTmp + 4.0)); + fCos0 = 1.0/sqrt(1.0+fTan0*fTan0); + fSin0 = fTan0*fCos0; + + for (iCol = 0; iCol < 3; iCol++) + { + fTmp0 = kL[iCol][1]; + fTmp1 = kL[iCol][2]; + kL[iCol][1] = fCos0*fTmp0-fSin0*fTmp1; + kL[iCol][2] = fSin0*fTmp0+fCos0*fTmp1; + } + + fTan1 = (kA[1][2]-kA[2][2]*fTan0)/kA[1][1]; + fCos1 = 1.0/sqrt(1.0+fTan1*fTan1); + fSin1 = -fTan1*fCos1; + + for (iRow = 0; iRow < 3; iRow++) + { + fTmp0 = kR[1][iRow]; + fTmp1 = kR[2][iRow]; + kR[1][iRow] = fCos1*fTmp0-fSin1*fTmp1; + kR[2][iRow] = fSin1*fTmp0+fCos1*fTmp1; + } + + kS[0] = kA[0][0]; + kS[1] = fCos0*fCos1*kA[1][1] - + fSin1*(fCos0*kA[1][2]-fSin0*kA[2][2]); + kS[2] = fSin0*fSin1*kA[1][1] + + fCos1*(fSin0*kA[1][2]+fCos0*kA[2][2]); + break; + } + } + else + { + if ( bTest2 ) + { + // 2x2 closed form factorization + fTmp = (kA[0][0]*kA[0][0] + kA[1][1]*kA[1][1] - + kA[0][1]*kA[0][1])/(kA[0][1]*kA[1][1]); + fTan0 = 0.5*(-fTmp+sqrt(fTmp*fTmp + 4.0)); + fCos0 = 1.0/sqrt(1.0+fTan0*fTan0); + fSin0 = fTan0*fCos0; + + for (iCol = 0; iCol < 3; iCol++) + { + fTmp0 = kL[iCol][0]; + fTmp1 = kL[iCol][1]; + kL[iCol][0] = fCos0*fTmp0-fSin0*fTmp1; + kL[iCol][1] = fSin0*fTmp0+fCos0*fTmp1; + } + + fTan1 = (kA[0][1]-kA[1][1]*fTan0)/kA[0][0]; + fCos1 = 1.0/sqrt(1.0+fTan1*fTan1); + fSin1 = -fTan1*fCos1; + + for (iRow = 0; iRow < 3; iRow++) + { + fTmp0 = kR[0][iRow]; + fTmp1 = kR[1][iRow]; + kR[0][iRow] = fCos1*fTmp0-fSin1*fTmp1; + kR[1][iRow] = fSin1*fTmp0+fCos1*fTmp1; + } + + kS[0] = fCos0*fCos1*kA[0][0] - + fSin1*(fCos0*kA[0][1]-fSin0*kA[1][1]); + kS[1] = fSin0*fSin1*kA[0][0] + + fCos1*(fSin0*kA[0][1]+fCos0*kA[1][1]); + kS[2] = kA[2][2]; + break; + } + else + { + GolubKahanStep(kA,kL,kR); + } + } + } + + // positize diagonal + for (iRow = 0; iRow < 3; iRow++) + { + if ( kS[iRow] < 0.0 ) + { + kS[iRow] = -kS[iRow]; + for (iCol = 0; iCol < 3; iCol++) + kR[iRow][iCol] = -kR[iRow][iCol]; + } + } +} +//----------------------------------------------------------------------- +void Matrix3::SingularValueComposition (const Matrix3& kL, + const Vector3& kS, const Matrix3& kR) +{ + int iRow, iCol; + Matrix3 kTmp; + + // product S*R + for (iRow = 0; iRow < 3; iRow++) + { + for (iCol = 0; iCol < 3; iCol++) + kTmp[iRow][iCol] = kS[iRow]*kR[iRow][iCol]; + } + + // product L*S*R + for (iRow = 0; iRow < 3; iRow++) + { + for (iCol = 0; iCol < 3; iCol++) + { + m[iRow][iCol] = 0.0; + for (int iMid = 0; iMid < 3; iMid++) + m[iRow][iCol] += kL[iRow][iMid]*kTmp[iMid][iCol]; + } + } +} +//----------------------------------------------------------------------- +void Matrix3::Orthonormalize () +{ + // Algorithm uses Gram-Schmidt orthogonalization. If 'this' matrix is + // M = [m0|m1|m2], then orthonormal output matrix is Q = [q0|q1|q2], + // + // q0 = m0/|m0| + // q1 = (m1-(q0*m1)q0)/|m1-(q0*m1)q0| + // q2 = (m2-(q0*m2)q0-(q1*m2)q1)/|m2-(q0*m2)q0-(q1*m2)q1| + // + // where |V| indicates length of vector V and A*B indicates dot + // product of vectors A and B. + + // compute q0 + float fInvLength = 1.0/sqrt(m[0][0]*m[0][0] + + m[1][0]*m[1][0] + + m[2][0]*m[2][0]); + + m[0][0] *= fInvLength; + m[1][0] *= fInvLength; + m[2][0] *= fInvLength; + + // compute q1 + float fDot0 = + m[0][0]*m[0][1] + + m[1][0]*m[1][1] + + m[2][0]*m[2][1]; + + m[0][1] -= fDot0*m[0][0]; + m[1][1] -= fDot0*m[1][0]; + m[2][1] -= fDot0*m[2][0]; + + fInvLength = 1.0/sqrt(m[0][1]*m[0][1] + + m[1][1]*m[1][1] + + m[2][1]*m[2][1]); + + m[0][1] *= fInvLength; + m[1][1] *= fInvLength; + m[2][1] *= fInvLength; + + // compute q2 + float fDot1 = + m[0][1]*m[0][2] + + m[1][1]*m[1][2] + + m[2][1]*m[2][2]; + + fDot0 = + m[0][0]*m[0][2] + + m[1][0]*m[1][2] + + m[2][0]*m[2][2]; + + m[0][2] -= fDot0*m[0][0] + fDot1*m[0][1]; + m[1][2] -= fDot0*m[1][0] + fDot1*m[1][1]; + m[2][2] -= fDot0*m[2][0] + fDot1*m[2][1]; + + fInvLength = 1.0/sqrt(m[0][2]*m[0][2] + + m[1][2]*m[1][2] + + m[2][2]*m[2][2]); + + m[0][2] *= fInvLength; + m[1][2] *= fInvLength; + m[2][2] *= fInvLength; +} +//----------------------------------------------------------------------- +void Matrix3::QDUDecomposition (Matrix3& kQ, + Vector3& kD, Vector3& kU) const +{ + // Factor M = QR = QDU where Q is orthogonal, D is diagonal, + // and U is upper triangular with ones on its diagonal. Algorithm uses + // Gram-Schmidt orthogonalization (the QR algorithm). + // + // If M = [ m0 | m1 | m2 ] and Q = [ q0 | q1 | q2 ], then + // + // q0 = m0/|m0| + // q1 = (m1-(q0*m1)q0)/|m1-(q0*m1)q0| + // q2 = (m2-(q0*m2)q0-(q1*m2)q1)/|m2-(q0*m2)q0-(q1*m2)q1| + // + // where |V| indicates length of vector V and A*B indicates dot + // product of vectors A and B. The matrix R has entries + // + // r00 = q0*m0 r01 = q0*m1 r02 = q0*m2 + // r10 = 0 r11 = q1*m1 r12 = q1*m2 + // r20 = 0 r21 = 0 r22 = q2*m2 + // + // so D = diag(r00,r11,r22) and U has entries u01 = r01/r00, + // u02 = r02/r00, and u12 = r12/r11. + + // Q = rotation + // D = scaling + // U = shear + + // D stores the three diagonal entries r00, r11, r22 + // U stores the entries U[0] = u01, U[1] = u02, U[2] = u12 + + // build orthogonal matrix Q + float fInvLength = 1.0/sqrt(m[0][0]*m[0][0] + + m[1][0]*m[1][0] + + m[2][0]*m[2][0]); + kQ[0][0] = m[0][0]*fInvLength; + kQ[1][0] = m[1][0]*fInvLength; + kQ[2][0] = m[2][0]*fInvLength; + + float fDot = kQ[0][0]*m[0][1] + kQ[1][0]*m[1][1] + + kQ[2][0]*m[2][1]; + kQ[0][1] = m[0][1]-fDot*kQ[0][0]; + kQ[1][1] = m[1][1]-fDot*kQ[1][0]; + kQ[2][1] = m[2][1]-fDot*kQ[2][0]; + fInvLength = 1.0/sqrt(kQ[0][1]*kQ[0][1] + kQ[1][1]*kQ[1][1] + + kQ[2][1]*kQ[2][1]); + kQ[0][1] *= fInvLength; + kQ[1][1] *= fInvLength; + kQ[2][1] *= fInvLength; + + fDot = kQ[0][0]*m[0][2] + kQ[1][0]*m[1][2] + + kQ[2][0]*m[2][2]; + kQ[0][2] = m[0][2]-fDot*kQ[0][0]; + kQ[1][2] = m[1][2]-fDot*kQ[1][0]; + kQ[2][2] = m[2][2]-fDot*kQ[2][0]; + fDot = kQ[0][1]*m[0][2] + kQ[1][1]*m[1][2] + + kQ[2][1]*m[2][2]; + kQ[0][2] -= fDot*kQ[0][1]; + kQ[1][2] -= fDot*kQ[1][1]; + kQ[2][2] -= fDot*kQ[2][1]; + fInvLength = 1.0/sqrt(kQ[0][2]*kQ[0][2] + kQ[1][2]*kQ[1][2] + + kQ[2][2]*kQ[2][2]); + kQ[0][2] *= fInvLength; + kQ[1][2] *= fInvLength; + kQ[2][2] *= fInvLength; + + // guarantee that orthogonal matrix has determinant 1 (no reflections) + float fDet = kQ[0][0]*kQ[1][1]*kQ[2][2] + kQ[0][1]*kQ[1][2]*kQ[2][0] + + kQ[0][2]*kQ[1][0]*kQ[2][1] - kQ[0][2]*kQ[1][1]*kQ[2][0] - + kQ[0][1]*kQ[1][0]*kQ[2][2] - kQ[0][0]*kQ[1][2]*kQ[2][1]; + + if ( fDet < 0.0 ) + { + for (int iRow = 0; iRow < 3; iRow++) + for (int iCol = 0; iCol < 3; iCol++) + kQ[iRow][iCol] = -kQ[iRow][iCol]; + } + + // build "right" matrix R + Matrix3 kR; + kR[0][0] = kQ[0][0]*m[0][0] + kQ[1][0]*m[1][0] + + kQ[2][0]*m[2][0]; + kR[0][1] = kQ[0][0]*m[0][1] + kQ[1][0]*m[1][1] + + kQ[2][0]*m[2][1]; + kR[1][1] = kQ[0][1]*m[0][1] + kQ[1][1]*m[1][1] + + kQ[2][1]*m[2][1]; + kR[0][2] = kQ[0][0]*m[0][2] + kQ[1][0]*m[1][2] + + kQ[2][0]*m[2][2]; + kR[1][2] = kQ[0][1]*m[0][2] + kQ[1][1]*m[1][2] + + kQ[2][1]*m[2][2]; + kR[2][2] = kQ[0][2]*m[0][2] + kQ[1][2]*m[1][2] + + kQ[2][2]*m[2][2]; + + // the scaling component + kD[0] = kR[0][0]; + kD[1] = kR[1][1]; + kD[2] = kR[2][2]; + + // the shear component + float fInvD0 = 1.0/kD[0]; + kU[0] = kR[0][1]*fInvD0; + kU[1] = kR[0][2]*fInvD0; + kU[2] = kR[1][2]/kD[1]; +} +//----------------------------------------------------------------------- +float Matrix3::MaxCubicRoot (float afCoeff[3]) +{ + // Spectral norm is for A^T*A, so characteristic polynomial + // P(x) = c[0]+c[1]*x+c[2]*x^2+x^3 has three positive float roots. + // This yields the assertions c[0] < 0 and c[2]*c[2] >= 3*c[1]. + + // quick out for uniform scale (triple root) + const float fOneThird = 1.0/3.0; + const float fEpsilon = 1e-06; + float fDiscr = afCoeff[2]*afCoeff[2] - 3.0*afCoeff[1]; + if ( fDiscr <= fEpsilon ) + return -fOneThird*afCoeff[2]; + + // Compute an upper bound on roots of P(x). This assumes that A^T*A + // has been scaled by its largest entry. + float fX = 1.0; + float fPoly = afCoeff[0]+fX*(afCoeff[1]+fX*(afCoeff[2]+fX)); + if ( fPoly < 0.0 ) + { + // uses a matrix norm to find an upper bound on maximum root + fX = fabs(afCoeff[0]); + float fTmp = 1.0+fabs(afCoeff[1]); + if ( fTmp > fX ) + fX = fTmp; + fTmp = 1.0+fabs(afCoeff[2]); + if ( fTmp > fX ) + fX = fTmp; + } + + // Newton's method to find root + float fTwoC2 = 2.0*afCoeff[2]; + for (int i = 0; i < 16; i++) + { + fPoly = afCoeff[0]+fX*(afCoeff[1]+fX*(afCoeff[2]+fX)); + if ( fabs(fPoly) <= fEpsilon ) + return fX; + + float fDeriv = afCoeff[1]+fX*(fTwoC2+3.0*fX); + fX -= fPoly/fDeriv; + } + + return fX; +} +//----------------------------------------------------------------------- +float Matrix3::SpectralNorm () const +{ + Matrix3 kP; + int iRow, iCol; + float fPmax = 0.0; + for (iRow = 0; iRow < 3; iRow++) + { + for (iCol = 0; iCol < 3; iCol++) + { + kP[iRow][iCol] = 0.0; + for (int iMid = 0; iMid < 3; iMid++) + { + kP[iRow][iCol] += + m[iMid][iRow]*m[iMid][iCol]; + } + if ( kP[iRow][iCol] > fPmax ) + fPmax = kP[iRow][iCol]; + } + } + + float fInvPmax = 1.0/fPmax; + for (iRow = 0; iRow < 3; iRow++) + { + for (iCol = 0; iCol < 3; iCol++) + kP[iRow][iCol] *= fInvPmax; + } + + float afCoeff[3]; + afCoeff[0] = -(kP[0][0]*(kP[1][1]*kP[2][2]-kP[1][2]*kP[2][1]) + + kP[0][1]*(kP[2][0]*kP[1][2]-kP[1][0]*kP[2][2]) + + kP[0][2]*(kP[1][0]*kP[2][1]-kP[2][0]*kP[1][1])); + afCoeff[1] = kP[0][0]*kP[1][1]-kP[0][1]*kP[1][0] + + kP[0][0]*kP[2][2]-kP[0][2]*kP[2][0] + + kP[1][1]*kP[2][2]-kP[1][2]*kP[2][1]; + afCoeff[2] = -(kP[0][0]+kP[1][1]+kP[2][2]); + + float fRoot = MaxCubicRoot(afCoeff); + float fNorm = sqrt(fPmax*fRoot); + return fNorm; +} +//----------------------------------------------------------------------- +void Matrix3::ToAxisAngle (Vector3& rkAxis, float& rfRadians) const +{ + // Let (x,y,z) be the unit-length axis and let A be an angle of rotation. + // The rotation matrix is R = I + sin(A)*P + (1-cos(A))*P^2 where + // I is the identity and + // + // +- -+ + // P = | 0 -z +y | + // | +z 0 -x | + // | -y +x 0 | + // +- -+ + // + // If A > 0, R represents a counterclockwise rotation about the axis in + // the sense of looking from the tip of the axis vector towards the + // origin. Some algebra will show that + // + // cos(A) = (trace(R)-1)/2 and R - R^t = 2*sin(A)*P + // + // In the event that A = pi, R-R^t = 0 which prevents us from extracting + // the axis through P. Instead note that R = I+2*P^2 when A = pi, so + // P^2 = (R-I)/2. The diagonal entries of P^2 are x^2-1, y^2-1, and + // z^2-1. We can solve these for axis (x,y,z). Because the angle is pi, + // it does not matter which sign you choose on the square roots. + + float fTrace = m[0][0] + m[1][1] + m[2][2]; + float fCos = 0.5*(fTrace-1.0); + rfRadians = acos(fCos); // in [0,PI] + + if ( rfRadians > 0.0 ) + { + if ( rfRadians < M_PI ) + { + rkAxis.x = m[2][1]-m[1][2]; + rkAxis.y = m[0][2]-m[2][0]; + rkAxis.z = m[1][0]-m[0][1]; + rkAxis.normalise(); + } + else + { + // angle is PI + float fHalfInverse; + if ( m[0][0] >= m[1][1] ) + { + // r00 >= r11 + if ( m[0][0] >= m[2][2] ) + { + // r00 is maximum diagonal term + rkAxis.x = 0.5*sqrt(m[0][0] - + m[1][1] - m[2][2] + 1.0); + fHalfInverse = 0.5/rkAxis.x; + rkAxis.y = fHalfInverse*m[0][1]; + rkAxis.z = fHalfInverse*m[0][2]; + } + else + { + // r22 is maximum diagonal term + rkAxis.z = 0.5*sqrt(m[2][2] - + m[0][0] - m[1][1] + 1.0); + fHalfInverse = 0.5/rkAxis.z; + rkAxis.x = fHalfInverse*m[0][2]; + rkAxis.y = fHalfInverse*m[1][2]; + } + } + else + { + // r11 > r00 + if ( m[1][1] >= m[2][2] ) + { + // r11 is maximum diagonal term + rkAxis.y = 0.5*sqrt(m[1][1] - + m[0][0] - m[2][2] + 1.0); + fHalfInverse = 0.5/rkAxis.y; + rkAxis.x = fHalfInverse*m[0][1]; + rkAxis.z = fHalfInverse*m[1][2]; + } + else + { + // r22 is maximum diagonal term + rkAxis.z = 0.5*sqrt(m[2][2] - + m[0][0] - m[1][1] + 1.0); + fHalfInverse = 0.5/rkAxis.z; + rkAxis.x = fHalfInverse*m[0][2]; + rkAxis.y = fHalfInverse*m[1][2]; + } + } + } + } + else + { + // The angle is 0 and the matrix is the identity. Any axis will + // work, so just use the x-axis. + rkAxis.x = 1.0; + rkAxis.y = 0.0; + rkAxis.z = 0.0; + } +} +//----------------------------------------------------------------------- +void Matrix3::FromAxisAngle (const Vector3& rkAxis, float fRadians) +{ + float fCos = cos(fRadians); + float fSin = sin(fRadians); + float fOneMinusCos = 1.0-fCos; + float fX2 = rkAxis.x*rkAxis.x; + float fY2 = rkAxis.y*rkAxis.y; + float fZ2 = rkAxis.z*rkAxis.z; + float fXYM = rkAxis.x*rkAxis.y*fOneMinusCos; + float fXZM = rkAxis.x*rkAxis.z*fOneMinusCos; + float fYZM = rkAxis.y*rkAxis.z*fOneMinusCos; + float fXSin = rkAxis.x*fSin; + float fYSin = rkAxis.y*fSin; + float fZSin = rkAxis.z*fSin; + + m[0][0] = fX2*fOneMinusCos+fCos; + m[0][1] = fXYM-fZSin; + m[0][2] = fXZM+fYSin; + m[1][0] = fXYM+fZSin; + m[1][1] = fY2*fOneMinusCos+fCos; + m[1][2] = fYZM-fXSin; + m[2][0] = fXZM-fYSin; + m[2][1] = fYZM+fXSin; + m[2][2] = fZ2*fOneMinusCos+fCos; +} +//----------------------------------------------------------------------- +bool Matrix3::ToEulerAnglesXYZ (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const +{ + // rot = cy*cz -cy*sz sy + // cz*sx*sy+cx*sz cx*cz-sx*sy*sz -cy*sx + // -cx*cz*sy+sx*sz cz*sx+cx*sy*sz cx*cy + + rfPAngle = sin(m[0][2]); + if ( rfPAngle < (M_PI * 0.5) ) + { + if ( rfPAngle > -(M_PI * 0.5) ) + { + rfYAngle = atan2(-m[1][2],m[2][2]); + rfRAngle = atan2(-m[0][1],m[0][0]); + return true; + } + else + { + // WARNING. Not a unique solution. + float fRmY = atan2(m[1][0],m[1][1]); + rfRAngle = 0.0; // any angle works + rfYAngle = rfRAngle - fRmY; + return false; + } + } + else + { + // WARNING. Not a unique solution. + float fRpY = atan2(m[1][0],m[1][1]); + rfRAngle = 0.0; // any angle works + rfYAngle = fRpY - rfRAngle; + return false; + } +} +//----------------------------------------------------------------------- +bool Matrix3::ToEulerAnglesXZY (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const +{ + // rot = cy*cz -sz cz*sy + // sx*sy+cx*cy*sz cx*cz -cy*sx+cx*sy*sz + // -cx*sy+cy*sx*sz cz*sx cx*cy+sx*sy*sz + + rfPAngle = asin(-m[0][1]); + if ( rfPAngle < (M_PI*0.5) ) + { + if ( rfPAngle > -(M_PI*0.5) ) + { + rfYAngle = atan2(m[2][1],m[1][1]); + rfRAngle = atan2(m[0][2],m[0][0]); + return true; + } + else + { + // WARNING. Not a unique solution. + float fRmY = atan2(-m[2][0],m[2][2]); + rfRAngle = 0.0; // any angle works + rfYAngle = rfRAngle - fRmY; + return false; + } + } + else + { + // WARNING. Not a unique solution. + float fRpY = atan2(-m[2][0],m[2][2]); + rfRAngle = 0.0; // any angle works + rfYAngle = fRpY - rfRAngle; + return false; + } +} +//----------------------------------------------------------------------- +bool Matrix3::ToEulerAnglesYXZ (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const +{ + // rot = cy*cz+sx*sy*sz cz*sx*sy-cy*sz cx*sy + // cx*sz cx*cz -sx + // -cz*sy+cy*sx*sz cy*cz*sx+sy*sz cx*cy + + rfPAngle = asin(-m[1][2]); + if ( rfPAngle < (M_PI*0.5) ) + { + if ( rfPAngle > -(M_PI*0.5) ) + { + rfYAngle = atan2(m[0][2],m[2][2]); + rfRAngle = atan2(m[1][0],m[1][1]); + return true; + } + else + { + // WARNING. Not a unique solution. + float fRmY = atan2(-m[0][1],m[0][0]); + rfRAngle = 0.0; // any angle works + rfYAngle = rfRAngle - fRmY; + return false; + } + } + else + { + // WARNING. Not a unique solution. + float fRpY = atan2(-m[0][1],m[0][0]); + rfRAngle = 0.0; // any angle works + rfYAngle = fRpY - rfRAngle; + return false; + } +} +//----------------------------------------------------------------------- +bool Matrix3::ToEulerAnglesYZX (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const +{ + // rot = cy*cz sx*sy-cx*cy*sz cx*sy+cy*sx*sz + // sz cx*cz -cz*sx + // -cz*sy cy*sx+cx*sy*sz cx*cy-sx*sy*sz + + rfPAngle = asin(m[1][0]); + if ( rfPAngle < (M_PI*0.5) ) + { + if ( rfPAngle > -(M_PI*0.5) ) + { + rfYAngle = atan2(-m[2][0],m[0][0]); + rfRAngle = atan2(-m[1][2],m[1][1]); + return true; + } + else + { + // WARNING. Not a unique solution. + float fRmY = atan2(m[2][1],m[2][2]); + rfRAngle = 0.0; // any angle works + rfYAngle = rfRAngle - fRmY; + return false; + } + } + else + { + // WARNING. Not a unique solution. + float fRpY = atan2(m[2][1],m[2][2]); + rfRAngle = 0.0; // any angle works + rfYAngle = fRpY - rfRAngle; + return false; + } +} +//----------------------------------------------------------------------- +bool Matrix3::ToEulerAnglesZXY (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const +{ + // rot = cy*cz-sx*sy*sz -cx*sz cz*sy+cy*sx*sz + // cz*sx*sy+cy*sz cx*cz -cy*cz*sx+sy*sz + // -cx*sy sx cx*cy + + rfPAngle = asin(m[2][1]); + if ( rfPAngle < (M_PI*0.5) ) + { + if ( rfPAngle > -(M_PI*0.5) ) + { + rfYAngle = atan2(-m[0][1],m[1][1]); + rfRAngle = atan2(-m[2][0],m[2][2]); + return true; + } + else + { + // WARNING. Not a unique solution. + float fRmY = atan2(m[0][2],m[0][0]); + rfRAngle = 0.0; // any angle works + rfYAngle = rfRAngle - fRmY; + return false; + } + } + else + { + // WARNING. Not a unique solution. + float fRpY = atan2(m[0][2],m[0][0]); + rfRAngle = 0.0; // any angle works + rfYAngle = fRpY - rfRAngle; + return false; + } +} +//----------------------------------------------------------------------- +bool Matrix3::ToEulerAnglesZYX (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const +{ + // rot = cy*cz cz*sx*sy-cx*sz cx*cz*sy+sx*sz + // cy*sz cx*cz+sx*sy*sz -cz*sx+cx*sy*sz + // -sy cy*sx cx*cy + + rfPAngle = asin(-m[2][0]); + if ( rfPAngle < (M_PI*0.5) ) + { + if ( rfPAngle > -(M_PI*0.5) ) + { + rfYAngle = atan2(m[1][0],m[0][0]); + rfRAngle = atan2(m[2][1],m[2][2]); + return true; + } + else + { + // WARNING. Not a unique solution. + float fRmY = atan2(-m[0][1],m[0][2]); + rfRAngle = 0.0; // any angle works + rfYAngle = rfRAngle - fRmY; + return false; + } + } + else + { + // WARNING. Not a unique solution. + float fRpY = atan2(-m[0][1],m[0][2]); + rfRAngle = 0.0; // any angle works + rfYAngle = fRpY - rfRAngle; + return false; + } +} +//----------------------------------------------------------------------- +void Matrix3::FromEulerAnglesXYZ (float fYAngle, float fPAngle, + float fRAngle) +{ + float fCos, fSin; + + fCos = cos(fYAngle); + fSin = sin(fYAngle); + Matrix3 kXMat(1.0,0.0,0.0,0.0,fCos,-fSin,0.0,fSin,fCos); + + fCos = cos(fPAngle); + fSin = sin(fPAngle); + Matrix3 kYMat(fCos,0.0,fSin,0.0,1.0,0.0,-fSin,0.0,fCos); + + fCos = cos(fRAngle); + fSin = sin(fRAngle); + Matrix3 kZMat(fCos,-fSin,0.0,fSin,fCos,0.0,0.0,0.0,1.0); + + *this = kXMat*(kYMat*kZMat); +} +//----------------------------------------------------------------------- +void Matrix3::FromEulerAnglesXZY (float fYAngle, float fPAngle, + float fRAngle) +{ + float fCos, fSin; + + fCos = cos(fYAngle); + fSin = sin(fYAngle); + Matrix3 kXMat(1.0,0.0,0.0,0.0,fCos,-fSin,0.0,fSin,fCos); + + fCos = cos(fPAngle); + fSin = sin(fPAngle); + Matrix3 kZMat(fCos,-fSin,0.0,fSin,fCos,0.0,0.0,0.0,1.0); + + fCos = cos(fRAngle); + fSin = sin(fRAngle); + Matrix3 kYMat(fCos,0.0,fSin,0.0,1.0,0.0,-fSin,0.0,fCos); + + *this = kXMat*(kZMat*kYMat); +} +//----------------------------------------------------------------------- +void Matrix3::FromEulerAnglesYXZ (float fYAngle, float fPAngle, + float fRAngle) +{ + float fCos, fSin; + + fCos = cos(fYAngle); + fSin = sin(fYAngle); + Matrix3 kYMat(fCos,0.0,fSin,0.0,1.0,0.0,-fSin,0.0,fCos); + + fCos = cos(fPAngle); + fSin = sin(fPAngle); + Matrix3 kXMat(1.0,0.0,0.0,0.0,fCos,-fSin,0.0,fSin,fCos); + + fCos = cos(fRAngle); + fSin = sin(fRAngle); + Matrix3 kZMat(fCos,-fSin,0.0,fSin,fCos,0.0,0.0,0.0,1.0); + + *this = kYMat*(kXMat*kZMat); +} +//----------------------------------------------------------------------- +void Matrix3::FromEulerAnglesYZX (float fYAngle, float fPAngle, + float fRAngle) +{ + float fCos, fSin; + + fCos = cos(fYAngle); + fSin = sin(fYAngle); + Matrix3 kYMat(fCos,0.0,fSin,0.0,1.0,0.0,-fSin,0.0,fCos); + + fCos = cos(fPAngle); + fSin = sin(fPAngle); + Matrix3 kZMat(fCos,-fSin,0.0,fSin,fCos,0.0,0.0,0.0,1.0); + + fCos = cos(fRAngle); + fSin = sin(fRAngle); + Matrix3 kXMat(1.0,0.0,0.0,0.0,fCos,-fSin,0.0,fSin,fCos); + + *this = kYMat*(kZMat*kXMat); +} +//----------------------------------------------------------------------- +void Matrix3::FromEulerAnglesZXY (float fYAngle, float fPAngle, + float fRAngle) +{ + float fCos, fSin; + + fCos = cos(fYAngle); + fSin = sin(fYAngle); + Matrix3 kZMat(fCos,-fSin,0.0,fSin,fCos,0.0,0.0,0.0,1.0); + + fCos = cos(fPAngle); + fSin = sin(fPAngle); + Matrix3 kXMat(1.0,0.0,0.0,0.0,fCos,-fSin,0.0,fSin,fCos); + + fCos = cos(fRAngle); + fSin = sin(fRAngle); + Matrix3 kYMat(fCos,0.0,fSin,0.0,1.0,0.0,-fSin,0.0,fCos); + + *this = kZMat*(kXMat*kYMat); +} +//----------------------------------------------------------------------- +void Matrix3::FromEulerAnglesZYX (float fYAngle, float fPAngle, + float fRAngle) +{ + float fCos, fSin; + + fCos = cos(fYAngle); + fSin = sin(fYAngle); + Matrix3 kZMat(fCos,-fSin,0.0,fSin,fCos,0.0,0.0,0.0,1.0); + + fCos = cos(fPAngle); + fSin = sin(fPAngle); + Matrix3 kYMat(fCos,0.0,fSin,0.0,1.0,0.0,-fSin,0.0,fCos); + + fCos = cos(fRAngle); + fSin = sin(fRAngle); + Matrix3 kXMat(1.0,0.0,0.0,0.0,fCos,-fSin,0.0,fSin,fCos); + + *this = kZMat*(kYMat*kXMat); +} +//----------------------------------------------------------------------- +void Matrix3::Tridiagonal (float afDiag[3], float afSubDiag[3]) +{ + // Householder reduction T = Q^t M Q + // Input: + // mat, symmetric 3x3 matrix M + // Output: + // mat, orthogonal matrix Q + // diag, diagonal entries of T + // subd, subdiagonal entries of T (T is symmetric) + + float fA = m[0][0]; + float fB = m[0][1]; + float fC = m[0][2]; + float fD = m[1][1]; + float fE = m[1][2]; + float fF = m[2][2]; + + afDiag[0] = fA; + afSubDiag[2] = 0.0; + if ( fabs(fC) >= EPSILON ) + { + float fLength = sqrt(fB*fB+fC*fC); + float fInvLength = 1.0/fLength; + fB *= fInvLength; + fC *= fInvLength; + float fQ = 2.0*fB*fE+fC*(fF-fD); + afDiag[1] = fD+fC*fQ; + afDiag[2] = fF-fC*fQ; + afSubDiag[0] = fLength; + afSubDiag[1] = fE-fB*fQ; + m[0][0] = 1.0; + m[0][1] = 0.0; + m[0][2] = 0.0; + m[1][0] = 0.0; + m[1][1] = fB; + m[1][2] = fC; + m[2][0] = 0.0; + m[2][1] = fC; + m[2][2] = -fB; + } + else + { + afDiag[1] = fD; + afDiag[2] = fF; + afSubDiag[0] = fB; + afSubDiag[1] = fE; + m[0][0] = 1.0; + m[0][1] = 0.0; + m[0][2] = 0.0; + m[1][0] = 0.0; + m[1][1] = 1.0; + m[1][2] = 0.0; + m[2][0] = 0.0; + m[2][1] = 0.0; + m[2][2] = 1.0; + } +} +//----------------------------------------------------------------------- +bool Matrix3::QLAlgorithm (float afDiag[3], float afSubDiag[3]) +{ + // QL iteration with implicit shifting to reduce matrix from tridiagonal + // to diagonal + + for (int i0 = 0; i0 < 3; i0++) + { + const int iMaxIter = 32; + int iIter; + for (iIter = 0; iIter < iMaxIter; iIter++) + { + int i1; + for (i1 = i0; i1 <= 1; i1++) + { + float fSum = fabs(afDiag[i1]) + + fabs(afDiag[i1+1]); + if ( fabs(afSubDiag[i1]) + fSum == fSum ) + break; + } + if ( i1 == i0 ) + break; + + float fTmp0 = (afDiag[i0+1]-afDiag[i0])/(2.0*afSubDiag[i0]); + float fTmp1 = sqrt(fTmp0*fTmp0+1.0); + if ( fTmp0 < 0.0 ) + fTmp0 = afDiag[i1]-afDiag[i0]+afSubDiag[i0]/(fTmp0-fTmp1); + else + fTmp0 = afDiag[i1]-afDiag[i0]+afSubDiag[i0]/(fTmp0+fTmp1); + float fSin = 1.0; + float fCos = 1.0; + float fTmp2 = 0.0; + for (int i2 = i1-1; i2 >= i0; i2--) + { + float fTmp3 = fSin*afSubDiag[i2]; + float fTmp4 = fCos*afSubDiag[i2]; + if ( fabs(fTmp3) >= fabs(fTmp0) ) + { + fCos = fTmp0/fTmp3; + fTmp1 = sqrt(fCos*fCos+1.0); + afSubDiag[i2+1] = fTmp3*fTmp1; + fSin = 1.0/fTmp1; + fCos *= fSin; + } + else + { + fSin = fTmp3/fTmp0; + fTmp1 = sqrt(fSin*fSin+1.0); + afSubDiag[i2+1] = fTmp0*fTmp1; + fCos = 1.0/fTmp1; + fSin *= fCos; + } + fTmp0 = afDiag[i2+1]-fTmp2; + fTmp1 = (afDiag[i2]-fTmp0)*fSin+2.0*fTmp4*fCos; + fTmp2 = fSin*fTmp1; + afDiag[i2+1] = fTmp0+fTmp2; + fTmp0 = fCos*fTmp1-fTmp4; + + for (int iRow = 0; iRow < 3; iRow++) + { + fTmp3 = m[iRow][i2+1]; + m[iRow][i2+1] = fSin*m[iRow][i2] + + fCos*fTmp3; + m[iRow][i2] = fCos*m[iRow][i2] - + fSin*fTmp3; + } + } + afDiag[i0] -= fTmp2; + afSubDiag[i0] = fTmp0; + afSubDiag[i1] = 0.0; + } + + if ( iIter == iMaxIter ) + { + // should not get here under normal circumstances + return false; + } + } + + return true; +} +//----------------------------------------------------------------------- +void Matrix3::EigenSolveSymmetric (float afEigenvalue[3], + Vector3 akEigenvector[3]) const +{ + Matrix3 kMatrix = *this; + float afSubDiag[3]; + kMatrix.Tridiagonal(afEigenvalue,afSubDiag); + kMatrix.QLAlgorithm(afEigenvalue,afSubDiag); + + for (int i = 0; i < 3; i++) + { + akEigenvector[i][0] = kMatrix[0][i]; + akEigenvector[i][1] = kMatrix[1][i]; + akEigenvector[i][2] = kMatrix[2][i]; + } + + // make eigenvectors form a right--handed system + Vector3 kCross = akEigenvector[1].crossProduct(akEigenvector[2]); + float fDet = akEigenvector[0].dotProduct(kCross); + if ( fDet < 0.0 ) + { + akEigenvector[2][0] = - akEigenvector[2][0]; + akEigenvector[2][1] = - akEigenvector[2][1]; + akEigenvector[2][2] = - akEigenvector[2][2]; + } +} +//----------------------------------------------------------------------- +void Matrix3::TensorProduct (const Vector3& rkU, const Vector3& rkV, + Matrix3& rkProduct) +{ + for (int iRow = 0; iRow < 3; iRow++) + { + for (int iCol = 0; iCol < 3; iCol++) + rkProduct[iRow][iCol] = rkU[iRow]*rkV[iCol]; + } +} + diff --git a/src/Matrix3.h b/src/Matrix3.h new file mode 100644 index 0000000..066992a --- /dev/null +++ b/src/Matrix3.h @@ -0,0 +1,178 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE + (Object-oriented Graphics Rendering Engine) +For the latest info, see http://ogre.sourceforge.net/ + +Copyright © 2000-2002 The OGRE Team +Also see acknowledgements in Readme.html + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ +#ifndef __Matrix3_H__ +#define __Matrix3_H__ + +#include "Vector3.h" + +// NB All code adapted from Wild Magic 0.2 Matrix math (free source code) +// http://www.magic-software.com + +// NOTE. The (x,y,z) coordinate system is assumed to be right-handed. +// Coordinate axis rotation matrices are of the form +// RX = 1 0 0 +// 0 cos(t) -sin(t) +// 0 sin(t) cos(t) +// where t > 0 indicates a counterclockwise rotation in the yz-plane +// RY = cos(t) 0 sin(t) +// 0 1 0 +// -sin(t) 0 cos(t) +// where t > 0 indicates a counterclockwise rotation in the zx-plane +// RZ = cos(t) -sin(t) 0 +// sin(t) cos(t) 0 +// 0 0 1 +// where t > 0 indicates a counterclockwise rotation in the xy-plane. + + +/** A 3x3 matrix which can represent rotations around axes. + @note + All the code is adapted from the Wild Magic 0.2 Matrix + library (http://www.magic-software.com). + @par + The coordinate system is assumed to be right-handed. +*/ +class Matrix3 +{ +public: + // construction + Matrix3 (); + Matrix3 (const float arr[3][3]); + Matrix3 (const Matrix3& rkMatrix); + Matrix3 (float fEntry00, float fEntry01, float fEntry02, + float fEntry10, float fEntry11, float fEntry12, + float fEntry20, float fEntry21, float fEntry22); + + // member access, allows use of construct mat[r][c] + float* operator[] (int iRow) const; + operator float* (); + Vector3 GetColumn (int iCol) const; + void SetColumn(int iCol, const Vector3& vec); + void FromAxes(const Vector3& xAxis, const Vector3& yAxis, const Vector3& zAxis); + + // assignment and comparison + Matrix3& operator= (const Matrix3& rkMatrix); + bool operator== (const Matrix3& rkMatrix) const; + bool operator!= (const Matrix3& rkMatrix) const; + + // arithmetic operations + Matrix3 operator+ (const Matrix3& rkMatrix) const; + Matrix3 operator- (const Matrix3& rkMatrix) const; + Matrix3 operator* (const Matrix3& rkMatrix) const; + Matrix3 operator- () const; + + // matrix * vector [3x3 * 3x1 = 3x1] + Vector3 operator* (const Vector3& rkVector) const; + + // vector * matrix [1x3 * 3x3 = 1x3] + friend Vector3 operator* (const Vector3& rkVector, + const Matrix3& rkMatrix); + + // matrix * scalar + Matrix3 operator* (float fScalar) const; + + // scalar * matrix + friend Matrix3 operator* (float fScalar, const Matrix3& rkMatrix); + + // utilities + Matrix3 Transpose () const; + bool Inverse (Matrix3& rkInverse, float fTolerance = 1e-06) const; + Matrix3 Inverse (float fTolerance = 1e-06) const; + float Determinant () const; + + // singular value decomposition + void SingularValueDecomposition (Matrix3& rkL, Vector3& rkS, + Matrix3& rkR) const; + void SingularValueComposition (const Matrix3& rkL, + const Vector3& rkS, const Matrix3& rkR); + + // Gram-Schmidt orthonormalization (applied to columns of rotation matrix) + void Orthonormalize (); + + // orthogonal Q, diagonal D, upper triangular U stored as (u01,u02,u12) + void QDUDecomposition (Matrix3& rkQ, Vector3& rkD, + Vector3& rkU) const; + + float SpectralNorm () const; + + // matrix must be orthonormal + void ToAxisAngle (Vector3& rkAxis, float& rfRadians) const; + void FromAxisAngle (const Vector3& rkAxis, float fRadians); + + // The matrix must be orthonormal. The decomposition is yaw*pitch*roll + // where yaw is rotation about the Up vector, pitch is rotation about the + // Right axis, and roll is rotation about the Direction axis. + bool ToEulerAnglesXYZ (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const; + bool ToEulerAnglesXZY (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const; + bool ToEulerAnglesYXZ (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const; + bool ToEulerAnglesYZX (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const; + bool ToEulerAnglesZXY (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const; + bool ToEulerAnglesZYX (float& rfYAngle, float& rfPAngle, + float& rfRAngle) const; + void FromEulerAnglesXYZ (float fYAngle, float fPAngle, float fRAngle); + void FromEulerAnglesXZY (float fYAngle, float fPAngle, float fRAngle); + void FromEulerAnglesYXZ (float fYAngle, float fPAngle, float fRAngle); + void FromEulerAnglesYZX (float fYAngle, float fPAngle, float fRAngle); + void FromEulerAnglesZXY (float fYAngle, float fPAngle, float fRAngle); + void FromEulerAnglesZYX (float fYAngle, float fPAngle, float fRAngle); + + // eigensolver, matrix must be symmetric + void EigenSolveSymmetric (float afEigenvalue[3], + Vector3 akEigenvector[3]) const; + + static void TensorProduct (const Vector3& rkU, const Vector3& rkV, + Matrix3& rkProduct); + + static const float EPSILON; + static const Matrix3 ZERO; + static const Matrix3 IDENTITY; + +protected: + // support for eigensolver + void Tridiagonal (float afDiag[3], float afSubDiag[3]); + bool QLAlgorithm (float afDiag[3], float afSubDiag[3]); + + // support for singular value decomposition + static const float ms_fSvdEpsilon; + static const int ms_iSvdMaxIterations; + static void Bidiagonalize (Matrix3& kA, Matrix3& kL, + Matrix3& kR); + static void GolubKahanStep (Matrix3& kA, Matrix3& kL, + Matrix3& kR); + + // support for spectral norm + static float MaxCubicRoot (float afCoeff[3]); + + float m[3][3]; + + // for faster access + friend class Matrix4; +}; + +#endif diff --git a/src/Matrix4.cpp b/src/Matrix4.cpp new file mode 100644 index 0000000..e3aa8d7 --- /dev/null +++ b/src/Matrix4.cpp @@ -0,0 +1,90 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE +(Object-oriented Graphics Rendering Engine) +For the latest info, see http://ogre.sourceforge.net/ + +Copyright © 2000-2002 The OGRE Team +Also see acknowledgements in Readme.html + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ +#include "Matrix4.h" + +#include "Vector3.h" +#include "Matrix3.h" + + +const Matrix4 Matrix4::ZERO( + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0 ); + +const Matrix4 Matrix4::IDENTITY( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 ); + + +inline float + MINOR(const Matrix4& m, const int r0, const int r1, const int r2, const int c0, const int c1, const int c2) +{ + return m[r0][c0] * (m[r1][c1] * m[r2][c2] - m[r2][c1] * m[r1][c2]) - + m[r0][c1] * (m[r1][c0] * m[r2][c2] - m[r2][c0] * m[r1][c2]) + + m[r0][c2] * (m[r1][c0] * m[r2][c1] - m[r2][c0] * m[r1][c1]); +} + + +Matrix4 Matrix4::adjoint() const +{ + return Matrix4( MINOR(*this, 1, 2, 3, 1, 2, 3), + -MINOR(*this, 0, 2, 3, 1, 2, 3), + MINOR(*this, 0, 1, 3, 1, 2, 3), + -MINOR(*this, 0, 1, 2, 1, 2, 3), + + -MINOR(*this, 1, 2, 3, 0, 2, 3), + MINOR(*this, 0, 2, 3, 0, 2, 3), + -MINOR(*this, 0, 1, 3, 0, 2, 3), + MINOR(*this, 0, 1, 2, 0, 2, 3), + + MINOR(*this, 1, 2, 3, 0, 1, 3), + -MINOR(*this, 0, 2, 3, 0, 1, 3), + MINOR(*this, 0, 1, 3, 0, 1, 3), + -MINOR(*this, 0, 1, 2, 0, 1, 3), + + -MINOR(*this, 1, 2, 3, 0, 1, 2), + MINOR(*this, 0, 2, 3, 0, 1, 2), + -MINOR(*this, 0, 1, 3, 0, 1, 2), + MINOR(*this, 0, 1, 2, 0, 1, 2)); +} + + +float Matrix4::determinant() const +{ + return m[0][0] * MINOR(*this, 1, 2, 3, 1, 2, 3) - + m[0][1] * MINOR(*this, 1, 2, 3, 0, 2, 3) + + m[0][2] * MINOR(*this, 1, 2, 3, 0, 1, 3) - + m[0][3] * MINOR(*this, 1, 2, 3, 0, 1, 2); +} + +Matrix4 Matrix4::inverse() const +{ + return adjoint() * (1.0f / determinant()); +} + + diff --git a/src/Matrix4.h b/src/Matrix4.h new file mode 100644 index 0000000..bc8020b --- /dev/null +++ b/src/Matrix4.h @@ -0,0 +1,437 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE + (Object-oriented Graphics Rendering Engine) +For the latest info, see http://ogre.sourceforge.net/ + +Copyright © 2000-2002 The OGRE Team +Also see acknowledgements in Readme.html + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ +#ifndef __Matrix4__ +#define __Matrix4__ + +#include "Vector3.h" +#include "Matrix3.h" + +/** Class encapsulating a standard 4x4 homogenous matrix. + @remarks + OGRE uses column vectors when applying matrix multiplications, + This means a vector is represented as a single column, 4-row + matrix. This has the effect that the tranformations implemented + by the matrices happens right-to-left e.g. if vector V is to be + transformed by M1 then M2 then M3, the calculation would be + M3 * M2 * M1 * V. The order that matrices are concatenated is + vital since matrix multiplication is not cummatative, i.e. you + can get a different result if you concatenate in the wrong order. + @par + The use of column vectors and right-to-left ordering is the + standard in most mathematical texts, and id the same as used in + OpenGL. It is, however, the opposite of Direct3D, which has + inexplicably chosen to differ from the accepted standard and uses + row vectors and left-to-right matrix multiplication. + @par + OGRE deals with the differences between D3D and OpenGL etc. + internally when operating through different render systems. OGRE + users only need to conform to standard maths conventions, i.e. + right-to-left matrix multiplication, (OGRE transposes matrices it + passes to D3D to compensate). + @par + The generic form M * V which shows the layout of the matrix + entries is shown below: +
+            [ m[0][0]  m[0][1]  m[0][2]  m[0][3] ]   {x}
+            | m[1][0]  m[1][1]  m[1][2]  m[1][3] | * {y}
+            | m[2][0]  m[2][1]  m[2][2]  m[2][3] |   {z}
+            [ m[3][0]  m[3][1]  m[3][2]  m[3][3] ]   {1}
+        
+*/ +class Matrix4 +{ +protected: + /// The matrix entries, indexed by [row][col]. + union { + float m[4][4]; + float _m[16]; + }; +public: + /** Default constructor. + @note + It does NOT initialize the matrix for efficiency. + */ + inline Matrix4() + { + } + + inline Matrix4( + float m00, float m01, float m02, float m03, + float m10, float m11, float m12, float m13, + float m20, float m21, float m22, float m23, + float m30, float m31, float m32, float m33 ) + { + m[0][0] = m00; + m[0][1] = m01; + m[0][2] = m02; + m[0][3] = m03; + m[1][0] = m10; + m[1][1] = m11; + m[1][2] = m12; + m[1][3] = m13; + m[2][0] = m20; + m[2][1] = m21; + m[2][2] = m22; + m[2][3] = m23; + m[3][0] = m30; + m[3][1] = m31; + m[3][2] = m32; + m[3][3] = m33; + } + + /* + inline operator float* (void) + { + return _m; + } + + inline operator const float* (void) + { + return _m; + } + */ + + inline float* operator [] ( unsigned iRow ) + { + assert( iRow < 4 ); + return m[iRow]; + } + + inline const float *const operator [] ( unsigned iRow ) const + { + assert( iRow < 4 ); + return m[iRow]; + } + + inline Matrix4 concatenate(const Matrix4 &m2) const + { + Matrix4 r; + r.m[0][0] = m[0][0] * m2.m[0][0] + m[0][1] * m2.m[1][0] + m[0][2] * m2.m[2][0] + m[0][3] * m2.m[3][0]; + r.m[0][1] = m[0][0] * m2.m[0][1] + m[0][1] * m2.m[1][1] + m[0][2] * m2.m[2][1] + m[0][3] * m2.m[3][1]; + r.m[0][2] = m[0][0] * m2.m[0][2] + m[0][1] * m2.m[1][2] + m[0][2] * m2.m[2][2] + m[0][3] * m2.m[3][2]; + r.m[0][3] = m[0][0] * m2.m[0][3] + m[0][1] * m2.m[1][3] + m[0][2] * m2.m[2][3] + m[0][3] * m2.m[3][3]; + + r.m[1][0] = m[1][0] * m2.m[0][0] + m[1][1] * m2.m[1][0] + m[1][2] * m2.m[2][0] + m[1][3] * m2.m[3][0]; + r.m[1][1] = m[1][0] * m2.m[0][1] + m[1][1] * m2.m[1][1] + m[1][2] * m2.m[2][1] + m[1][3] * m2.m[3][1]; + r.m[1][2] = m[1][0] * m2.m[0][2] + m[1][1] * m2.m[1][2] + m[1][2] * m2.m[2][2] + m[1][3] * m2.m[3][2]; + r.m[1][3] = m[1][0] * m2.m[0][3] + m[1][1] * m2.m[1][3] + m[1][2] * m2.m[2][3] + m[1][3] * m2.m[3][3]; + + r.m[2][0] = m[2][0] * m2.m[0][0] + m[2][1] * m2.m[1][0] + m[2][2] * m2.m[2][0] + m[2][3] * m2.m[3][0]; + r.m[2][1] = m[2][0] * m2.m[0][1] + m[2][1] * m2.m[1][1] + m[2][2] * m2.m[2][1] + m[2][3] * m2.m[3][1]; + r.m[2][2] = m[2][0] * m2.m[0][2] + m[2][1] * m2.m[1][2] + m[2][2] * m2.m[2][2] + m[2][3] * m2.m[3][2]; + r.m[2][3] = m[2][0] * m2.m[0][3] + m[2][1] * m2.m[1][3] + m[2][2] * m2.m[2][3] + m[2][3] * m2.m[3][3]; + + r.m[3][0] = m[3][0] * m2.m[0][0] + m[3][1] * m2.m[1][0] + m[3][2] * m2.m[2][0] + m[3][3] * m2.m[3][0]; + r.m[3][1] = m[3][0] * m2.m[0][1] + m[3][1] * m2.m[1][1] + m[3][2] * m2.m[2][1] + m[3][3] * m2.m[3][1]; + r.m[3][2] = m[3][0] * m2.m[0][2] + m[3][1] * m2.m[1][2] + m[3][2] * m2.m[2][2] + m[3][3] * m2.m[3][2]; + r.m[3][3] = m[3][0] * m2.m[0][3] + m[3][1] * m2.m[1][3] + m[3][2] * m2.m[2][3] + m[3][3] * m2.m[3][3]; + + return r; + } + + /** Matrix concatenation using '*'. + */ + inline Matrix4 operator * ( const Matrix4 &m2 ) const + { + return concatenate( m2 ); + } + + /** Vector transformation using '*'. + @remarks + Transforms the given 3-D vector by the matrix, projecting the + result back into w = 1. + @note + This means that the initial w is considered to be 1.0, + and then all the tree elements of the resulting 3-D vector are + divided by the resulting w. + */ + inline Vector3 operator * ( const Vector3 &v ) const + { + Vector3 r; + + float fInvW = 1.0 / ( m[3][0] * v.x + m[3][1] * v.y + m[3][2] * v.z + m[3][3] ); + + r.x = ( m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z + m[0][3] ) * fInvW; + r.y = ( m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z + m[1][3] ) * fInvW; + r.z = ( m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z + m[2][3] ) * fInvW; + + return r; + } + + /** Matrix addition. + */ + inline Matrix4 operator + ( const Matrix4 &m2 ) const + { + Matrix4 r; + + r.m[0][0] = m[0][0] + m2.m[0][0]; + r.m[0][1] = m[0][1] + m2.m[0][1]; + r.m[0][2] = m[0][2] + m2.m[0][2]; + r.m[0][3] = m[0][3] + m2.m[0][3]; + + r.m[1][0] = m[1][0] + m2.m[1][0]; + r.m[1][1] = m[1][1] + m2.m[1][1]; + r.m[1][2] = m[1][2] + m2.m[1][2]; + r.m[1][3] = m[1][3] + m2.m[1][3]; + + r.m[2][0] = m[2][0] + m2.m[2][0]; + r.m[2][1] = m[2][1] + m2.m[2][1]; + r.m[2][2] = m[2][2] + m2.m[2][2]; + r.m[2][3] = m[2][3] + m2.m[2][3]; + + r.m[3][0] = m[3][0] + m2.m[3][0]; + r.m[3][1] = m[3][1] + m2.m[3][1]; + r.m[3][2] = m[3][2] + m2.m[3][2]; + r.m[3][3] = m[3][3] + m2.m[3][3]; + + return r; + } + + /** Matrix subtraction. + */ + inline Matrix4 operator - ( const Matrix4 &m2 ) const + { + Matrix4 r; + r.m[0][0] = m[0][0] - m2.m[0][0]; + r.m[0][1] = m[0][1] - m2.m[0][1]; + r.m[0][2] = m[0][2] - m2.m[0][2]; + r.m[0][3] = m[0][3] - m2.m[0][3]; + + r.m[1][0] = m[1][0] - m2.m[1][0]; + r.m[1][1] = m[1][1] - m2.m[1][1]; + r.m[1][2] = m[1][2] - m2.m[1][2]; + r.m[1][3] = m[1][3] - m2.m[1][3]; + + r.m[2][0] = m[2][0] - m2.m[2][0]; + r.m[2][1] = m[2][1] - m2.m[2][1]; + r.m[2][2] = m[2][2] - m2.m[2][2]; + r.m[2][3] = m[2][3] - m2.m[2][3]; + + r.m[3][0] = m[3][0] - m2.m[3][0]; + r.m[3][1] = m[3][1] - m2.m[3][1]; + r.m[3][2] = m[3][2] - m2.m[3][2]; + r.m[3][3] = m[3][3] - m2.m[3][3]; + + return r; + } + + /** Tests 2 matrices for equality. + */ + inline bool operator == ( const Matrix4& m2 ) const + { + if( + m[0][0] != m2.m[0][0] || m[0][1] != m2.m[0][1] || m[0][2] != m2.m[0][2] || m[0][3] != m2.m[0][3] || + m[1][0] != m2.m[1][0] || m[1][1] != m2.m[1][1] || m[1][2] != m2.m[1][2] || m[1][3] != m2.m[1][3] || + m[2][0] != m2.m[2][0] || m[2][1] != m2.m[2][1] || m[2][2] != m2.m[2][2] || m[2][3] != m2.m[2][3] || + m[3][0] != m2.m[3][0] || m[3][1] != m2.m[3][1] || m[3][2] != m2.m[3][2] || m[3][3] != m2.m[3][3] ) + return false; + return true; + } + + /** Tests 2 matrices for inequality. + */ + inline bool operator != ( Matrix4& m2 ) const + { + if( + m[0][0] != m2.m[0][0] || m[0][1] != m2.m[0][1] || m[0][2] != m2.m[0][2] || m[0][3] != m2.m[0][3] || + m[1][0] != m2.m[1][0] || m[1][1] != m2.m[1][1] || m[1][2] != m2.m[1][2] || m[1][3] != m2.m[1][3] || + m[2][0] != m2.m[2][0] || m[2][1] != m2.m[2][1] || m[2][2] != m2.m[2][2] || m[2][3] != m2.m[2][3] || + m[3][0] != m2.m[3][0] || m[3][1] != m2.m[3][1] || m[3][2] != m2.m[3][2] || m[3][3] != m2.m[3][3] ) + return true; + return false; + } + + /** Assignment from 3x3 matrix. + */ + inline void operator = ( const Matrix3& mat3 ) + { + m[0][0] = mat3.m[0][0]; m[0][1] = mat3.m[0][1]; m[0][2] = mat3.m[0][2]; + m[1][0] = mat3.m[1][0]; m[1][1] = mat3.m[1][1]; m[1][2] = mat3.m[1][2]; + m[2][0] = mat3.m[2][0]; m[2][1] = mat3.m[2][1]; m[2][2] = mat3.m[2][2]; + } + + inline Matrix4 transpose(void) const + { + return Matrix4(m[0][0], m[1][0], m[2][0], m[3][0], + m[0][1], m[1][1], m[2][1], m[3][1], + m[0][2], m[1][2], m[2][2], m[3][2], + m[0][3], m[1][3], m[2][3], m[3][3]); + } + + /* + ----------------------------------------------------------------------- + Translation Transformation + ----------------------------------------------------------------------- + */ + /** Sets the translation transformation part of the matrix. + */ + inline void setTrans( const Vector3& v ) + { + m[0][3] = v.x; + m[1][3] = v.y; + m[2][3] = v.z; + } + + /** Builds a translation matrix + */ + inline void makeTrans( const Vector3& v ) + { + m[0][0] = 1.0; m[0][1] = 0.0; m[0][2] = 0.0; m[0][3] = v.x; + m[1][0] = 0.0; m[1][1] = 1.0; m[1][2] = 0.0; m[1][3] = v.y; + m[2][0] = 0.0; m[2][1] = 0.0; m[2][2] = 1.0; m[2][3] = v.z; + m[3][0] = 0.0; m[3][1] = 0.0; m[3][2] = 0.0; m[3][3] = 1.0; + } + + inline void makeTrans( float tx, float ty, float tz ) + { + m[0][0] = 1.0; m[0][1] = 0.0; m[0][2] = 0.0; m[0][3] = tx; + m[1][0] = 0.0; m[1][1] = 1.0; m[1][2] = 0.0; m[1][3] = ty; + m[2][0] = 0.0; m[2][1] = 0.0; m[2][2] = 1.0; m[2][3] = tz; + m[3][0] = 0.0; m[3][1] = 0.0; m[3][2] = 0.0; m[3][3] = 1.0; + } + + /** Gets a translation matrix. + */ + inline static Matrix4 getTrans( const Vector3& v ) + { + Matrix4 r; + + r.m[0][0] = 1.0; r.m[0][1] = 0.0; r.m[0][2] = 0.0; r.m[0][3] = v.x; + r.m[1][0] = 0.0; r.m[1][1] = 1.0; r.m[1][2] = 0.0; r.m[1][3] = v.y; + r.m[2][0] = 0.0; r.m[2][1] = 0.0; r.m[2][2] = 1.0; r.m[2][3] = v.z; + r.m[3][0] = 0.0; r.m[3][1] = 0.0; r.m[3][2] = 0.0; r.m[3][3] = 1.0; + + return r; + } + + /** Gets a translation matrix - variation for not using a vector. + */ + inline static Matrix4 getTrans( float t_x, float t_y, float t_z ) + { + Matrix4 r; + + r.m[0][0] = 1.0; r.m[0][1] = 0.0; r.m[0][2] = 0.0; r.m[0][3] = t_x; + r.m[1][0] = 0.0; r.m[1][1] = 1.0; r.m[1][2] = 0.0; r.m[1][3] = t_y; + r.m[2][0] = 0.0; r.m[2][1] = 0.0; r.m[2][2] = 1.0; r.m[2][3] = t_z; + r.m[3][0] = 0.0; r.m[3][1] = 0.0; r.m[3][2] = 0.0; r.m[3][3] = 1.0; + + return r; + } + + /* + ----------------------------------------------------------------------- + Scale Transformation + ----------------------------------------------------------------------- + */ + /** Sets the scale part of the matrix. + */ + inline void setScale( const Vector3& v ) + { + m[0][0] = v.x; + m[1][1] = v.y; + m[2][2] = v.z; + } + + /** Gets a scale matrix. + */ + inline static Matrix4 getScale( const Vector3& v ) + { + Matrix4 r; + r.m[0][0] = v.x; r.m[0][1] = 0.0; r.m[0][2] = 0.0; r.m[0][3] = 0.0; + r.m[1][0] = 0.0; r.m[1][1] = v.y; r.m[1][2] = 0.0; r.m[1][3] = 0.0; + r.m[2][0] = 0.0; r.m[2][1] = 0.0; r.m[2][2] = v.z; r.m[2][3] = 0.0; + r.m[3][0] = 0.0; r.m[3][1] = 0.0; r.m[3][2] = 0.0; r.m[3][3] = 1.0; + + return r; + } + + /** Gets a scale matrix - variation for not using a vector. + */ + inline static Matrix4 getScale( float s_x, float s_y, float s_z ) + { + Matrix4 r; + r.m[0][0] = s_x; r.m[0][1] = 0.0; r.m[0][2] = 0.0; r.m[0][3] = 0.0; + r.m[1][0] = 0.0; r.m[1][1] = s_y; r.m[1][2] = 0.0; r.m[1][3] = 0.0; + r.m[2][0] = 0.0; r.m[2][1] = 0.0; r.m[2][2] = s_z; r.m[2][3] = 0.0; + r.m[3][0] = 0.0; r.m[3][1] = 0.0; r.m[3][2] = 0.0; r.m[3][3] = 1.0; + + return r; + } + + /** Extracts the rotation / scaling part of the Matrix as a 3x3 matrix. + @param m3x3 Destination Matrix3 + */ + inline void extract3x3Matrix(Matrix3& m3x3) const + { + m3x3.m[0][0] = m[0][0]; + m3x3.m[0][1] = m[0][1]; + m3x3.m[0][2] = m[0][2]; + m3x3.m[1][0] = m[1][0]; + m3x3.m[1][1] = m[1][1]; + m3x3.m[1][2] = m[1][2]; + m3x3.m[2][0] = m[2][0]; + m3x3.m[2][1] = m[2][1]; + m3x3.m[2][2] = m[2][2]; + + } + + static const Matrix4 ZERO; + static const Matrix4 IDENTITY; + + inline Matrix4 operator*(float scalar) + { + return Matrix4( + scalar*m[0][0], scalar*m[0][1], scalar*m[0][2], scalar*m[0][3], + scalar*m[1][0], scalar*m[1][1], scalar*m[1][2], scalar*m[1][3], + scalar*m[2][0], scalar*m[2][1], scalar*m[2][2], scalar*m[2][3], + scalar*m[3][0], scalar*m[3][1], scalar*m[3][2], scalar*m[3][3]); + } + + /** Function for writing to a stream. + */ + inline friend std::ostream& operator << + ( std::ostream& o, const Matrix4& m ) + { + o << "Matrix4("; + for (int i = 0; i < 4; ++i) + { + o << " row" << i << "{"; + for(int j = 0; j < 4; ++j) + { + o << m[i][j] << " "; + } + o << "}"; + } + o << ")"; + return o; + } + + Matrix4 adjoint() const; + float determinant() const; + Matrix4 inverse() const; + +}; + +#endif diff --git a/src/Mesh.cpp b/src/Mesh.cpp new file mode 100644 index 0000000..67a1118 --- /dev/null +++ b/src/Mesh.cpp @@ -0,0 +1,950 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "Mesh.h" + +#define SWAP_NORMALS_NO + +Mesh::Mesh(const QString& filename,const QString& name, bool checkVBO, int mode) + : Entity(name), hasNormals(false), hasTextCoord(false), Binfo(true) +{ + ///Initialisation des variables + useVBO=(glewIsSupported("GL_ARB_vertex_buffer_object") & checkVBO); + + fName=filename; + + if (mode==0) + position.x=-1.0; + else if (mode==1) + position.x=-0.51; + else position.x=0.0; + position.y=0.65; + position.z=-1.; + + ///Initialisation du compteur de chargement + double debut, fin = clock(); + debut = clock(); + if(filename.contains("off")) + loadOFF(filename); + else if(filename.contains("gts")) + loadGTS(filename); + else if(filename.contains("obj")) + loadOBJ(filename); + else if(filename.contains("3ds")) + load3DS(filename); + else if(filename.contains("ply")) + loadPLY(filename); + + if (!hasNormals) + computeNormals(); + + normalize(); + + if (useVBO) + createVBO(); + + fin = clock(); + time = (fin - debut) / CLOCKS_PER_SEC; +} + +void Mesh::loadPLY(const QString& filename) +{ + QFile plyFile(filename); + if(!plyFile.open(QIODevice::ReadOnly)) + { + std::cerr << "erreur :Chargement PLY : " << filename.toStdString() << std::endl; + return; + } + + QString mot, header; + QTextStream in(&plyFile); + int nofVertices=0, nofFaces=0; + in >> header; + if(header != "ply") + { + std::cerr << "Wrong header = " << header.toStdString() << std::endl; + return; + } + bool end_header =false; + bool isAscii; + +// Lecture de l'header + while(!end_header) + { + in >> header; + if(header == "format") + { + in >> header; + std::cout<> nofVertices; + } + if(header == "face") + { + in >> nofFaces; + } + if(header == "end_header") + end_header=true; + } + + if (nofVertices ==0 | nofFaces==0) + { + std::cerr << "erreur : l'en-tête du fichier est incorrecte : Sommets : " <> vect.x >> vect.y >> vect.z; + // on place le vecteur v dans mVertices qui contient tout les sommets + mVertices.push_back(vect); + } + + // Pour toutes les faces du fichier + for(int i=0 ; i> nb >> id0 >> id1 >> id2; + // on verrifie que nb = 3 + assert(nb==3); + // on place les sommets dans mFaces qui contient toute les faces + #ifdef SWAP_NORMALS + mFaces.push_back(FaceIndex(id2, id1, id0)); + #else + mFaces.push_back(FaceIndex(id0, id1, id2)); + #endif + } + + //Pour les coordonnées de textures + float u,v; + for(int i=0 ; i>u >> v; + mVertices[i].texcoord[0] = u; + mVertices[i].texcoord[1] = v; + } + plyFile.close(); + } + else + { + std::cout<<"Le format binaire des ply n'est pas pris en compte."< vect_id,vect_norm; + std::vectorvect_coordt; + std::vector vertices_prov; + std::vector normales_prov; + std::vector indiceNorprov; + std::vector coordtex_prov; + std::vector indiceCTprov; + Vector3 indNorprov, indCTprov; + QString m,fc, header; + ////////////////////////////////////////////// + // Les éléments du fichier sont chargé dans la variable 'in' + QTextStream in(&objFile); + + // Boucle de lecture du fichier : tant qu'on a pas atteind la fin ! + while(!in.atEnd()) + { + //Lecture du premier caractère stocké dans la variable 'header' + in >> header; + /* vertex */ + if(header == "v") + { + //lecture des coordonnées du sommet + in >> vertice.x >> vertice.y >> vertice.z; + //On stock les coordonnées dans mVertices => au cas ou l'objet n'a pas de normales pré calculé + mVertices.push_back(vertice); + //On stock les coordonnées dans vertices_prov => au cas ou l'objet a des normales pré calculé + vertices_prov.push_back(vertice); + //On compte le nombre de sommets + v++; + //On passe a la ligne suivante + header = in.readLine(); + } + /* texture coords. */ + else if(header == "vt") + { + in >> vertice.x >> vertice.y >> vertice.z; + // On place les coordonnées de texture(généralement seulement x et y) + coordtex_prov.push_back(vertice); + //On compte le nombre de coordonnées + vt++; + hasTextCoord = true; + } + /* normal vector */ + else if(header == "vn") + { + //idem avec les normales + in >> vertice.x >> vertice.y >> vertice.z; + normales_prov.push_back(vertice); + vn++; + hasNormals = true; + header = in.readLine(); + } + /* face */ + else if(header == "f") + { + header = in.readLine(); + //on initialise i à 1 car on ne sait pas combien il y aura de sommet par face + i =1; + // on 'découpe' chaque portion contenant vertices/coortex/normale + m = header.section (' ',i,i); + // le premier élément du vecteur d'index est à zéro, il contiandra le nombre de sommets sur cette face + vect_id.push_back(0); + // lecture de chaque groupe vertices/coortex/normale de la face + while(!m.isEmpty()) + { + i++; + // On recherche di le groupe contien '//' : vertice et normale,(1,1) étant la deuxieme partie (les normales) + fc = m.section ("//",1,1); + if (!fc.isEmpty()) + { + id_norm = fc.toInt(); + //(0,0) est la premiere partie (les vertices) + fc = m.section ("//",0,0); + id_face = fc.toInt(); + } + else + { + // Sinon on cherche s'il y a au moins un '/' + fc = m.section ("/",1,1); + if (!fc.isEmpty()) + { + // s'il y en a un, la premiere partie (1,1) sera les coordonnées de texture + id_coordt = fc.toInt(); + // la premiere partie (0,0) sera les vertices + fc = m.section ("/",0,0); + id_face = fc.toInt(); + // on cherche s'il y a une troisieme partie (2,2) : les normales + fc = m.section ("/",2,2); + if (!fc.isEmpty()) id_norm = fc.toInt(); + } + else + { + // s'il n'y a pas de '/' c'est qu'il n'y a que les indices des sommets + id_face = m.toInt(); + } + } + // on enleve 1 aux indices pour que ça coincide avec un tableau en C++ + vect_id.push_back(id_face-1); + vect_norm.push_back(id_norm-1); + vect_coordt.push_back(id_coordt-1); + // puis cherche le prochain groupe vertices/coortex/normale de cette face + m = header.section (' ',i,i); + } + i--; + // on stock le nombre de sommet dans cette face + vect_id[0]=i; + //On parcours tout les sommets de la face en partant du 2ème + for (int j=2;jnb_max) + nb_max=i; + //calcul du nombre de facettes + f++; + } + // groups + else if(header == "g") + { + g++; + header = in.readLine(); + } + } + // Si l'objet a ses propres coordonnées de texture + taille=mFaces.size(); + if (hasNormals) + { + // On efface les vertices déjà entré + mVertices.clear(); + for (i=0;i Ça permet de mettre au même niveau les + // vertices avec les normales calculé, et celles avec les normales recopiés du fichier + mVertices.clear(); + taille=mFaces.size(); + //Pour toute les faces + for (i=0;i erreur si non trouve + if(!offFile.open(QIODevice::ReadOnly)) + { + std::cerr << "erreur : load OFF : " << filename.toStdString() << std::endl; + return; + } + //Lecture du fichier dans la variable "in" + QTextStream in(&offFile); + + //Declare une variable de type String : "header" + QString header; + + //met le premier mot de "in" dans "header" + in >> header; + + // le premier mot doit etre "OFF" + if(header != "OFF") + { + std::cerr << "Wrong header = " << header.toStdString() << std::endl; + return; + } + + //Nombre de Vertices, Nombre de Face et null + int nofVertices, nofFaces, inull; + // nombre de sommet par face, sommet1, sommet2 , sommet3 + int nb, id0, id1, id2; + //Vecteur size 3 + Vector3 v; + //Place le nombre de vertices totale et de faces totale contenu dans la deuxieme lignes, le dernier est 0 + in >> nofVertices >> nofFaces >> inull; + + // Pour tous les sommets du fichier + for(int i=0 ; i> v.x >> v.y >> v.z; + // on place le vecteur v dans mVertices qui contient tout les sommets + mVertices.push_back(v); + } + + // Pour toutes les faces du fichier + for(int i=0 ; i> nb >> id0 >> id1 >> id2; + // on verrifie que nb = 3 + assert(nb==3); + // on place les sommets dans mFaces qui contient toute les faces +#ifdef SWAP_NORMALS + mFaces.push_back(FaceIndex(id2, id1, id0)); +#else + mFaces.push_back(FaceIndex(id0, id1, id2)); +#endif + + } + // on ferme le fichier + offFile.close(); +} + +void Mesh::loadGTS(const QString& filename) +{ + QFile gtsFile(filename); + std::vector< std::pair > lEdges; + + if(!gtsFile.open(QIODevice::ReadOnly)) + { + std::cerr << "erreur : load GTS : " << filename.toStdString() << std::endl; + return; + } + + QTextStream in(>sFile); + QString header; + + int nofVertices, nofEdges, nofFaces; + int id0, id1, id2; + Vector3 v; + + in >> nofVertices >> nofEdges >> nofFaces; + + for(int i=0 ; i> v.x >> v.y >> v.z; + mVertices.push_back(v); + } + + for(int i=0 ; i> id0 >> id1; + lEdges.push_back( std::pair(id0-1,id1-1) ); + + } + + for(int i=0 ; i> id0 >> id1 >> id2; +#ifdef SWAP_NORMALS + mFaces.push_back(FaceIndex(lEdges[id2-1].first, lEdges[id1-1].first, lEdges[id0-1].first)); +#else + mFaces.push_back(FaceIndex(lEdges[id0-1].first, lEdges[id1-1].first, lEdges[id2-1].first)); +#endif + } + gtsFile.close(); +} + +void Mesh::computeNormals(void) +{ + // compute normals + Vector3 f_normal; + Vector3 p0, p1, p2,p3; + + for(FaceIndexArray::iterator f_iter = mFaces.begin() ; f_iter!=mFaces.end() ; ++f_iter) + { + p0 = mVertices[f_iter->indexes[2]].position; + p1 = mVertices[f_iter->indexes[1]].position; + p2 = mVertices[f_iter->indexes[0]].position; + f_normal = (p1-p0).crossProduct(p2-p0); + f_normal.normalise(); + mVertices[f_iter->indexes[2]].normal += f_normal; + mVertices[f_iter->indexes[1]].normal += f_normal; + mVertices[f_iter->indexes[0]].normal += f_normal; + } + + for(VertexArray::iterator v_iter = mVertices.begin() ; v_iter!=mVertices.end() ; ++v_iter) + { + v_iter->normal.normalise(); + } +} + +void Mesh::normalize(void) +{ + Vector3 min(1e99, 1e99, 1e99); + Vector3 max(-1e99, -1e99, -1e99); + + for(VertexArray::iterator v_iter = mVertices.begin() ; v_iter!=mVertices.end() ; ++v_iter) + { + min.makeFloor(v_iter->position); + max.makeCeil(v_iter->position); + } + + Vector3 diff = max - min; + float scale = diff.x > diff.y ? (diff.x > diff.z ? diff.x : diff.y) : (diff.y>diff.z ? diff.y : diff.z); + scale = 1./scale; + for(VertexArray::iterator v_iter = mVertices.begin() ; v_iter!=mVertices.end() ; ++v_iter) + { + v_iter->position -= min; + v_iter->position *= scale; + } +} + +Mesh::~Mesh() +{ + if (useVBO) + deleteVBO(); +} + +void Mesh::deleteVBO(void) +{ + glDeleteBuffers(1, &m_indexBuffer); + glDeleteBuffers(1, &m_vertexBuffer); + glDeleteBuffers(1, &m_normalBuffer); + glDeleteBuffers(1, &m_texCoordBuffer); +} + +void Mesh::createVBO(void) +{ + // Calcul de la taille qu'occupera le tableau d'index + GLsizeiptr IndexSize = mFaces.size() *3 * sizeof(GLuint); + // Calcul de la taille qu'occupera le tableau de sommets (et de normales) + GLsizeiptr PositionSize = mVertices.size() * 3 * sizeof(GLfloat); + // Calcul de la taille qu'occupera le tableau de coordonnées de texture + GLsizeiptr CTSize = mVertices.size() * 2 * sizeof(GLfloat); + // Nombre d'élément dans le tableau de sommets + int taille = mVertices.size(); + // Création et allocation du tableau de sommets qui sera envoyé à la carte graphique + float *PositionData; + PositionData = new float [taille*3]; + // Création et allocation du tableau de normales qui sera envoyé à la carte graphique + float *NormalData; + NormalData = new float [taille*3]; + // Création et allocation du tableau de coordonnées de textures qui sera envoyé à la carte graphique + float *CTData; + CTData = new float [taille*2]; + // Chargement des valeurs dans les tableaux qu'on vien de créer + for (int i=0;i Mesh::getVertexArray(){ + std::vector vect; + int taille= mVertices.size(); + for(int i=0;icosZ2) normalVect=-normalVect; + + + + + float distance = fabsf(normalVect.x*startPosition.x+normalVect.y*startPosition.y+normalVect.z*startPosition.z); + + if(nbPass==1) + { + if(maxdgetRow(); + //coordonnés de notre plan dans la matrice densité + densityCoord.x = (int)floor((ro)*(dim-1)/(3.1416)); + densityCoord.y = (int)floor((phi+3.1416)*(dim-1)/(3.1416*2)); + densityCoord.z = (int)floor((distance)*(dim-1)/(maxd)); + for(int covOfX = -coverage; covOfX <= coverage; covOfX++) + { + for(int covOfY = -coverage; covOfY <= coverage; covOfY++) + { + for(int covOfZ = -coverage; covOfZ <= coverage; covOfZ++) + { + if( densityCoord.x+covOfX=0 && densityCoord.y+covOfY>=0 && densityCoord.z+covOfZ>=0) + { + + int neighbourDist=abs(covOfX); + if(neighbourDistfill( (int) densityCoord.x+covOfX, (int) densityCoord.y+covOfY, + (int) densityCoord.z+covOfZ, area*pow(0.8,neighbourDist)); + } + } + } + } + } + } + } + pDensity->setDistanceMax( maxd); +} + diff --git a/src/Mesh.h b/src/Mesh.h new file mode 100644 index 0000000..e60cb77 --- /dev/null +++ b/src/Mesh.h @@ -0,0 +1,206 @@ +#ifndef _Mesh_h_ +#define _Mesh_h_ + +#include + +#include +#include "OpenGL.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "Color.h" +#include "Entity.h" +#include "Density.h" + + +/** Classe representant un objet sous la forme d'un maillage. + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + +class Mesh : public Entity +{ +public: + +/** @name Mesh + * @brief Constructeur : Charge un objet 3ds,off ou obj a partir du fichier filename + * @param filename nom du fichier a charger + */ + Mesh(const QString& filename, const QString& name = "", bool checkVBO=true, int mode=0); + + virtual ~Mesh(); + +/** @name load3DS + * @brief Charge un objet de type .3ds + * @param filename : chemin d'accès de l'objet +*/ + void load3DS(const QString& filename); + +/** @name loadOFF + * @brief Charge un objet de type .off + * @param filename : chemin d'accès de l'objet +*/ + void loadOFF(const QString& filename); + +/** @name loadGTS + * @brief Charge un objet de type .gts + * @param filename : chemin d'accès de l'objet +*/ + void loadGTS(const QString& filename); + +/** @name loadOBJ + * @brief Charge un objet de type .obj + * @param filename : chemin d'accès de l'objet +*/ + void loadOBJ(const QString& filename); + +/** @name loadPLY + * @brief Charge un objet de type .ply + * @param filename : chemin d'accès de l'objet +*/ + void loadPLY(const QString& filename); + + virtual void deleteVBO(void); + +/** @name afficheInfo + * @brief Active/Désactive l'affichage des informations à l'écran, ou place l'affichage + * @param mode : Selection + * @p 1 : place l'information en x=-0.51 + * @p 2 : place l'information en x=-1.05 + * @p 3 : place l'information en x=0.0 + * @p 4 : Désactive l'affichage + * @p autre : Active/Désactive l'affichage + */ + virtual void afficheInfoM(int mode); + +/** @name fillDensity + * @brief Permet de remplir la Densité en fonction des normales de l'objet. + * @param coverage : indice de couverture + * @param pDensity : matrice de densité + */ + virtual void fillDensity(int coverage, Density *pDensity); +protected: + + /** Methode chargee du trace de la geometrie de l'objet. + Le trace doit utiliser les vertex array + */ + virtual void drawGeometry(void); + virtual std::vector getVertexArray(); + +/** @name getCenterM + * @brief retourne dans un vector, le centre de gravité de l'objet + * @return un Vector3 contenant la position X,Y,Z du centre de gravité + */ + + virtual Vector3 getCenterM(void); + long filelength(int f); + + +protected: +/** @name: computeNormals + * @brief Calcul les normales + * @param filename: chemin d'accès de l'objet +*/ + void computeNormals(void); + void normalize(void); + void prepareForShadowVolume(void); + + /** Represente un sommet du maillage + */ + struct Vertex + { + Vertex(void) : position(Vector3::ZERO), normal(Vector3::ZERO) {}; + Vertex(const Vector3& pos) + : position(pos), normal(Vector3::ZERO) + { + positionData[0]=pos.x; + positionData[1]=pos.y; + positionData[2]=pos.z; + texcoord[0] = 0.; + texcoord[1] = 0.; + } + Vertex(const Vector3& pos, const Vector3& nor) + { + position=pos; + normal=nor; + } + Vector3 position; + Vector3 normal; + float positionData[3]; + float texcoord[2]; + }; + + + /** Represente un triangle via une liste de 3 indices. + */ + struct FaceIndex + { + FaceIndex() {}; + FaceIndex(int i0, int i1, int i2) + { + indexes[0] = i0; + indexes[1] = i1; + indexes[2] = i2; + }; + FaceIndex(const int* pIds) + { + indexes[0] = pIds[0]; + indexes[1] = pIds[1]; + indexes[2] = pIds[2]; + }; + unsigned int indexes[3]; + inline unsigned int& operator[] (int k) + { + assert(k<3); + return indexes[k]; + } + inline unsigned int operator[] (int k) const + { + assert(k<3); + return indexes[k]; + } + }; + /** Represente une liste de sommets + */ + typedef std::vector VertexArray; + + /** Represente une liste de triangles + */ + typedef std::vector FaceIndexArray; + + /** pour l'instant tous les sous-objets sont stockes sous la forme d'un seul gros objet + */ + VertexArray mVertices; + FaceIndexArray mFaces; + + bool hasNormals; + bool hasTextCoord; + bool useVBO; + + //VBO handlers + GLuint m_indexBuffer; + GLuint m_vertexBuffer; + GLuint m_normalBuffer; + GLuint m_texCoordBuffer; + +private: + QString fName; + double time; + void drawText(); + void createVBO(void); + bool Binfo; + Vector3 position; +}; +#endif diff --git a/src/ObjectView.cpp b/src/ObjectView.cpp new file mode 100644 index 0000000..197103f --- /dev/null +++ b/src/ObjectView.cpp @@ -0,0 +1,118 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + ***************************************************************************/ +#include "ObjectView.h" + +/* Ajout du BE */ +#include "Viewer.h" +#include "Scene.h" +#include "Light.h" +#include "Entity.h" +#include "Material.h" +#include "TextureLayer.h" +#include "Mesh.h" + +#include + +ObjectView::ObjectView() + : Q3MainWindow( 0, "Billboard Clouds - For Extreme Model Simplification", Qt::WDestructiveClose ) +{ + Q3PopupMenu * file = new Q3PopupMenu( this ); + menuBar()->insertItem( tr("&Fichier"), file ); + + file->insertItem( tr("&Quit"), qApp, SLOT( closeAllWindows() ), Qt::CTRL+Qt::Key_Q ); + + menuBar()->insertSeparator(); + + QGLFormat format; + format.setDoubleBuffer(true); + format.setDepth(true); + format.setRgba(true); + format.setAlpha(true); + format.setStencil(true); + format.setStereo(false); + QGLFormat::setDefaultFormat(format); + // glutInit(0, 0); + + mViewer = new Viewer( this, "glviewer" ); + mViewer->setFocus(); + setCentralWidget( mViewer ); + statusBar()->message(tr("Ready"), 2000); + + + connect(mViewer, SIGNAL(glInitialized()), this, SLOT(createScene())); + + mScene = new Scene(); + mViewer->attachScene(mScene); + +} + + +ObjectView::~ObjectView() +{ +} + +void ObjectView::createScene(void) +{ + Light *pLight; + pLight = new Light(Light::LT_POINT); + pLight->setPosition(Vector3(0., 0.,20.)); + pLight->setColor(Color(1.,1.,1.)); + mScene->add(pLight, false); +} + + +void ObjectView::load( const QString &fileName ) +{ + Entity *pEntity; + Transform t; + Material *pMat; + + QFile f( fileName ); + if ( !f.open( QIODevice::ReadOnly ) ) + return; + + pEntity = new Mesh(fileName, "obj"); + t.setIdentity(); + t.setPosition(0., 0., 0.); + //t.setOrientation(-90.,1.,0.,0.); + pEntity->setTransform(t); + pMat = new Material(); + pMat->setBaseColor(Color(0.8,0.6,0.5), 0.4); + pMat->setSpecular(Color::WHITE, 1); + pEntity->setMaterial(pMat); + mScene->remove(); + mScene->add(pEntity); + statusBar()->message( tr("Chargement de l'objet %1").arg(fileName), 2000 ); + mViewer->maj(); +} + +void ObjectView::load( const QString &fileName, const QString &textureName) +{ + Entity *pEntity; + Transform t; + Material *pMat; + TextureLayer* pLayer; + + QFile f( fileName ); + if ( !f.open( QIODevice::ReadOnly ) ) + return; + + pEntity = new Mesh(fileName, "obj"); + t.setIdentity(); + t.setPosition(0., 0., 0.); + //t.setOrientation(-90.,1.,0.,0.); + pEntity->setTransform(t); + pMat = new Material(); + pMat->setBaseColor(Color(0.8,0.6,0.5), 0.4); + pMat->setSpecular(Color::WHITE, 1); + + pLayer = new TextureLayer(textureName); + pMat->pushTextureLayer(pLayer); + + pEntity->setMaterial(pMat); + mScene->remove(); + mScene->add(pEntity); + statusBar()->message( tr("Chargement de l'objet %1").arg(fileName), 2000 ); + mViewer->maj(); +} diff --git a/src/OffScreenRendering.cpp b/src/OffScreenRendering.cpp new file mode 100644 index 0000000..84ac3e2 --- /dev/null +++ b/src/OffScreenRendering.cpp @@ -0,0 +1,411 @@ + +#define GLX_GLXEXT_PROTOTYPES +#include +#include +#include + +#include "OffScreenRendering.h" +#ifndef IRIX +#include +#include +using namespace std; +#else +#include +#include +#endif +// private Offscreen rendering data and methods + +const char* OffScreenRendering::_errorMessages[] = { + "OffScreenRendering : no error", + "OffScreenRendering : unsupported needed GL extensions", + "OffScreenRendering : couldn't get a valid X display", + "OffScreenRendering : missing GLX Pbuffer extension", + "OffScreenRendering : invalid parameters for pbuffer creation", + "OffScreenRendering : invalid off screen context", + "OffScreenRendering : Internal openGL Error, use glGetError() for more info", + "OffScreenRendering : glXMakeCurrent failed for offscreen rendering", + "OffScreenRendering : glXMakeCurrent failed for old context", + "OffScreenRendering : can't get XVisualInfo from FBconfig", + "OffScreenRendering : couldn't create GLXContext", + "OffScreenRendering : Unable to find an active context for sharing.", + "OffScreenRendering : realy, not yet implemented ~8-) !!! ", + None +}; + +int OffScreenRendering::OffScreenRenderingQueryForPbuffers(Display *dpy, int screen) +{ +#if defined(GLX_SGIX_fbconfig) && defined(GLX_SGIX_pbuffer) + char *extensions; + + extensions = (char *) glXQueryServerString(dpy, screen, GLX_EXTENSIONS); + if (!strstr(extensions,"GLX_SGIX_fbconfig")) { + return 0; + } + if (!strstr(extensions,"GLX_SGIX_pbuffer")) { + return 0; + } + return 1; +#else +#error GLX_SGIX_fbconfig and GLX_SGIX_pbuffer not defined at compile time + return 0; +#endif +} + + +static int OffScreenRenderingXErrorFlag = 0; +static int OffScreenRenderingHandleXError( Display *dpy, XErrorEvent *event ) +{ + dpy=NULL; + event=NULL; + OffScreenRenderingXErrorFlag = 1; + return 0; +} + +#ifndef IRIX +GLXPbuffer OffScreenRendering::OffScreenRenderingCreatePbuffer( Display *dpy, GLXFBConfigSGIX fbConfig, int width, int height, int *pbAttribs ) +#else +GLXPbufferSGIX OffScreenRendering::OffScreenRenderingCreatePbuffer( Display *dpy, GLXFBConfigSGIX fbConfig, int width, int height, int *pbAttribs ) +#endif +{ + int (*oldHandler)( Display *, XErrorEvent * ); +#ifndef IRIX + GLXPbuffer pBuffer = None; +#else + GLXPbufferSGIX pBuffer = None; +#endif + + /* Catch X protocol errors with our own error handler */ + oldHandler = XSetErrorHandler( OffScreenRenderingHandleXError ); + + OffScreenRenderingXErrorFlag = 0; + + pBuffer = glXCreateGLXPbufferSGIX(dpy, fbConfig, width, height, pbAttribs); + + + /* Restore original X error handler */ + (void) XSetErrorHandler( oldHandler ); + + /* Return pbuffer (may be None) */ + if (!OffScreenRenderingXErrorFlag && pBuffer!=None) { + unsigned int w,h; +#ifndef IRIX + glXQueryGLXPbufferSGIX(dpy, pBuffer, GLX_WIDTH, &w); + glXQueryGLXPbufferSGIX(dpy, pBuffer, GLX_HEIGHT, &h); +#else + glXQueryGLXPbufferSGIX(dpy, pBuffer, GLX_WIDTH_SGIX, &w); + glXQueryGLXPbufferSGIX(dpy, pBuffer, GLX_HEIGHT_SGIX, &h); +#endif + return pBuffer; + } else { + return None; + } +} + + +#ifndef IRIX +GLXPbuffer OffScreenRendering::MakePbuffer( Display *dpy, int screen, int width, int height ) +#else +GLXPbufferSGIX OffScreenRendering::MakePbuffer( Display *dpy, int screen, int width, int height ) +#endif +{ + + int fbAttribs[100] = { + /* Single buffered, with depth buffer */ + GLX_RENDER_TYPE_SGIX, GLX_RGBA_BIT_SGIX, + GLX_DRAWABLE_TYPE_SGIX, GLX_PIXMAP_BIT_SGIX, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_DEPTH_SIZE, 1, + GLX_ALPHA_SIZE, 1, + GLX_DOUBLEBUFFER, 0, + GLX_STENCIL_SIZE, 1, + None + }; + int pbAttribs[9] = { + GLX_LARGEST_PBUFFER_SGIX, True, + GLX_PRESERVED_CONTENTS_SGIX, False, +/* GLX_PBUFFER_WIDTH,0, + GLX_PBUFFER_HEIGHT,0,*/ + None + }; + /* Create the pbuffer using first fbConfig in the list that works. */ +// pbAttribs[5]=width+1; +// pbAttribs[7]=height; + + + GLXFBConfigSGIX *fbConfigs; +#ifndef IRIX + GLXPbuffer pBuffer = None; +#else + GLXPbufferSGIX pBuffer = None; +#endif + int nConfigs; + int i; + int redSize, greenSize, blueSize, alphaSize; + int depthSize, stencilSize; + + /* Get list of possible frame buffer configurations */ +#ifndef IRIX + fbConfigs = glXChooseFBConfig(dpy, screen, fbAttribs, &nConfigs); +#else + fbConfigs = glXChooseFBConfigSGIX(dpy, screen, fbAttribs, &nConfigs); +#endif + if (nConfigs==0 || !fbConfigs) { + return None; + } + +#ifdef IRIX +cerr << nConfigs << " compatible trouvees\n"; +#endif + for (i=0;i=8)&&(greenSize>=8)&&(blueSize>=8)&&(alphaSize>=8)&&(depthSize>=24)&&(stencilSize>=8)) { + pBuffer = OffScreenRendering::OffScreenRenderingCreatePbuffer(dpy, fbConfigs[i], width, height, pbAttribs); + if (pBuffer) { + _currentFBconfig = fbConfigs[i]; + break; + } + } + +#else + if ((redSize>=8)&&(greenSize>=8)&&(blueSize>=8)&&(alphaSize>=8)&&(depthSize>=24)&&(stencilSize>=8)) { + pBuffer = OffScreenRendering::OffScreenRenderingCreatePbuffer(dpy, fbConfigs[i], width, height, pbAttribs); + if (pBuffer) { + _currentFBconfig = fbConfigs[i]; + break; + } + } +#endif + } + + XFree(fbConfigs); + + return pBuffer; +} + + + +// Begin of OffScreenRendering callable method +OffScreenRendering::OffScreenRendering(int width,int height, bool share) : \ + _currentDisplay(0), _previousContext(0), _previousDrawable(0), _currentContext(0), \ + _currentPbuffer(0), _currentFBconfig(0), _validOffScreenRenderingObject(false), \ + _lastError(NO_ERROR), _inBlock(false),_width(width), _height(height) + +{ + if ((width < 1) || (height < 1)) { + _lastError=INVALID_PARAMETERS; + } else { + _currentDisplay=glXGetCurrentDisplay(); + if (_currentDisplay==NULL) { + _currentDisplay=XOpenDisplay(NULL); + } + if (!_currentDisplay) { + _lastError=MISSING_X_DISPLAY; + _validOffScreenRenderingObject=false; + } else { + if ( OffScreenRendering::OffScreenRenderingQueryForPbuffers(_currentDisplay,DefaultScreen(_currentDisplay)) ) { + _validOffScreenRenderingObject=true; + } else { + _lastError=PBUFFERS_UNAVAILABLE; + _validOffScreenRenderingObject=false; + } + } + if (_validOffScreenRenderingObject) + { + _currentPbuffer = MakePbuffer( _currentDisplay, DefaultScreen(_currentDisplay), _width, _height ); + if (_currentPbuffer!=None) + { +#ifndef IRIX + XVisualInfo *visInfo = glXGetVisualFromFBConfig(_currentDisplay, _currentFBconfig); +#else + XVisualInfo *visInfo = glXGetVisualFromFBConfigSGIX(_currentDisplay, _currentFBconfig); +#endif + if (!visInfo) { + _lastError=VISUAL_INFO_ERROR; + _validOffScreenRenderingObject=false; + } else { + if (share) { + GLXContext activeContext=glXGetCurrentContext (); + if (activeContext) { + _currentContext = glXCreateContext(_currentDisplay, visInfo, activeContext, True); + } else { + _lastError=NO_CUR_CTX_AVAILABLE; + _currentContext = glXCreateContext(_currentDisplay, visInfo, NULL, True); + } + } else { + _currentContext = glXCreateContext(_currentDisplay, visInfo, NULL, True); + } + if (!_currentContext) { + _lastError=CONTEXT_CREATION_ERROR; + _validOffScreenRenderingObject=false; + }else { + _validOffScreenRenderingObject=true; + } + XFree(visInfo); + } + } else { + _lastError=PBUFFERS_UNAVAILABLE; + _validOffScreenRenderingObject=false; + } + } + } +} + +OffScreenRendering::~OffScreenRendering() +{ + if (_validOffScreenRenderingObject) +#ifndef IRIX + glXDestroyPbuffer(_currentDisplay,_currentPbuffer); +#else + glXDestroyGLXPbufferSGIX(_currentDisplay,_currentPbuffer); +#endif +} + +OffScreenRendering::OffScreenRenderingError OffScreenRendering::begin() +{ + if (!_inBlock) { + if (_validOffScreenRenderingObject) { + _previousDrawable = glXGetCurrentDrawable(); + _previousContext = glXGetCurrentContext (); + if (!glXMakeCurrent (_currentDisplay, _currentPbuffer, _currentContext)) { + _lastError=ACTIVATE_FAIL; + } else { + _lastError=NO_ERROR; + _inBlock=true; + } + } else { + _lastError=INVALID_CONTEXT; + } + } else { + _lastError=BLOCK_ERROR; + } + return _lastError; +} + + +OffScreenRendering::OffScreenRenderingError OffScreenRendering::end() +{ + if (_inBlock) { + if (_validOffScreenRenderingObject) { + if (!glXMakeCurrent (_currentDisplay, _previousDrawable, _previousContext)) { + _lastError=DESACTIVATE_FAIL; + } else { + _lastError=NO_ERROR; + _inBlock=false; + } + } else { + _lastError=INVALID_CONTEXT; + } + } else { + _lastError=BLOCK_ERROR; + } + return _lastError; +} + +OffScreenRendering::OffScreenRenderingError OffScreenRendering::getError() const +{ + return _lastError; +} + + +const char *OffScreenRendering::getErrorMsg() const +{ + return _errorMessages[_lastError]; +} + +OffScreenRendering::OffScreenRenderingError OffScreenRendering::copyToTexture(unsigned int *gltextureObject, GLenum texture, GLenum target) +{ + if(!_validOffScreenRenderingObject) + { + _lastError=INVALID_CONTEXT; + return _lastError; + } + + if (!_inBlock) + { + begin(); + if (_lastError!=NO_ERROR) + return _lastError; + if (glIsTexture(*gltextureObject)) { + glBindTexture(texture, *gltextureObject); + } else { + unsigned char *theTexture = new unsigned char [_width*_height*3]; + glGenTextures( 1, gltextureObject ); + glBindTexture(texture, *gltextureObject); + glTexImage2D(target, 0, GL_RGB, _width, _height, 0, GL_RGB, GL_UNSIGNED_BYTE, theTexture); + delete []theTexture; + } + + glCopyTexSubImage2D( target, 0, 0, 0, 0, 0, _width, _height ); + _lastError=NO_ERROR; + + end(); + } + else + { + if (glIsTexture(*gltextureObject)) { + glBindTexture(texture, *gltextureObject); + } else { + unsigned char *theTexture = new unsigned char [_width*_height*3]; + glGenTextures( 1, gltextureObject ); + glBindTexture(texture, *gltextureObject); + glTexImage2D(target, 0, GL_RGB, _width, _height, 0, GL_RGB, GL_UNSIGNED_BYTE, theTexture); + delete []theTexture; + } + + glCopyTexSubImage2D( target, 0, 0, 0, 0, 0, _width, _height ); + _lastError=NO_ERROR; + } + return _lastError; +} + +OffScreenRendering::OffScreenRenderingError OffScreenRendering::copyToMemory(int x, int y, int width, int height, GLenum format, GLenum type, void *bufferOut) +{ + if (!_inBlock) { + if (_validOffScreenRenderingObject) { + begin(); + if (_lastError!=NO_ERROR) + return _lastError; + glPixelStorei(GL_PACK_ALIGNMENT, 1); + glReadPixels(x, y, width, height, format, type, bufferOut); + _lastError = (glGetError() == GL_NO_ERROR) ? NO_ERROR : INTERNAL_OPENGL_ERROR; + if (_lastError!=NO_ERROR) + return _lastError; + end(); + } else { + _lastError=INVALID_CONTEXT; + } + } else { + _lastError=INVALID_OPERATION; + } + return _lastError; +} + +int OffScreenRendering::getWidth(void) +{ + return _width; +} + +int OffScreenRendering::getHeight(void) +{ + return _height; +} diff --git a/src/OffScreenRendering.h b/src/OffScreenRendering.h new file mode 100644 index 0000000..eb767aa --- /dev/null +++ b/src/OffScreenRendering.h @@ -0,0 +1,269 @@ +#ifndef __OFF_SCREEN_RENDERING__ +#define __OFF_SCREEN_RENDERING__ +#include +#include + +/** Off screen rendering class. OffScreenRendering + + This class is designed to make off screen rendering method transparent to the user. + + See the provided offscreendemo.cpp source file to have informations about using it. + @version 0.1 + @author Mathias Paulin - IRIT-UPS-CNRS + @date January 2002 + @todo Things that remains to verify or develop. + @todo Verify robustness of the class. + @todo Port to windows. + @todo Test under IRIX. + + \nosubgrouping + +*/ + +/* + 17/10/2003 - Gael - new methods : getWidth() and getHeight() + 09/11/2005 - Gael - It is now allowed to use the copyToTexture method inside a block begin/end +*/ + +class OffScreenRendering { + // static private method and attributes + private : + static const char* _errorMessages[]; + static int OffScreenRenderingQueryForPbuffers(Display *dpy, int screen); +#ifndef IRIX + static GLXPbuffer OffScreenRenderingCreatePbuffer( Display *dpy, GLXFBConfigSGIX fbConfig, int width, int height, int *pbAttribs ); +#else + static GLXPbufferSGIX OffScreenRenderingCreatePbuffer( Display *dpy, GLXFBConfigSGIX fbConfig, int width, int height, int *pbAttribs ); +#endif + // public inner enumeration for error handling + public : + /** @name Error management. + \anchor ErrorGroup + Error management types and methods. + Error management works as follow : + - methods never stops the calling programm, even in case of error + - methods set the last error code on the state machine + - the caller must ensure that no error occurs after a call to a method + */ + /*@{*/ + /** This enum indicates the error number of the last off screen rendering command. + The values could be returned bye the function \ref getError () . + To obtain a human readable description of this error, call \ref getErrorMsg () . + */ + enum OffScreenRenderingError { + NO_ERROR = 0, /*!< OffScreenRendering : no error. */ + MISSING_GL_EXTENSIONS, /*!< OffScreenRendering : unsupported needed GL extensions. */ + MISSING_X_DISPLAY, /*!< OffScreenRendering : couldn't get a valid X display. */ + PBUFFERS_UNAVAILABLE, /*!< OffScreenRendering : missing GLX Pbuffer extension. */ + INVALID_PARAMETERS, /*!< OffScreenRendering : invalid parameters for pbuffer creation. */ + INVALID_CONTEXT, /*!< OffScreenRendering : invalid off screen context. */ + INTERNAL_OPENGL_ERROR, /*!< OffScreenRendering : Internal openGL Error, use glGetError() for more info. */ + ACTIVATE_FAIL, /*!< OffScreenRendering : glXMakeCurrent failed for offscreen rendering. */ + DESACTIVATE_FAIL, /*!< OffScreenRendering : glXMakeCurrent failed for old context. */ + VISUAL_INFO_ERROR, /*!< OffScreenRendering : can't get XVisualInfo from FBconfig. */ + CONTEXT_CREATION_ERROR, /*!< OffScreenRendering : couldn't create GLXContext */ + NO_CUR_CTX_AVAILABLE, /*!< OffScreenRendering : Unable to find an active context for sharing. */ + INVALID_OPERATION, /*!< OffScreenRendering : Calling of a non authorized method beetween begin() and end(). */ + BLOCK_ERROR, /*!< OffScreenRendering : Wrong begin() - end() structure. */ + NOT_YET_IMPLEMENTED, /*!< OffScreenRendering : really, not yet implemented ~8-) !!! */ + }; + + /** Gets the last error code. + \anchor getError + @return error code. Use \ref getErrorMsg () to have more informations + \sa \ref ErrorGroup "Error management" + */ + OffScreenRenderingError getError() const; + + /** Gets the last error message. + \anchor getErrorMsg + @return error message build from the last \ref ErrorGroup "Error management". + */ + const char *getErrorMsg() const; + + /*@}*/ + + // private data and member methods + private : + // For X connection + Display *_currentDisplay; + + /** @name Context switching management attributes. + These attributes are used for management of rendering context switching. + Each attribute is set when calling \ref begin () and used whe calling \ref end () to restore the previous + rendering context. + */ + /*@{*/ + + /** the active rendering context before activation of the off screen rendering context. + */ + GLXContext _previousContext; + + /** the active drawable context before activation of the off screen rendering context. + */ + GLXDrawable _previousDrawable; + + /*@}*/ + + /** @name Off screen Context related attributes. + These attributes are used for management of rendering context switching. + Each attribute is initialized in the constructor and used when calling \ref begin () set the off screen + rendering context. + */ + /*@{*/ + /** The "real" off screen rendering context. + */ + GLXContext _currentContext; + /** The drawable for offscreen rendering (a p-buffer). + */ +#ifndef IRIX + GLXPbuffer _currentPbuffer; +#else + GLXPbufferSGIX _currentPbuffer; +#endif + /** The frame buffer config for the offscreen rendering context. + */ + GLXFBConfigSGIX _currentFBconfig; + + /*@}*/ + + /** @name Internal state variable attributes. + These attributes are used for error management and internal state checking. + */ + /*@{*/ + + /** Indicates if the off screen context is usable. + */ + bool _validOffScreenRenderingObject; + + /** The last occured internal error. + \sa \ref ErrorGroup "Error management" + */ + OffScreenRenderingError _lastError; + + /** begin() - end() strucutre state. + */ + bool _inBlock; + + /** Width of the PBuffer. + */ + int _width; + + /** Height of the PBuffer. + */ + int _height; + + /*@}*/ + + // Initialisation of the PBuffer +#ifndef IRIX + GLXPbuffer MakePbuffer( Display *dpy, int screen, int width, int height ); +#else + GLXPbufferSGIX MakePbuffer( Display *dpy, int screen, int width, int height ); +#endif + + // public member methods + public : + /** @name Constructor and destructor. + */ + /*@{*/ + /** OffScreenRendering : create an offscreen rendering context through the allocation of a pbuffer. + Use \ref getErrorMsg () to have informations about the created (or not) rendering context. + + The created OffScreenRendering context has the following properties : + Single buffered. + Size given by width and height parameters. + RGBA has 8888 bits. + Stencil has 8 bits. + Depth has 24 bits. + + @param width width of the offscreen rendering context + @param height height of the offscreen rendering context + @param share indicate if we must share display_lists and textures with the current rendering context + + @todo Make off screen context parameters modifiable (Color depth, Number of buffer ...). + @bug There is no verification of the upper limit in the size required by the user. + May kill the X-Server if the size is too high. + */ + OffScreenRendering(int width=256,int height=256, bool share=false); + + /** Destroy the OffScreenRendering context. + */ + ~OffScreenRendering(); + /*@}*/ + + /** @name Context switching methods. + */ + /*@{*/ + + /** Activate the OffScreenRendering context. + \anchor begin + When an OffScreenRendering context is activated, all the subsequents calls to OpenGL functions + implie that the target rendering context is this OffScreenRendering context. + + @return error code. Use \ref getErrorMsg () to have more informations. + */ + OffScreenRenderingError begin(); + + /** Desactivate the OffScreenRendering context. + \anchor end + When an OffScreenRendering context is desactivated, the old rendering context, obtained when begin was + called is restore. + + @return error code. Use \ref getErrorMsg () to have more informations. + */ + OffScreenRenderingError end(); + /*@}*/ + + /** @name Data extraction methods. + */ + /*@{*/ + /** Copy the content of the colorBuffer from the OffScreenRendering context to the gltextureObject. + + When this function is called, it first verify if the gltextureObject is a valid one. + If true, the assumption that texture size matches pbuffer size is made. If assumption fails, + may kill the X Server. + If gltextureObject is valid, moves the color buffer content to this texture object as + level-of-detail number 0. + If gltextureObject is valid, eventually deletes this texture object and allocate a new + one with the content of the pbuffer as pixel. + + Note that this method does not alter the current rendering context neither the content of the + OffScreenRendering buffers. + + @param gltextureObject : the texture object to use or create; + @return error code. Use \ref getErrorMsg () to have more informations. + */ + OffScreenRenderingError copyToTexture(unsigned int *gltextureObject, GLenum texture=GL_TEXTURE_2D,GLenum target=GL_TEXTURE_2D); + + /** Copy the content of the specified buffer to provided buffer. + + @param x, y Specify the window coordinates of the first pixel that + is read from the frame buffer. This location is the + lower left corner of a rectangular block of pixels. + @param width, height + Specify the dimensions of the pixel rectangle. width + and height of one correspond to a single pixel. + @param format + Specifies the format of the pixel data. The following + symbolic values are accepted: GL_COLOR_INDEX, + GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, + GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, and + GL_LUMINANCE_ALPHA. + @param type Specifies the data type of the pixel data. Must be one + of GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, + GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, + or GL_FLOAT. + @param bufferOut + Returns the pixel data. + @return error code. Use \ref getErrorMsg () to have more informations. + */ + OffScreenRenderingError copyToMemory(int x, int y, int width, int height, GLenum format, GLenum type, void *bufferOut); + + int getWidth(void); + int getHeight(void); + /*@}*/ + + +}; +#endif diff --git a/src/OpenGL.h b/src/OpenGL.h new file mode 100644 index 0000000..dd096ca --- /dev/null +++ b/src/OpenGL.h @@ -0,0 +1,58 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + + +#ifndef _OpenGL_h_ +#define _OpenGL_h_ + +#include +// disable auto-include of the glext.h file +#define GL_GLEXT_LEGACY 1 + +//#include + +// get the definition of all extension functions +#define GL_GLEXT_PROTOTYPES 1 + +#ifndef GLAPI +// the glext.h nvidia file contains some bugs, so : +#define GLAPI APIENTRY +#endif + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +#ifdef GL_GLEXT_PROTOTYPES +extern void glBlendEquationSeparateEXT (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (* PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#endif + + +#include + +#include + + +#define _SUPPORT_GLSLANG_ +#define _SUPPORT_STENCIL_TWO_SIDE_ + + +#ifdef DEBUG + #define GL_TEST_ERR\ + {\ + GLenum eCode;\ + if((eCode=glGetError())!=GL_NO_ERROR)\ + std::cerr << "OpenGL error : " << gluErrorString(eCode) << " in " << __FILE__ << " : " << __LINE__ << std::endl;\ + } +#else + #define GL_TEST_ERR +#endif + + +#endif + + diff --git a/src/Plane.cpp b/src/Plane.cpp new file mode 100644 index 0000000..cc00136 --- /dev/null +++ b/src/Plane.cpp @@ -0,0 +1,101 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "Plane.h" +#include "Material.h" + +//#include "OpenGL.h" + +Plane::Plane(int gridSizeX, int gridSizeY,const QString& name) + : Entity(name) +{ + initialiaze(gridSizeX,gridSizeY); +} +Plane::Plane(const QString& name) + : Entity(name) +{ + initialiaze(1,1); +} +void Plane::initialiaze(int gridSizeX, int gridSizeY) +{ + mSizeX = gridSizeX; + mSizeY = gridSizeY; + gridSizeX++; + gridSizeY++; + mVertices = new Vector3[gridSizeX*gridSizeY]; + mIndexes = new GLuint[(gridSizeX-1)*(gridSizeY-1)*4]; // 1 face = 1 quad = 4 sommets par face ! + + // compute vertex + for(int j=0 ; jgetNumberOfLayers() ; ++i) + { + glClientActiveTexture(GL_TEXTURE0+i); + glTexCoordPointer(2, GL_FLOAT, sizeof(Vector3), mVertices); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + } + + // set the normales for all vertex + glNormal3f(0., 0., 1.); + glDrawElements(GL_QUADS, mSizeX*mSizeY*4, GL_UNSIGNED_INT, mIndexes); + glDisableClientState(GL_VERTEX_ARRAY); + + for(int i=0 ; igetNumberOfLayers() ; ++i) + { + glClientActiveTexture(GL_TEXTURE0+i); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + } + glClientActiveTexture(GL_TEXTURE0); + /*******************************************************************/ + /* Fin code à faire/completer par l'étudiant */ + /* Texture */ + /*******************************************************************/ +} +//-------------------------------------------------------------------------------- +void Plane::getEquation(double eq[4]) const +{ + Vector3 n(0., 0. , 1.); + n = mTransform.getOrientation() * n; + n.normalise(); + eq[0]=n.x; eq[1]=n.y; eq[2]=n.z; + eq[3] = -n.dotProduct(mTransform.getPosition()); +} + diff --git a/src/Plane.h b/src/Plane.h new file mode 100644 index 0000000..73eaa0a --- /dev/null +++ b/src/Plane.h @@ -0,0 +1,45 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _Plane_h_ +#define _Plane_h_ + +#include "Entity.h" + +/** Représente un plan unitaire dans le plan xy et centré en (0.5, 0.5, 0). + Le plan est en faite tracé sous la forme d'une grille. +*/ +class Plane : public Entity +{ +public: + /** Consructeur. + \param nbQuadX nombre de subdivision selon l'axe des X + \param nbQuadY nombre de subdivision selon l'axe des Y + */ + Plane(int nbQuadX, int nbQuadY, const QString& name = ""); + + Plane(const QString& name = ""); + + void getEquation(double eq[4]) const; + +protected: + + void initialiaze(int nbQuadX, int nbQuadY); + + /** Tracé de la grille (du plan). + Le tracé utilise les vertex array. + \note à  compléter par l'étudiant (texture) + */ + virtual void drawGeometry(void); + + Vector3 *mVertices; + unsigned int *mIndexes; + int mSizeX, mSizeY; + +}; + +#endif diff --git a/src/Quaternion.cpp b/src/Quaternion.cpp new file mode 100644 index 0000000..125e813 --- /dev/null +++ b/src/Quaternion.cpp @@ -0,0 +1,460 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE + (Object-oriented Graphics Rendering Engine) +For the latest info, see http://ogre.sourceforge.net/ + +Copyright © 2000-2002 The OGRE Team +Also see acknowledgements in Readme.html + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ +// NOTE THAT THIS FILE IS BASED ON MATERIAL FROM: + +// Magic Software, Inc. +// http://www.magic-software.com +// Copyright (c) 2000, All Rights Reserved +// +// Source code from Magic Software is supplied under the terms of a license +// agreement and may not be copied or disclosed except in accordance with the +// terms of that agreement. The various license agreements may be found at +// the Magic Software web site. This file is subject to the license +// +// FREE SOURCE CODE +// http://www.magic-software.com/License/free.pdf + +#include "Quaternion.h" + +#include +#include "Matrix3.h" +#include "Vector3.h" + + +const float Quaternion::ms_fEpsilon = 1e-03; +const Quaternion Quaternion::ZERO(0.0,0.0,0.0,0.0); +const Quaternion Quaternion::IDENTITY(1.0,0.0,0.0,0.0); + +//----------------------------------------------------------------------- +Quaternion::Quaternion (float fW, float fX, float fY, float fZ) +{ + w = fW; + x = fX; + y = fY; + z = fZ; +} +//----------------------------------------------------------------------- +Quaternion::Quaternion (const Quaternion& rkQ) +{ + w = rkQ.w; + x = rkQ.x; + y = rkQ.y; + z = rkQ.z; +} +//----------------------------------------------------------------------- +void Quaternion::FromRotationMatrix (const Matrix3& kRot) +{ + // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes + // article "Quaternion Calculus and Fast Animation". + + float fTrace = kRot[0][0]+kRot[1][1]+kRot[2][2]; + float fRoot; + + if ( fTrace > 0.0 ) + { + // |w| > 1/2, may as well choose w > 1/2 + fRoot = sqrt(fTrace + 1.0); // 2w + w = 0.5*fRoot; + fRoot = 0.5/fRoot; // 1/(4w) + x = (kRot[2][1]-kRot[1][2])*fRoot; + y = (kRot[0][2]-kRot[2][0])*fRoot; + z = (kRot[1][0]-kRot[0][1])*fRoot; + } + else + { + // |w| <= 1/2 + static int s_iNext[3] = { 1, 2, 0 }; + int i = 0; + if ( kRot[1][1] > kRot[0][0] ) + i = 1; + if ( kRot[2][2] > kRot[i][i] ) + i = 2; + int j = s_iNext[i]; + int k = s_iNext[j]; + + fRoot = sqrt(kRot[i][i]-kRot[j][j]-kRot[k][k] + 1.0); + float* apkQuat[3] = { &x, &y, &z }; + *apkQuat[i] = 0.5*fRoot; + fRoot = 0.5/fRoot; + w = (kRot[k][j]-kRot[j][k])*fRoot; + *apkQuat[j] = (kRot[j][i]+kRot[i][j])*fRoot; + *apkQuat[k] = (kRot[k][i]+kRot[i][k])*fRoot; + } +} +//----------------------------------------------------------------------- +void Quaternion::ToRotationMatrix (Matrix3& kRot) const +{ + float fTx = 2.0*x; + float fTy = 2.0*y; + float fTz = 2.0*z; + float fTwx = fTx*w; + float fTwy = fTy*w; + float fTwz = fTz*w; + float fTxx = fTx*x; + float fTxy = fTy*x; + float fTxz = fTz*x; + float fTyy = fTy*y; + float fTyz = fTz*y; + float fTzz = fTz*z; + + kRot[0][0] = 1.0-(fTyy+fTzz); + kRot[0][1] = fTxy-fTwz; + kRot[0][2] = fTxz+fTwy; + kRot[1][0] = fTxy+fTwz; + kRot[1][1] = 1.0-(fTxx+fTzz); + kRot[1][2] = fTyz-fTwx; + kRot[2][0] = fTxz-fTwy; + kRot[2][1] = fTyz+fTwx; + kRot[2][2] = 1.0-(fTxx+fTyy); +} +//----------------------------------------------------------------------- +void Quaternion::FromAngleAxis (const float& rfAngle, + const Vector3& rkAxis) +{ + // assert: axis[] is unit length + // + // The quaternion representing the rotation is + // q = cos(A/2)+sin(A/2)*(x*i+y*j+z*k) + + float fHalfAngle = 0.5*rfAngle; + float fSin = sin(fHalfAngle); + w = cos(fHalfAngle); + x = fSin*rkAxis.x; + y = fSin*rkAxis.y; + z = fSin*rkAxis.z; +} +//----------------------------------------------------------------------- +void Quaternion::ToAngleAxis (float& rfAngle, Vector3& rkAxis) const +{ + // The quaternion representing the rotation is + // q = cos(A/2)+sin(A/2)*(x*i+y*j+z*k) + + float fSqrLength = x*x+y*y+z*z; + if ( fSqrLength > 0.0 ) + { + rfAngle = 2.0*acos(w); + float fInvLength = 1.0/sqrt(fSqrLength); + rkAxis.x = x*fInvLength; + rkAxis.y = y*fInvLength; + rkAxis.z = z*fInvLength; + } + else + { + // angle is 0 (mod 2*pi), so any axis will do + rfAngle = 0.0; + rkAxis.x = 1.0; + rkAxis.y = 0.0; + rkAxis.z = 0.0; + } +} +//----------------------------------------------------------------------- +void Quaternion::FromAxes (const Vector3* akAxis) +{ + Matrix3 kRot; + + for (int iCol = 0; iCol < 3; iCol++) + { + kRot[0][iCol] = akAxis[iCol].x; + kRot[1][iCol] = akAxis[iCol].y; + kRot[2][iCol] = akAxis[iCol].z; + } + + FromRotationMatrix(kRot); +} +//----------------------------------------------------------------------- +void Quaternion::FromAxes (const Vector3& xAxis, const Vector3& yAxis, const Vector3& zAxis) +{ + Matrix3 kRot; + + kRot[0][0] = xAxis.x; + kRot[1][0] = xAxis.y; + kRot[2][0] = xAxis.z; + + kRot[0][1] = yAxis.x; + kRot[1][1] = yAxis.y; + kRot[2][1] = yAxis.z; + + kRot[0][2] = zAxis.x; + kRot[1][2] = zAxis.y; + kRot[2][2] = zAxis.z; + + FromRotationMatrix(kRot); + +} +//----------------------------------------------------------------------- +void Quaternion::ToAxes (Vector3* akAxis) const +{ + Matrix3 kRot; + + ToRotationMatrix(kRot); + + for (int iCol = 0; iCol < 3; iCol++) + { + akAxis[iCol].x = kRot[0][iCol]; + akAxis[iCol].y = kRot[1][iCol]; + akAxis[iCol].z = kRot[2][iCol]; + } +} +//----------------------------------------------------------------------- +void Quaternion::ToAxes (Vector3& xAxis, Vector3& yAxis, Vector3& zAxis) const +{ + Matrix3 kRot; + + ToRotationMatrix(kRot); + + xAxis.x = kRot[0][0]; + xAxis.y = kRot[1][0]; + xAxis.z = kRot[2][0]; + + yAxis.x = kRot[0][1]; + yAxis.y = kRot[1][1]; + yAxis.z = kRot[2][1]; + + zAxis.x = kRot[0][2]; + zAxis.y = kRot[1][2]; + zAxis.z = kRot[2][2]; +} + +//----------------------------------------------------------------------- +Quaternion& Quaternion::operator= (const Quaternion& rkQ) +{ + w = rkQ.w; + x = rkQ.x; + y = rkQ.y; + z = rkQ.z; + return *this; +} +//----------------------------------------------------------------------- +Quaternion Quaternion::operator+ (const Quaternion& rkQ) const +{ + return Quaternion(w+rkQ.w,x+rkQ.x,y+rkQ.y,z+rkQ.z); +} +//----------------------------------------------------------------------- +Quaternion Quaternion::operator- (const Quaternion& rkQ) const +{ + return Quaternion(w-rkQ.w,x-rkQ.x,y-rkQ.y,z-rkQ.z); +} +//----------------------------------------------------------------------- +Quaternion Quaternion::operator* (const Quaternion& rkQ) const +{ + // NOTE: Multiplication is not generally commutative, so in most + // cases p*q != q*p. + + return Quaternion + ( + w * rkQ.w - x * rkQ.x - y * rkQ.y - z * rkQ.z, + w * rkQ.x + x * rkQ.w + y * rkQ.z - z * rkQ.y, + w * rkQ.y + y * rkQ.w + z * rkQ.x - x * rkQ.z, + w * rkQ.z + z * rkQ.w + x * rkQ.y - y * rkQ.x + ); +} +//----------------------------------------------------------------------- +Quaternion Quaternion::operator* (float fScalar) const +{ + return Quaternion(fScalar*w,fScalar*x,fScalar*y,fScalar*z); +} +//----------------------------------------------------------------------- +Quaternion operator* (float fScalar, const Quaternion& rkQ) +{ + return Quaternion(fScalar*rkQ.w,fScalar*rkQ.x,fScalar*rkQ.y, + fScalar*rkQ.z); +} +//----------------------------------------------------------------------- +Quaternion Quaternion::operator- () const +{ + return Quaternion(-w,-x,-y,-z); +} +//----------------------------------------------------------------------- +float Quaternion::Dot (const Quaternion& rkQ) const +{ + return w*rkQ.w+x*rkQ.x+y*rkQ.y+z*rkQ.z; +} +//----------------------------------------------------------------------- +float Quaternion::Norm () const +{ + return w*w+x*x+y*y+z*z; +} +//----------------------------------------------------------------------- +Quaternion Quaternion::Inverse () const +{ + float fNorm = w*w+x*x+y*y+z*z; + if ( fNorm > 0.0 ) + { + float fInvNorm = 1.0/fNorm; + return Quaternion(w*fInvNorm,-x*fInvNorm,-y*fInvNorm,-z*fInvNorm); + } + else + { + // return an invalid result to flag the error + return ZERO; + } +} +//----------------------------------------------------------------------- +Quaternion Quaternion::UnitInverse () const +{ + // assert: 'this' is unit length + return Quaternion(w,-x,-y,-z); +} +//----------------------------------------------------------------------- +Quaternion Quaternion::Exp () const +{ + // If q = A*(x*i+y*j+z*k) where (x,y,z) is unit length, then + // exp(q) = cos(A)+sin(A)*(x*i+y*j+z*k). If sin(A) is near zero, + // use exp(q) = cos(A)+A*(x*i+y*j+z*k) since A/sin(A) has limit 1. + + float fAngle = sqrt(x*x+y*y+z*z); + float fSin = sin(fAngle); + + Quaternion kResult; + kResult.w = cos(fAngle); + + if ( fabs(fSin) >= ms_fEpsilon ) + { + float fCoeff = fSin/fAngle; + kResult.x = fCoeff*x; + kResult.y = fCoeff*y; + kResult.z = fCoeff*z; + } + else + { + kResult.x = x; + kResult.y = y; + kResult.z = z; + } + + return kResult; +} +//----------------------------------------------------------------------- +Quaternion Quaternion::Log () const +{ + // If q = cos(A)+sin(A)*(x*i+y*j+z*k) where (x,y,z) is unit length, then + // log(q) = A*(x*i+y*j+z*k). If sin(A) is near zero, use log(q) = + // sin(A)*(x*i+y*j+z*k) since sin(A)/A has limit 1. + + Quaternion kResult; + kResult.w = 0.0; + + if ( fabs(w) < 1.0 ) + { + float fAngle = acos(w); + float fSin = sin(fAngle); + if ( fabs(fSin) >= ms_fEpsilon ) + { + float fCoeff = fAngle/fSin; + kResult.x = fCoeff*x; + kResult.y = fCoeff*y; + kResult.z = fCoeff*z; + return kResult; + } + } + + kResult.x = x; + kResult.y = y; + kResult.z = z; + + return kResult; +} +//----------------------------------------------------------------------- +Vector3 Quaternion::operator* (const Vector3& v) const +{ + // nVidia SDK implementation + Vector3 uv, uuv; + Vector3 qvec(x, y, z); + uv = qvec.crossProduct(v); + uuv = qvec.crossProduct(uv); + uv *= (2.0f * w); + uuv *= 2.0f; + + return v + uv + uuv; + +} +//----------------------------------------------------------------------- +Quaternion Quaternion::Slerp (float fT, const Quaternion& rkP, + const Quaternion& rkQ) +{ + float fCos = rkP.Dot(rkQ); + float fAngle = acos(fCos); + + if ( fabs(fAngle) < ms_fEpsilon ) + return rkP; + + float fSin = sin(fAngle); + float fInvSin = 1.0/fSin; + float fCoeff0 = sin((1.0-fT)*fAngle)*fInvSin; + float fCoeff1 = sin(fT*fAngle)*fInvSin; + return fCoeff0*rkP + fCoeff1*rkQ; +} +//----------------------------------------------------------------------- +Quaternion Quaternion::SlerpExtraSpins (float fT, + const Quaternion& rkP, const Quaternion& rkQ, int iExtraSpins) +{ + float fCos = rkP.Dot(rkQ); + float fAngle = acos(fCos); + + if ( fabs(fAngle) < ms_fEpsilon ) + return rkP; + + float fSin = sin(fAngle); + float fPhase = M_PI*iExtraSpins*fT; + float fInvSin = 1.0/fSin; + float fCoeff0 = sin((1.0-fT)*fAngle - fPhase)*fInvSin; + float fCoeff1 = sin(fT*fAngle + fPhase)*fInvSin; + return fCoeff0*rkP + fCoeff1*rkQ; +} +//----------------------------------------------------------------------- +void Quaternion::Intermediate (const Quaternion& rkQ0, + const Quaternion& rkQ1, const Quaternion& rkQ2, + Quaternion& rkA, Quaternion& rkB) +{ + // assert: q0, q1, q2 are unit quaternions + + Quaternion kQ0inv = rkQ0.UnitInverse(); + Quaternion kQ1inv = rkQ1.UnitInverse(); + Quaternion rkP0 = kQ0inv*rkQ1; + Quaternion rkP1 = kQ1inv*rkQ2; + Quaternion kArg = 0.25*(rkP0.Log()-rkP1.Log()); + Quaternion kMinusArg = -kArg; + + rkA = rkQ1*kArg.Exp(); + rkB = rkQ1*kMinusArg.Exp(); +} +//----------------------------------------------------------------------- +Quaternion Quaternion::Squad (float fT, + const Quaternion& rkP, const Quaternion& rkA, + const Quaternion& rkB, const Quaternion& rkQ) +{ + float fSlerpT = 2.0*fT*(1.0-fT); + Quaternion kSlerpP = Slerp(fT,rkP,rkQ); + Quaternion kSlerpQ = Slerp(fT,rkA,rkB); + return Slerp(fSlerpT,kSlerpP,kSlerpQ); +} +//----------------------------------------------------------------------- +bool Quaternion::operator== (const Quaternion& rhs) const +{ + return (rhs.x == x) && (rhs.y == y) && + (rhs.z == z) && (rhs.w == w); +} + + diff --git a/src/Quaternion.h b/src/Quaternion.h new file mode 100644 index 0000000..b27be26 --- /dev/null +++ b/src/Quaternion.h @@ -0,0 +1,126 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE + (Object-oriented Graphics Rendering Engine) +For the latest info, see http://ogre.sourceforge.net/ + +Copyright © 2000-2002 The OGRE Team +Also see acknowledgements in Readme.html + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ +// NOTE THAT THIS FILE IS BASED ON MATERIAL FROM: + +// Magic Software, Inc. +// http://www.magic-software.com +// Copyright (c) 2000, All Rights Reserved +// +// Source code from Magic Software is supplied under the terms of a license +// agreement and may not be copied or disclosed except in accordance with the +// terms of that agreement. The various license agreements may be found at +// the Magic Software web site. This file is subject to the license +// +// FREE SOURCE CODE +// http://www.magic-software.com/License/free.pdf + +#ifndef __Quaternion_H__ +#define __Quaternion_H__ + +#include + +class Vector3; +class Matrix3; + +/** Implementation of a Quaternion, i.e. a rotation around an axis. +*/ +class Quaternion +{ +public: + Quaternion ( + float fW = 1.0, + float fX = 0.0, float fY = 0.0, float fZ = 0.0); + Quaternion (const Quaternion& rkQ); + + void FromRotationMatrix (const Matrix3& kRot); + void ToRotationMatrix (Matrix3& kRot) const; + void FromAngleAxis (const float& rfAngle, const Vector3& rkAxis); + void ToAngleAxis (float& rfAngle, Vector3& rkAxis) const; + void FromAxes (const Vector3* akAxis); + void FromAxes (const Vector3& xAxis, const Vector3& yAxis, const Vector3& zAxis); + void ToAxes (Vector3* akAxis) const; + void ToAxes (Vector3& xAxis, Vector3& yAxis, Vector3& zAxis) const; + + Quaternion& operator= (const Quaternion& rkQ); + Quaternion operator+ (const Quaternion& rkQ) const; + Quaternion operator- (const Quaternion& rkQ) const; + Quaternion operator* (const Quaternion& rkQ) const; + Quaternion operator* (float fScalar) const; + friend Quaternion operator* (float fScalar, + const Quaternion& rkQ); + Quaternion operator- () const; + bool operator== (const Quaternion& rhs) const; + + // functions of a quaternion + float Dot (const Quaternion& rkQ) const; // dot product + float Norm () const; // squared-length + Quaternion Inverse () const; // apply to non-zero quaternion + Quaternion UnitInverse () const; // apply to unit-length quaternion + Quaternion Exp () const; + Quaternion Log () const; + + // rotation of a vector by a quaternion + Vector3 operator* (const Vector3& rkVector) const; + + // spherical linear interpolation + static Quaternion Slerp (float fT, const Quaternion& rkP, + const Quaternion& rkQ); + + static Quaternion SlerpExtraSpins (float fT, + const Quaternion& rkP, const Quaternion& rkQ, + int iExtraSpins); + + // setup for spherical quadratic interpolation + static void Intermediate (const Quaternion& rkQ0, + const Quaternion& rkQ1, const Quaternion& rkQ2, + Quaternion& rka, Quaternion& rkB); + + // spherical quadratic interpolation + static Quaternion Squad (float fT, const Quaternion& rkP, + const Quaternion& rkA, const Quaternion& rkB, + const Quaternion& rkQ); + + // cutoff for sine near zero + static const float ms_fEpsilon; + + // special values + static const Quaternion ZERO; + static const Quaternion IDENTITY; + + float w, x, y, z; + + /** Function for writing to a stream. + */ + inline friend std::ostream& operator << + ( std::ostream& o, const Quaternion& q ) + { + o << "[" << q.x << ", " << q.y << ", " << q.z << ", " << q.w << "]"; + return o; + } + +}; + + +#endif diff --git a/src/Scene.cpp b/src/Scene.cpp new file mode 100644 index 0000000..f515658 --- /dev/null +++ b/src/Scene.cpp @@ -0,0 +1,233 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "Scene.h" +#include "ShadowMap.h" + + +Scene::Scene() + : mAmbient(0.4,0.4,0.4), mShadowMap(0), mShadowEnabled(false),textureEnable(false) +{ +} +//-------------------------------------------------------------------------------- +Scene::~Scene() +{ + for(EntityMap::iterator it=mAllEntities.begin() ; it!=mAllEntities.end() ; ++it) + { + delete it->second; + } +} +//-------------------------------------------------------------------------------- +bool Scene::isShadowEnabled(void) const +{ + return mShadowEnabled; +} +void Scene::setShadowEnabled(bool on) +{ + mShadowEnabled = on; + if(mShadowEnabled && ! mShadowMap) + { + mShadowMap = new ShadowMap; + } +} +//-------------------------------------------------------------------------------- +void Scene::setAmbient(const Color& c) +{ + mAmbient = c; +} +const Color& Scene::getAmbient(void) const +{ + return mAmbient; +} +//-------------------------------------------------------------------------------- +void Scene::add(Entity* pObj, bool castShadow /*=true*/) +{ + mAllEntities[pObj->getName()] = pObj; + mEntities.push_back(EntityElement(pObj,castShadow)); +} + +void Scene::remove(bool delMesh){ + if (mEntities.size()!=0) + { + if(delMesh) delete mEntities[0].pEntity; + while(mEntities.size()!=0) mEntities.pop_back(); + } +} +//-------------------------------------------------------------------------------- +void Scene::add(Light* pLight, bool castShadow /*=false*/) +{ + mAllEntities[pLight->getName()] = pLight; + mLights.push_back(LightElement(pLight,castShadow)); +} +//-------------------------------------------------------------------------------- +Entity* Scene::getByName(const QString& name) +{ + EntityMap::const_iterator entity_iter = mAllEntities.find(name); + if(entity_iter!=mAllEntities.end()) + { + return entity_iter->second; + } + + return 0; +} +//-------------------------------------------------------------------------------- +void Scene::activateLights(void) +{ + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, mAmbient); + + int lightNum = 0; + for(LightList::iterator it=mLights.begin() ; it!=mLights.end() ; ++it) + { + it->pLight->activate(lightNum++); + } +} +//-------------------------------------------------------------------------------- +void Scene::releaseLights(void) +{ + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Color::BLACK); + for(LightList::iterator it=mLights.begin() ; it!=mLights.end() ; ++it) + { + it->pLight->release(); + } +} +//-------------------------------------------------------------------------------- +void Scene::renderObjects(bool activateMaterial /*= true*/) +{ + for(EntityList::iterator it=mEntities.begin() ; it!=mEntities.end() ; ++it) + { + it->pEntity->render(activateMaterial); + } +} +//-------------------------------------------------------------------------------- +void Scene::renderOccluders(bool activateMaterial /*= false*/) +{ + for(EntityList::iterator it=mEntities.begin() ; it!=mEntities.end() ; ++it) + { + if(it->castShadow) + it->pEntity->render(activateMaterial); + } +} +//-------------------------------------------------------------------------------- +void Scene::render(void) +{ + if(mShadowEnabled) + { + // recherche de la premiere source devant generer des ombres portees + Light* pLight4Shadow = 0; + for(LightList::iterator it=mLights.begin() ; it!=mLights.end() ; ++it) + { + if(it->castShadow) + { + pLight4Shadow = it->pLight; + it = mLights.end(); + it--; + } + } + if(pLight4Shadow) + { + /*******************************************************************/ + /* Debut code a faire/completer par l'etudiant */ + /* shadow map */ + /*******************************************************************/ + + // a faire : mise a jour de la shadow map et rendu de la scene avec la shadow map + + // mise a jour de la shadow map + mShadowMap->setLight(pLight4Shadow); + mShadowMap->beginUpdate(); + renderOccluders(); + mShadowMap->endUpdate(); + + // rendu de la scene avec la shadow map + activateLights(); + mShadowMap->activate(); + renderObjects(); + mShadowMap->release(); + releaseLights(); + /*******************************************************************/ + /* Fin code a faire/completer par l'etudiant */ + /* shadow map */ + /*******************************************************************/ + } + else + { + activateLights(); + renderObjects(); + releaseLights(); + } + } + else + { + activateLights(); + renderObjects(); + releaseLights(); + } + + for(LightList::iterator it=mLights.begin() ; it!=mLights.end() ; ++it) + { + it->pLight->render(); + } + +} +//-------------------------------------------------------------------------------- + + +Vector3 Scene::getCenter(){ + Vector3 center; + if(mAllEntities.size() ==1) + { + center.x = 0.; + center.y = 0.; + center.z = 0.; + } + else + { + center = (mEntities[0].pEntity)->getCenter(); + } + return center; +} + +void Scene::rotateObjet(float dx, float dy, std::vector camParam){ + if(mAllEntities.size() !=3) + { + (mEntities[0].pEntity)->Rotation(dx,dy,camParam); + } +} + +Entity* Scene::getEntity(){ + +return mEntities[0].pEntity; +} + +void Scene::afficheInfo(int split) +{ + for(EntityList::iterator it=mEntities.begin() ; it!=mEntities.end() ; ++it) + { + it->pEntity->afficheInfo(split); + } +} + +void Scene::fDensity(int coverage, Density *pDensity) +{ + for(EntityList::iterator it=mEntities.begin() ; it!=mEntities.end() ; ++it) + { + it->pEntity->fDensity(coverage,pDensity); + } +} + +bool Scene::isTextureEnable(){ + return textureEnable; +} + +void Scene::setTextureEnable(bool b){ + textureEnable = b; +} + +bool Scene::isEmpty(){ + if(mEntities.size()==0) return true; + else return false; +} diff --git a/src/Scene.h b/src/Scene.h new file mode 100644 index 0000000..d6cbfc8 --- /dev/null +++ b/src/Scene.h @@ -0,0 +1,145 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _Scene_h_ +#define _Scene_h_ + +#include +#include + +#include "Entity.h" +#include "Light.h" +#include "Density.h" + +#include "Color.h" + +class ShadowMap; + +/** Classe permettant de gerer une scene complete. +*/ + +/** + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + +class Scene +{ +public: + Scene(); + virtual ~Scene(); + + /** Ajoute un objet dans la scene + @param pObj pointeur sur l'objet a ajouter. + @param castShadow indique si l'objet genere des ombres projetees ou non. + */ + void add(Entity* pObj, bool castShadow = true); + void remove(bool delMesh = true); + + /** Ajoute une source lumineuse dans la scene + @param pObj pointeur sur la lumiere a ajouter. + @param castShadow indique si la lumiere projete des ombress ou non. + */ + void add(Light* pLight, bool castShadow = false); + + Entity* getByName(const QString& name); + + template T* getByName(const QString& name) + { + EntityMap::const_iterator entity_iter = mAllEntities.find(name); + if(entity_iter!=mAllEntities.end()) + { + return dynamic_cast(entity_iter->second); + } + + return 0; + } + + void setAmbient(const Color& c); + const Color& getAmbient(void) const; + + /** Trace la scene. + */ + virtual void render(void); + + bool isShadowEnabled(void) const; + void setShadowEnabled(bool on); + + Vector3 getCenter(void); + void rotateObjet(float dx, float dy, std::vector camParam); + void afficheInfo(int split); + void fDensity(int coverage, Density *pDensity); + Entity* getEntity(); + /** + @name isTextureEnable + @brief pour voir si l'objet peut etre textute ou non ou s'il y a un objet dans la scene + */ + bool isTextureEnable(); + /** + @name setTextureEnable + @brief pour authoriser ou non le placage de texture sur l'objet de la scene + */ + void setTextureEnable(bool b); + + bool isEmpty(); +protected: + + typedef std::map EntityMap; + + struct EntityElement + { + EntityElement(Entity* e, bool c) + : pEntity(e), castShadow(c) + {} + Entity* pEntity; + bool castShadow; + }; + typedef std::vector EntityList; + + struct LightElement + { + LightElement(Light* e, bool c) + : pLight(e), castShadow(c) + {} + Light* pLight; + bool castShadow; + }; + typedef std::vector LightList; + + // liste les objets + EntityList mEntities; + + // liste des sources lumineuses + LightList mLights; + + EntityMap mAllEntities; + + Color mAmbient; + + ShadowMap* mShadowMap; + bool mShadowEnabled; + +protected: + + //-------------------------------------------------------------------------------- + // fonctions utiles pour les differents mode de rendu + void activateLights(void); + void releaseLights(void); + void renderObjects(bool activateMaterial = true); + void renderOccluders(bool activateMaterial = false); + //-------------------------------------------------------------------------------- + + /** + texture applicable ou pas + */ + bool textureEnable; + +}; + +#endif diff --git a/src/ShadowMap.cpp b/src/ShadowMap.cpp new file mode 100644 index 0000000..bf2c345 --- /dev/null +++ b/src/ShadowMap.cpp @@ -0,0 +1,178 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +//#include "OpenGL.h" + +#include + +#define INT32 _INT32 +#include "OffScreenRendering.h" +#undef INT32 + +#include "ShadowMap.h" +#include "Light.h" + + +/*******************************************************************/ +/* Début code à faire/completer par l'étudiant */ +/* shadow map */ +/*******************************************************************/ + +Matrix4 ShadowMap::scaleBiasMatrix( + 0.5, 0, 0, 0.5, + 0, 0.5, 0, 0.5, + 0, 0, 0.5, 0.5, + 0, 0, 0, 1.0 +); + +float ShadowMap::configEpsilon = 4.; + +ShadowMap::ShadowMap(int width, int height, int stage) + : mpLight(0) +{ + mTextureUnit = GL_TEXTURE0 + stage; + mPBuffer = new OffScreenRendering(width,height,true); + + // à faire : créer la texture de profondeur. + glGenTextures(1, &mTexId); + glBindTexture(GL_TEXTURE_2D, mTexId); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL); + glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, Color::WHITE); + glTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT24_ARB,width,height,0, GL_DEPTH_COMPONENT,GL_UNSIGNED_BYTE,0); GL_TEST_ERR; +} + +ShadowMap::~ShadowMap() +{ + // à faire : détruire la texture OpenGL. + glDeleteTextures(1, &mTexId); + delete mPBuffer; +} + +void ShadowMap::setLight(Light* pLight) +{ + if(pLight->getType()==Light::LT_SPOT) + { + mpLight = pLight; + } +} + +void ShadowMap::beginUpdate(void) +{ + // à faire : activer le PBuffer + // à faire : positionner la caméra OpenGL au niveau du spot + // à faire : décalage des polygones + + if(!mpLight) + { + std::cerr << "No valid light was setted\n"; + exit(1); + } + + mPBuffer->begin(); + glEnable(GL_DEPTH_TEST); + glClear(GL_DEPTH_BUFFER_BIT); + + Matrix4 lightview, lightproj; + + // render the scene from light source + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + gluPerspective( mpLight->getAperture()*2., 1.0, 3., 10e6); + glGetFloatv(GL_PROJECTION_MATRIX, (lightproj[0])); + lightproj = lightproj.transpose(); + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + // Vector3 camPos = mpLight->getPosition(); + // Vector3 lightDir = mpLight->getDirection(); + // Vector3 camTarget = camPos + lightDir; + // Vector3 camUp = lightDir.perpendicular(); + //gluLookAt(camPos.x, camPos.y, camPos.z, camTarget.x, camTarget.y, camTarget.z, camUp.x, camUp.y, camUp.z); + glGetFloatv(GL_MODELVIEW_MATRIX, (lightview[0])); + lightview = lightview.transpose(); + + mSceneToLightMatrix = scaleBiasMatrix * lightproj * lightview; + + glPolygonOffset(configEpsilon, 1.1f); + glEnable(GL_POLYGON_OFFSET_FILL); +} + +void ShadowMap::endUpdate(void) +{ + // à faire : restaurer les états OpenGL + // à faire : copier le depth buffer dans la texture de profondeur + // à faire : désactiver le PBuffer + + glDisable(GL_POLYGON_OFFSET_FILL); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + + glBindTexture(GL_TEXTURE_2D,mTexId); + mPBuffer->copyToTexture(&mTexId); + + mPBuffer->end(); +} + +void ShadowMap::activate(void) +{ + // à faire : activer la matrice de passage de la scène à la shadow map via la génération automatique des coordonnées de texture ou la matrice de transformation des coordonnées de texture + + // à faire : activer la texture de profondeur + + glActiveTexture(mTextureUnit); + glBindTexture(GL_TEXTURE_2D,mTexId); + + glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); + glTexGenfv(GL_S, GL_EYE_PLANE, mSceneToLightMatrix[0]); + glEnable(GL_TEXTURE_GEN_S); + + glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); + glTexGenfv(GL_T, GL_EYE_PLANE, mSceneToLightMatrix[1]); + glEnable(GL_TEXTURE_GEN_T); + + glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); + glTexGenfv(GL_R, GL_EYE_PLANE, mSceneToLightMatrix[2]); + glEnable(GL_TEXTURE_GEN_R); + + glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); + glTexGenfv(GL_Q, GL_EYE_PLANE, mSceneToLightMatrix[3]); + glEnable(GL_TEXTURE_GEN_Q); + + glEnable(GL_TEXTURE_2D); + + glActiveTexture(GL_TEXTURE0); +} + + +void ShadowMap::release(void) +{ + // à faire : restaurer les états OpenGL + + glActiveTexture(mTextureUnit); + glDisable(GL_TEXTURE_2D); + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + glDisable(GL_TEXTURE_GEN_R); + glDisable(GL_TEXTURE_GEN_Q); + glActiveTexture(GL_TEXTURE0); +} + +/*******************************************************************/ +/* Fin code à faire/completer par l'étudiant */ +/* shadow map */ +/*******************************************************************/ + diff --git a/src/ShadowMap.h b/src/ShadowMap.h new file mode 100644 index 0000000..1a442a3 --- /dev/null +++ b/src/ShadowMap.h @@ -0,0 +1,104 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _ShadowMap_h_ +#define _ShadowMap_h_ + +class OffScreenRendering; +class Light; +class Entity; + + +#include +#include "OpenGL.h" +#include "Matrix4.h" + + +/** Classe permetant de gérer une shadow map. + - Une seule instance d'une ShadowMap est généralement suffisante, même pour gérer plusieurs sources lumineuses. + - Son utilisation doit être très simple : + - Pour la mise à jour : + \code + setLight(light); + beginUpdate(); + // tracer les occluders + endUpdate(); + \endcode + - Au moment du rendu de la scène : + \code + activate(); + // tracer les objets de la scène + release(); + \endcode + +\note classe à completer entièrement par l'étudiant +*/ +class ShadowMap +{ +public: + + /** Constructeur. + \param width largeur de la texture de profondeur. + \param height hauteur de la texture de profondeur. + \param stage numéro de l'unité de texture à utiliser. + */ + ShadowMap(int width=1024, int height=1024, int stage=3); + + ~ShadowMap(); + + /** Définie la source lumineuse à utiliser (doit être de type "spot") + */ + void setLight(Light* pLight); + + /** Méthode à appeler pour mettre à jour la shadow map. + */ + void beginUpdate(void); + + /** Méthode à appeler à la fin de la mise à jour. + */ + void endUpdate(void); + + /** Active les état OpenGL permettant le rendu avec la shadow map. + */ + void activate(void); + + /** Désactive les état OpenGL. + */ + void release(void); + +public: + + /** Epsilon pour le décalage des polygones + */ + static float configEpsilon; + +protected: + + /** Contexte de rendu hors écran. + */ + OffScreenRendering *mPBuffer; + + /** Source lumineuse courante. + */ + Light* mpLight; + + static Matrix4 scaleBiasMatrix; + + /** Unité de texture à utiliser. + */ + GLenum mTextureUnit; + + /** Numéro OpenGL de la texture. + */ + GLuint mTexId; + + /** Matrice de passage de l'espace scene à l'espace de la shadow map. + */ + Matrix4 mSceneToLightMatrix; +}; + +#endif diff --git a/src/TextureLayer.cpp b/src/TextureLayer.cpp new file mode 100644 index 0000000..9b7b1aa --- /dev/null +++ b/src/TextureLayer.cpp @@ -0,0 +1,129 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "TextureLayer.h" +//#include +#include +#include + +/*******************************************************************/ +/* Début code à  faire/completer par l'étudiant */ +/* Texture */ +/*******************************************************************/ +TextureLayer::TextureLayer(const QString& fileName, const QString& semantic) + : mSemantic(semantic), mBlendMode(GL_MODULATE), mWrapMode(GL_REPEAT) +{ + QImage img = QImage(fileName).rgbSwapped(); // swapRGB : pour être conforme avec OpenGL + + if(!img.isNull()) + { + img = img.mirrored(); // pour être conforme avec OpenGL + GLenum fmt = GL_RGB; + + switch(img.depth()) + { + case 8: + fmt = GL_LUMINANCE; + break; + case 16: + fmt = GL_LUMINANCE_ALPHA; + break; + case 24: + fmt = GL_RGB; + break; + case 32: + fmt = GL_RGBA; + break; + default: + std::cerr << "Error in TextureLayer, bpp = " << img.depth() << " !" << std::endl; + exit(1); + } + + + glGenTextures(1, &mTexId); GL_TEST_ERR + + glBindTexture(GL_TEXTURE_2D, mTexId); + + gluBuild2DMipmaps(GL_TEXTURE_2D, fmt, img.width(), img.height(), fmt, GL_UNSIGNED_BYTE, img.bits()); GL_TEST_ERR; + + glBindTexture(GL_TEXTURE_2D,0); + + mFilteringModes[1] = GL_LINEAR; + mFilteringModes[0] = GL_LINEAR_MIPMAP_LINEAR; + } + else if (fileName.contains(".tga", Qt::CaseInsensitive)) + { + tga=new TgaLoader(fileName); + glGenTextures(1, &mTexId); + glBindTexture(GL_TEXTURE_2D, mTexId); + gluBuild2DMipmaps ( GL_TEXTURE_2D, tga->getInternalFormat(), + tga->getWidth(), tga->getHeight(), + tga->getFormat(), GL_UNSIGNED_BYTE, tga->getTexels()); + glBindTexture(GL_TEXTURE_2D,0); + + mFilteringModes[1] = GL_LINEAR; + mFilteringModes[0] = GL_LINEAR_MIPMAP_LINEAR; + } + else + std::cerr<<"Invalid format image"< +#include "OpenGL.h" +#include + +#include "Vector3.h" +#include "Transform.h" + +#include "TgaLoader.h" +class TextureLayer +{ +public: + + /** Constructeur d'une texture + \param fileName nom du fichier contenant l'image + \param semantic sémantique de la texture (DiffuseMap, AlphaMap, EnvironementMap, ...) + \note à  faire par l'étudiant + */ + TextureLayer(const QString& fileName, const QString& semantic = "DiffuseMap"); + + /** retourne la sémentique de la texture + */ + const QString& getSemantic(void) const; + + /** Active les états OpenGL de la texture. + \note à  faire par l'étudiant + */ + void activate(void); + + /** Désactive les états OpenGL de la texture. + \note à  faire par l'étudiant + */ + void release(void); + + /** Spécifie le mode de filtrage pour la réduction et l'agrandissement (GL_LINEAR, GL_NEAREST, GL_LINEAR_MIPMAP_LINEAR, ...). + */ + void setFilteringMode(GLenum minMode, GLenum magMode); + + /** Spécifie le mode de mélange entre la texture et la couleur du fragment (GL_MODULATE, GL_REPLACE, GL_ADD, ...) + */ + void setBlendMode(GLenum mode); + + /** Spécifie le mode de répétition de la texture (GL_REPEAT ou GL_CLAMP). + */ + void setWrapMode(GLenum mode); + + /** Spécifie les transformations des coordonnées de textures. + */ + void setTransform(const Transform& t); + const Transform& getTransform(void); + +protected: + + QString mSemantic; + + GLenum mBlendMode; + GLenum mWrapMode; + GLenum mFilteringModes[2]; + + /// numéro OpenGL de la texture. + GLuint mTexId; + + Transform mTransform; + TgaLoader *tga; +}; + +#endif diff --git a/src/TgaLoader.cpp b/src/TgaLoader.cpp new file mode 100644 index 0000000..ecc497a --- /dev/null +++ b/src/TgaLoader.cpp @@ -0,0 +1,548 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#include "TgaLoader.h" +#include +#include + +TgaLoader::TgaLoader(const QString& fileName) +{ + FILE *fp; + colormap=NULL; + + fp = fopen (fileName.toAscii(), "rb"); + if (!fp) + { + std::cerr<<"error: couldn't open "<> 3)); + fread (colormap, sizeof (GLubyte), header.cm_length + * (header.cm_size >> 3), fp); + } + + /* memory allocation */ + texinfo->texels = (GLubyte *)malloc (sizeof (GLubyte) *texinfo->width * texinfo->height * texinfo->internalFormat); + if (!texinfo->texels) + { + free (texinfo); + return ; + } + + /* lecture des données pixels de l'image... */ + switch (header.image_type) + { + case 0: + /* no data */ + break; + + case 1: + /* uncompressed 8 bits color index */ + ReadTGA8bits (fp, colormap, texinfo); + break; + + case 2: + /* uncompressed 16-24-32 bits */ + switch (header.pixel_depth) + { + case 16: + ReadTGA16bits (fp, texinfo); + break; + + case 24: + ReadTGA24bits (fp, texinfo); + break; + + case 32: + ReadTGA32bits (fp, texinfo); + break; + } + + break; + + case 3: + /* uncompressed 8 or 16 bits grayscale */ + if (header.pixel_depth == 8) + ReadTGAgray8bits (fp, texinfo); + else /* 16 */ + ReadTGAgray16bits (fp, texinfo); + + break; + + case 9: + /* RLE compressed 8 bits color index */ + ReadTGA8bitsRLE (fp, colormap, texinfo); + break; + + case 10: + /* RLE compressed 16-24-32 bits */ + switch (header.pixel_depth) + { + case 16: + ReadTGA16bitsRLE (fp, texinfo); + break; + + case 24: + ReadTGA24bitsRLE (fp, texinfo); + break; + + case 32: + ReadTGA32bitsRLE (fp, texinfo); + break; + } + + break; + + case 11: + /* RLE compressed 8 or 16 bits grayscale */ + if (header.pixel_depth == 8) + ReadTGAgray8bitsRLE (fp, texinfo); + else /* 16 */ + ReadTGAgray16bitsRLE (fp, texinfo); + + break; + + default: + /* image type is not correct */ + std::cerr<<"error: unknown TGA image typ"<texels); + free (texinfo); + texinfo = NULL; + break; + } + /* désallocations mémoire nécessaires... */ + if (colormap) + free (colormap); + + fclose (fp); +} + + +TgaLoader::~TgaLoader() +{ +} + +void +TgaLoader::GetTextureInfo (tga_header_t *header, gl_texture_t *texinfo) +{ + texinfo->width = header->width; + texinfo->height = header->height; + + switch (header->image_type) + { + case 3: /* grayscale 8 bits */ + case 11: /* grayscale 8 bits (RLE) */ + { + if (header->pixel_depth == 8) + { + texinfo->format = GL_LUMINANCE; + texinfo->internalFormat = 1; + } + else /* 16 bits */ + { + texinfo->format = GL_LUMINANCE_ALPHA; + texinfo->internalFormat = 2; + } + + break; + } + + case 1: /* 8 bits color index */ + case 2: /* BGR 16-24-32 bits */ + case 9: /* 8 bits color index (RLE) */ + case 10: /* BGR 16-24-32 bits (RLE) */ + { + /* 8 bits and 16 bits images will be converted to 24 bits */ + if (header->pixel_depth <= 24) + { + texinfo->format = GL_RGB; + texinfo->internalFormat = 3; + } + else /* 32 bits */ + { + texinfo->format = GL_RGBA; + texinfo->internalFormat = 4; + } + + break; + } + } +} + +void +TgaLoader::ReadTGA24bits (FILE *fp, gl_texture_t *texinfo) +{ + int i; + int taille = texinfo->width * texinfo->height; + for (i = 0; i < taille; ++i) + { + /* read and convert BGR to RGB */ + texinfo->texels[(i * 3) + 2] = (GLubyte)fgetc (fp); + texinfo->texels[(i * 3) + 1] = (GLubyte)fgetc (fp); + texinfo->texels[(i * 3) + 0] = (GLubyte)fgetc (fp); + } +} + +void +TgaLoader::ReadTGA32bits (FILE *fp, gl_texture_t *texinfo) +{ + int i; + int taille = texinfo->width * texinfo->height; + for (i = 0; i < taille; ++i) + { + /* read and convert BGRA to RGBA */ + texinfo->texels[(i * 4) + 2] = (GLubyte)fgetc (fp); + texinfo->texels[(i * 4) + 1] = (GLubyte)fgetc (fp); + texinfo->texels[(i * 4) + 0] = (GLubyte)fgetc (fp); + texinfo->texels[(i * 4) + 3] = (GLubyte)fgetc (fp); + } +} + +void +TgaLoader::ReadTGA16bits (FILE *fp, gl_texture_t *texinfo) +{ + int i; + int taille = texinfo->width * texinfo->height; + unsigned short color; + + for (i = 0; i < taille; ++i) + { + /* read color word */ + color = fgetc (fp) + (fgetc (fp) << 8); + + /* convert BGR to RGB */ + texinfo->texels[(i * 3) + 0] = (GLubyte)(((color & 0x7C00) >> 10) << 3); + texinfo->texels[(i * 3) + 1] = (GLubyte)(((color & 0x03E0) >> 5) << 3); + texinfo->texels[(i * 3) + 2] = (GLubyte)(((color & 0x001F) >> 0) << 3); + } +} + +void +TgaLoader::ReadTGA8bits (FILE *fp, GLubyte *colormap, gl_texture_t *texinfo) +{ + int i; + GLubyte color; + int taille = texinfo->width * texinfo->height; + for (i = 0; i < taille; ++i) + { + /* read index color byte */ + color = (GLubyte)fgetc (fp); + + /* convert to RGB 24 bits */ + texinfo->texels[(i * 3) + 2] = colormap[(color * 3) + 0]; + texinfo->texels[(i * 3) + 1] = colormap[(color * 3) + 1]; + texinfo->texels[(i * 3) + 0] = colormap[(color * 3) + 2]; + } +} + +void +TgaLoader::ReadTGAgray8bits (FILE *fp, gl_texture_t *texinfo) +{ + int i; + int taille = texinfo->width * texinfo->height; + for (i = 0; i < taille; ++i) + { + /* read grayscale color byte */ + texinfo->texels[i] = (GLubyte)fgetc (fp); + } +} + +void +TgaLoader::ReadTGA24bitsRLE (FILE *fp, gl_texture_t *texinfo) +{ + int i, size; + GLubyte rgb[3]; + GLubyte packet_header; + GLubyte *ptr = texinfo->texels; + + while (ptr < texinfo->texels + (texinfo->width * texinfo->height) * 3) + { + /* read first byte */ + packet_header = (GLubyte)fgetc (fp); + size = 1 + (packet_header & 0x7f); + + if (packet_header & 0x80) + { + /* run-length packet */ + fread (rgb, sizeof (GLubyte), 3, fp); + + for (i = 0; i < size; ++i, ptr += 3) + { + ptr[0] = rgb[2]; + ptr[1] = rgb[1]; + ptr[2] = rgb[0]; + } + } + else + { + /* non run-length packet */ + for (i = 0; i < size; ++i, ptr += 3) + { + ptr[2] = (GLubyte)fgetc (fp); + ptr[1] = (GLubyte)fgetc (fp); + ptr[0] = (GLubyte)fgetc (fp); + } + } + } +} + +void +TgaLoader::ReadTGAgray16bits (FILE *fp, gl_texture_t *texinfo) +{ + int i; + int taille = texinfo->width * texinfo->height; + for (i = 0; i < taille; ++i) + { + /* read grayscale color + alpha channel bytes */ + texinfo->texels[(i * 2) + 0] = (GLubyte)fgetc (fp); + texinfo->texels[(i * 2) + 1] = (GLubyte)fgetc (fp); + } +} + +void +TgaLoader::ReadTGA8bitsRLE (FILE *fp, GLubyte *colormap, gl_texture_t *texinfo) +{ + int i, size; + GLubyte color; + GLubyte packet_header; + GLubyte *ptr = texinfo->texels; + + while (ptr < texinfo->texels + (texinfo->width * texinfo->height) * 3) + { + /* read first byte */ + packet_header = (GLubyte)fgetc (fp); + size = 1 + (packet_header & 0x7f); + + if (packet_header & 0x80) + { + /* run-length packet */ + color = (GLubyte)fgetc (fp); + + for (i = 0; i < size; ++i, ptr += 3) + { + ptr[0] = colormap[(color * 3) + 2]; + ptr[1] = colormap[(color * 3) + 1]; + ptr[2] = colormap[(color * 3) + 0]; + } + } + else + { + /* non run-length packet */ + for (i = 0; i < size; ++i, ptr += 3) + { + color = (GLubyte)fgetc (fp); + + ptr[0] = colormap[(color * 3) + 2]; + ptr[1] = colormap[(color * 3) + 1]; + ptr[2] = colormap[(color * 3) + 0]; + } + } + } +} + +void +TgaLoader::ReadTGA16bitsRLE (FILE *fp, gl_texture_t *texinfo) +{ + int i, size; + unsigned short color; + GLubyte packet_header; + GLubyte *ptr = texinfo->texels; + + while (ptr < texinfo->texels + (texinfo->width * texinfo->height) * 3) + { + /* read first byte */ + packet_header = fgetc (fp); + size = 1 + (packet_header & 0x7f); + + if (packet_header & 0x80) + { + /* run-length packet */ + color = fgetc (fp) + (fgetc (fp) << 8); + + for (i = 0; i < size; ++i, ptr += 3) + { + ptr[0] = (GLubyte)(((color & 0x7C00) >> 10) << 3); + ptr[1] = (GLubyte)(((color & 0x03E0) >> 5) << 3); + ptr[2] = (GLubyte)(((color & 0x001F) >> 0) << 3); + } + } + else + { + /* non run-length packet */ + for (i = 0; i < size; ++i, ptr += 3) + { + color = fgetc (fp) + (fgetc (fp) << 8); + + ptr[0] = (GLubyte)(((color & 0x7C00) >> 10) << 3); + ptr[1] = (GLubyte)(((color & 0x03E0) >> 5) << 3); + ptr[2] = (GLubyte)(((color & 0x001F) >> 0) << 3); + } + } + } +} + +void +TgaLoader::ReadTGA32bitsRLE (FILE *fp, gl_texture_t *texinfo) +{ + int i, size; + GLubyte rgba[4]; + GLubyte packet_header; + GLubyte *ptr = texinfo->texels; + + while (ptr < texinfo->texels + (texinfo->width * texinfo->height) * 4) + { + /* read first byte */ + packet_header = (GLubyte)fgetc (fp); + size = 1 + (packet_header & 0x7f); + + if (packet_header & 0x80) + { + /* run-length packet */ + fread (rgba, sizeof (GLubyte), 4, fp); + + for (i = 0; i < size; ++i, ptr += 4) + { + ptr[0] = rgba[2]; + ptr[1] = rgba[1]; + ptr[2] = rgba[0]; + ptr[3] = rgba[3]; + } + } + else + { + /* non run-length packet */ + for (i = 0; i < size; ++i, ptr += 4) + { + ptr[2] = (GLubyte)fgetc (fp); + ptr[1] = (GLubyte)fgetc (fp); + ptr[0] = (GLubyte)fgetc (fp); + ptr[3] = (GLubyte)fgetc (fp); + } + } + } +} + + +void +TgaLoader::ReadTGAgray8bitsRLE (FILE *fp, gl_texture_t *texinfo) +{ + int i, size; + GLubyte color; + GLubyte packet_header; + GLubyte *ptr = texinfo->texels; + + while (ptr < texinfo->texels + (texinfo->width * texinfo->height)) + { + /* read first byte */ + packet_header = (GLubyte)fgetc (fp); + size = 1 + (packet_header & 0x7f); + + if (packet_header & 0x80) + { + /* run-length packet */ + color = (GLubyte)fgetc (fp); + + for (i = 0; i < size; ++i, ptr++) + *ptr = color; + } + else + { + /* non run-length packet */ + for (i = 0; i < size; ++i, ptr++) + *ptr = (GLubyte)fgetc (fp); + } + } +} + + +void +TgaLoader::ReadTGAgray16bitsRLE (FILE *fp, gl_texture_t *texinfo) +{ + int i, size; + GLubyte color, alpha; + GLubyte packet_header; + GLubyte *ptr = texinfo->texels; + + while (ptr < texinfo->texels + (texinfo->width * texinfo->height) * 2) + { + /* read first byte */ + packet_header = (GLubyte)fgetc (fp); + size = 1 + (packet_header & 0x7f); + + if (packet_header & 0x80) + { + /* run-length packet */ + color = (GLubyte)fgetc (fp); + alpha = (GLubyte)fgetc (fp); + + for (i = 0; i < size; ++i, ptr += 2) + { + ptr[0] = color; + ptr[1] = alpha; + } + } + else + { + /* non run-length packet */ + for (i = 0; i < size; ++i, ptr += 2) + { + ptr[0] = (GLubyte)fgetc (fp); + ptr[1] = (GLubyte)fgetc (fp); + } + } + } +} + +GLuint TgaLoader::getWidth() +{ + return texinfo->width; +} + +GLuint TgaLoader::getHeight() +{ + return texinfo->height; +} + +GLint TgaLoader::getInternalFormat() +{ + return texinfo->internalFormat; +} + +GLenum TgaLoader::getFormat() +{ + return texinfo->format; +} + +GLubyte *TgaLoader::getTexels() +{ + return texinfo->texels; +} diff --git a/src/TgaLoader.h b/src/TgaLoader.h new file mode 100644 index 0000000..d5b1783 --- /dev/null +++ b/src/TgaLoader.h @@ -0,0 +1,96 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotmail.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef _TgaLoader_h_ +#define _TgaLoader_h_ +#include + +#include +/** + @author GangsTER +*/ +class TgaLoader +{ +public: + TgaLoader(const QString& fileName); + + ~TgaLoader(); + GLuint getWidth(); + GLuint getHeight(); + GLint getInternalFormat(); + GLenum getFormat(); + GLubyte *getTexels(); + +protected: + /* OpenGL texture info */ + typedef struct + { + GLuint width; /* largeur */ + GLuint height; /* hauteur */ + + GLenum format; /* RVB, RVBA, Luminance, Luminance Alpha */ + GLint internalFormat; /* composantes d'un texel */ + + GLubyte *texels; /* données de l'image */ + }gl_texture_t; + + /* tga header */ + #pragma pack(push, 1) + typedef struct + { + GLubyte id_lenght; /* size of image id */ + GLubyte colormap_type; /* 1 is has a colormap */ + GLubyte image_type; /* compression type */ + + short cm_first_entry; /* colormap origin */ + short cm_length; /* colormap length */ + GLubyte cm_size; /* colormap size */ + + short x_origin; /* bottom left x coord origin */ + short y_origin; /* bottom left y coord origin */ + + short width; /* picture width (in pixels) */ + short height; /* picture height (in pixels) */ + + GLubyte pixel_depth; /* bits per pixel: 8, 16, 24 or 32 */ + GLubyte image_descriptor; /* 24 bits = 0x00; 32 bits = 0x80 */ + }tga_header_t; + #pragma pack(pop) + + void GetTextureInfo (tga_header_t *header, gl_texture_t *texinfo); + void ReadTGA24bits (FILE *fp, gl_texture_t *texinfo); + void ReadTGA32bits (FILE *fp, gl_texture_t *texinfo); + void ReadTGA16bits (FILE *fp, gl_texture_t *texinfo); + void ReadTGA8bits (FILE *fp, GLubyte *colormap, gl_texture_t *texinfo); + void ReadTGAgray8bits (FILE *fp, gl_texture_t *texinfo); + void ReadTGA24bitsRLE (FILE *fp, gl_texture_t *texinfo); + void ReadTGAgray16bits (FILE *fp, gl_texture_t *texinfo); + void ReadTGA8bitsRLE (FILE *fp, GLubyte *colormap, gl_texture_t *texinfo); + void ReadTGA16bitsRLE (FILE *fp, gl_texture_t *texinfo); + void ReadTGA32bitsRLE (FILE *fp, gl_texture_t *texinfo); + void ReadTGAgray8bitsRLE (FILE *fp, gl_texture_t *texinfo); + void ReadTGAgray16bitsRLE (FILE *fp, gl_texture_t *texinfo); + +private: + gl_texture_t *texinfo; + tga_header_t header; + GLubyte *colormap; +}; + +#endif diff --git a/src/Timer.h b/src/Timer.h new file mode 100644 index 0000000..ae990fc --- /dev/null +++ b/src/Timer.h @@ -0,0 +1,64 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _Timer_h_ +#define _Timer_h_ + +#include +#include +#include + +class Timer +{ +public: + + typedef double Time; + + Timer() + { + reset(); + } + + ~Timer() + { + } + + inline void start(void) + { + mLast = getTime(); + } + inline void stop(void) + { + mSum += getTime() - mLast; + } + inline void reset(void) + { + mSum = 0.; + } + + inline Time value(void) + { + return mSum; + } + + static Time getTime(void) + { + struct timeval tv; + struct timezone tz; + gettimeofday(&tv, &tz); + return (Time) ((double)tv.tv_sec + 1.e-6 * (double)tv.tv_usec); + } + +protected: + + Time mSum, mLast; + +}; + + +#endif + diff --git a/src/Transform.cpp b/src/Transform.cpp new file mode 100644 index 0000000..a758df2 --- /dev/null +++ b/src/Transform.cpp @@ -0,0 +1,84 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "Transform.h" + +Transform::Transform(void) + : mPosition(0., 0. ,0.), mScale(1., 1., 1.) +{ +} + +Transform::Transform(const Matrix4& mat) + : mScale(1., 1., 1.) +{ + mPosition = Vector3(mat[0][3], mat[1][3], mat[2][3]); + Matrix3 rot; + mat.extract3x3Matrix(rot); + mOrientation.FromRotationMatrix(rot); +} + +Transform::Transform(const Transform& t) +{ + mPosition = t.mPosition; + mScale = t.mScale; + mOrientation = t.mOrientation; +} + +const Transform& Transform::operator = (const Transform t) +{ + mPosition = t.mPosition; + mScale = t.mScale; + mOrientation = t.mOrientation; + return *this; +} +void Transform::setIdentity(void) +{ + mPosition = Vector3::ZERO; + mScale = Vector3::UNIT_SCALE; + mOrientation = Quaternion(); +} + +void Transform::setScale(const Vector3& vScale) +{ + mScale = vScale; +} +void Transform::setScale(float sx, float sy, float sz) +{ + mScale = Vector3(sx, sy, sz); +} +void Transform::setScale(float s) +{ + mScale = Vector3(s, s, s); +} +void Transform::setOrientation(const Quaternion& q) +{ + mOrientation = q; +} +void Transform::setOrientation(float angle, float x, float y, float z) +{ + mOrientation.FromAngleAxis(angle, Vector3(x, y, z)); +} +void Transform::setPosition(const Vector3& pos) +{ + mPosition = pos; +} +void Transform::setPosition(float x, float y, float z) +{ + mPosition = Vector3(x, y, z); +} + +void Transform::multCurrentMatrix(void) const +{ + glTranslatef(mPosition.x, mPosition.y, mPosition.z); + float a; + Vector3 axis; + mOrientation.ToAngleAxis(a, axis); + glRotatef(a*180./M_PI, axis.x, axis.y, axis.z); + glScalef(mScale.x, mScale.y, mScale.z); +} + + diff --git a/src/Transform.h b/src/Transform.h new file mode 100644 index 0000000..db33a88 --- /dev/null +++ b/src/Transform.h @@ -0,0 +1,103 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _Transform_h_ +#define _Transform_h_ + +#include +#include "Vector3.h" +#include "Quaternion.h" +#include "Matrix3.h" +#include "Matrix4.h" + +class Transform +{ +public: + + Transform(void); + + Transform(const Matrix4& mat); + + Transform(const Transform& t); + + const Transform& operator = (const Transform t); + + void setIdentity(void); + + void setScale(const Vector3& vScale); + void setScale(float sx, float sy, float sz); + void setScale(float s); + inline const Vector3& getScale(void) const + { + return mScale; + } + + void setOrientation(const Quaternion& q); + void setOrientation(float angle, float x, float y, float z); + inline const Quaternion& getOrientation(void) const + { + return mOrientation; + } + + void setPosition(const Vector3& pos); + void setPosition(float x, float y, float z); + inline const Vector3& getPosition(void) const + { + return mPosition; + } + + Matrix4 getMatrix(void) const + { + Matrix4 mat(Matrix4::IDENTITY); + Matrix3 rotMat; + mOrientation.ToRotationMatrix(rotMat); + mat = rotMat; + mat[0][0] *= mScale.x; + mat[0][1] *= mScale.x; + mat[0][2] *= mScale.x; + mat[1][0] *= mScale.y; + mat[1][1] *= mScale.y; + mat[1][2] *= mScale.y; + mat[2][0] *= mScale.z; + mat[2][1] *= mScale.z; + mat[2][2] *= mScale.z; + mat.setTrans(mPosition); + return mat; + } + + Matrix4 getInverseMatrix(void) const + { + Matrix4 mat(Matrix4::IDENTITY); + Matrix3 rotMat; + mOrientation.ToRotationMatrix(rotMat); + mat = rotMat; + mat[0][0] *= mScale.x; + mat[0][1] *= mScale.x; + mat[0][2] *= mScale.x; + mat[1][0] *= mScale.y; + mat[1][1] *= mScale.y; + mat[1][2] *= mScale.y; + mat[2][0] *= mScale.z; + mat[2][1] *= mScale.z; + mat[2][2] *= mScale.z; + mat.setTrans(mPosition); + return mat.inverse(); + } + inline Vector3 toLocalSpace(const Vector3& v) const + { + return getInverseMatrix() * v; + } + + void multCurrentMatrix(void) const; + +protected: + Vector3 mPosition; + Quaternion mOrientation; + Vector3 mScale; +}; + +#endif diff --git a/src/Vector3.cpp b/src/Vector3.cpp new file mode 100644 index 0000000..a868a76 --- /dev/null +++ b/src/Vector3.cpp @@ -0,0 +1,34 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE + (Object-oriented Graphics Rendering Engine) +For the latest info, see http://ogre.sourceforge.net/ + +Copyright © 2000-2002 The OGRE Team +Also see acknowledgements in Readme.html + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ + +#include "Vector3.h" + +const Vector3 Vector3::ZERO( 0, 0, 0 ); + +const Vector3 Vector3::UNIT_X( 1, 0, 0 ); +const Vector3 Vector3::UNIT_Y( 0, 1, 0 ); +const Vector3 Vector3::UNIT_Z( 0, 0, 1 ); +const Vector3 Vector3::UNIT_SCALE(1, 1, 1); + diff --git a/src/Vector3.h b/src/Vector3.h new file mode 100644 index 0000000..bff6078 --- /dev/null +++ b/src/Vector3.h @@ -0,0 +1,587 @@ +/* +----------------------------------------------------------------------------- +This source file is part of OGRE + (Object-oriented Graphics Rendering Engine) +For the latest info, see http://ogre.sourceforge.net/ + +Copyright © 2000-2002 The OGRE Team +Also see acknowledgements in Readme.html + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. +----------------------------------------------------------------------------- +*/ +#ifndef __Vector3_H__ +#define __Vector3_H__ + +#include +#include +#include "Quaternion.h" +#include + +/** Standard 3-dimensional vector. + @remarks + A direction in 3D space represented as distances along the 3 + orthoganal axes (x, y, z). Note that positions, directions and + scaling factors can be represented by a vector, depending on how + you interpret the values. +*/ +class Vector3 +{ +public: + float x, y, z; + +public: + inline Vector3() + { + } + + inline Vector3( float fX, float fY, float fZ ) + : x( fX ), y( fY ), z( fZ ) + { + } + + inline Vector3( float afCoordinate[3] ) + : x( afCoordinate[0] ), + y( afCoordinate[1] ), + z( afCoordinate[2] ) + { + } + + inline Vector3( int afCoordinate[3] ) + { + x = (float)afCoordinate[0]; + y = (float)afCoordinate[1]; + z = (float)afCoordinate[2]; + } + + inline Vector3( const float* const r ) + : x( r[0] ), y( r[1] ), z( r[2] ) + { + } + + inline Vector3( const Vector3& rkVector ) + : x( rkVector.x ), y( rkVector.y ), z( rkVector.z ) + { + } + + inline void set(float fX, float fY, float fZ) + { + x = fX; + y = fY; + z = fZ; + } + + inline operator float* () + { + return &x; + } + + inline operator const float* () const + { + return &x; + } + + inline const float* data(void) const + { + return &x; + } + + /** Assigns the value of the other vector. + @param + rkVector The other vector + */ + inline Vector3& operator = ( const Vector3& rkVector ) + { + x = rkVector.x; + y = rkVector.y; + z = rkVector.z; + + return *this; + } + + inline bool operator == ( const Vector3& rkVector ) const + { + return ( x == rkVector.x && y == rkVector.y && z == rkVector.z ); + } + + inline bool operator != ( const Vector3& rkVector ) const + { + return ( x != rkVector.x || y != rkVector.y || z != rkVector.z ); + } + + // arithmetic operations + inline Vector3 operator + ( const Vector3& rkVector ) const + { + Vector3 kSum; + + kSum.x = x + rkVector.x; + kSum.y = y + rkVector.y; + kSum.z = z + rkVector.z; + + return kSum; + } + + inline Vector3 operator - ( const Vector3& rkVector ) const + { + Vector3 kDiff; + + kDiff.x = x - rkVector.x; + kDiff.y = y - rkVector.y; + kDiff.z = z - rkVector.z; + + return kDiff; + } + + inline Vector3 operator * ( float fScalar ) const + { + Vector3 kProd; + + kProd.x = fScalar*x; + kProd.y = fScalar*y; + kProd.z = fScalar*z; + + return kProd; + } + + inline Vector3 operator * ( const Vector3& rhs) const + { + Vector3 kProd; + + kProd.x = rhs.x * x; + kProd.y = rhs.y * y; + kProd.z = rhs.z * z; + + return kProd; + } + + inline Vector3 operator / ( float fScalar ) const + { + assert( fScalar != 0.0 ); + + Vector3 kDiv; + + float fInv = 1.0 / fScalar; + kDiv.x = x * fInv; + kDiv.y = y * fInv; + kDiv.z = z * fInv; + + return kDiv; + } + + inline Vector3 operator - () const + { + Vector3 kNeg; + + kNeg.x = -x; + kNeg.y = -y; + kNeg.z = -z; + + return kNeg; + } + + inline friend Vector3 operator * ( float fScalar, const Vector3& rkVector ) + { + Vector3 kProd; + + kProd.x = fScalar * rkVector.x; + kProd.y = fScalar * rkVector.y; + kProd.z = fScalar * rkVector.z; + + return kProd; + } + + // arithmetic updates + inline Vector3& operator += ( const Vector3& rkVector ) + { + x += rkVector.x; + y += rkVector.y; + z += rkVector.z; + + return *this; + } + + inline Vector3& operator -= ( const Vector3& rkVector ) + { + x -= rkVector.x; + y -= rkVector.y; + z -= rkVector.z; + + return *this; + } + + inline Vector3& operator *= ( float fScalar ) + { + x *= fScalar; + y *= fScalar; + z *= fScalar; + return *this; + } + + inline Vector3& operator /= ( float fScalar ) + { + assert( fScalar != 0.0 ); + + float fInv = 1.0 / fScalar; + + x *= fInv; + y *= fInv; + z *= fInv; + + return *this; + } + + /** Returns the length (magnitude) of the vector. + @warning + This operation requires a square root and is expensive in + terms of CPU operations. If you don't need to know the exact + length (e.g. for just comparing lengths) use squaredLength() + instead. + */ + inline float length () const + { + return sqrt( x * x + y * y + z * z ); + } + + /** Returns the square of the length(magnitude) of the vector. + @remarks + This method is for efficiency - calculating the actual + length of a vector requires a square root, which is expensive + in terms of the operations required. This method returns the + square of the length of the vector, i.e. the same as the + length but before the square root is taken. Use this if you + want to find the longest / shortest vector without incurring + the square root. + */ + inline float squaredLength () const + { + return x * x + y * y + z * z; + } + + /** Calculates the dot (scalar) product of this vector with another. + @remarks + The dot product can be used to calculate the angle between 2 + vectors. If both are unit vectors, the dot product is the + cosine of the angle; otherwise the dot product must be + divided by the product of the lengths of both vectors to get + the cosine of the angle. This result can further be used to + calculate the distance of a point from a plane. + @param + vec Vector with which to calculate the dot product (together + with this one). + @returns + A float representing the dot product value. + */ + inline float dotProduct(const Vector3& vec) const + { + return x * vec.x + y * vec.y + z * vec.z; + } + + /** Normalises the vector. + @remarks + This method normalises the vector such that it's + length / magnitude is 1. The result is called a unit vector. + @note + This function will not crash for zero-sized vectors, but there + will be no changes made to their components. + @returns The previous length of the vector. + */ + inline float normalise() + { + float fLength = sqrt( x * x + y * y + z * z ); + + // Will also work for zero-sized vectors, but will change nothing + if ( fLength > 1e-06 ) + { + float fInvLength = 1.0 / fLength; + x *= fInvLength; + y *= fInvLength; + z *= fInvLength; + } + + return fLength; + } + inline float invsqrt(float & x) + { + float half = 0.5f*x; + int i = *(int*)&x; + i = 0x5f3759df - (i >> 1); + x = *(float*)i; // *(float*)&i -> changement pour éviter des warnings + x = x*(1.5f - half*x*x); + return x; + } + inline void normalisef() + { + float l2 = x*x + y*y + z*z; + float fInvLength = invsqrt(l2); + x *= fInvLength; + y *= fInvLength; + z *= fInvLength; + } + inline void normaliseAndScalef(float s) + { + float l2 = x*x + y*y + z*z; + float scale = invsqrt(l2) * s; + x *= scale; + y *= scale; + z *= scale; + } + /** Calculates the cross-product of 2 vectors, i.e. the vector that + lies perpendicular to them both. + @remarks + The cross-product is normally used to calculate the normal + vector of a plane, by calculating the cross-product of 2 + non-equivalent vectors which lie on the plane (e.g. 2 edges + of a triangle). + @param + vec Vector which, together with this one, will be used to + calculate the cross-product. + @returns + A vector which is the result of the cross-product. This + vector will NOT be normalised, to maximise efficiency + - call Vector3::normalise on the result if you wish this to + be done. As for which side the resultant vector will be on, the + returned vector will be on the side from which the arc from 'this' + to rkVector is anticlockwise, e.g. UNIT_Y.crossProduct(UNIT_Z) + = UNIT_X, whilst UNIT_Z.crossProduct(UNIT_Y) = -UNIT_X. + @par + For a clearer explanation, look a the left and the bottom edges + of your monitor's screen. Assume that the first vector is the + left edge and the second vector is the bottom edge, both of + them starting from the lower-left corner of the screen. The + resulting vector is going to be perpendicular to both of them + and will go inside the screen, towards the cathode tube + (assuming you're using a CRT monitor, of course). + */ + inline Vector3 crossProduct( const Vector3& rkVector ) const + { + Vector3 kCross; + + kCross.x = y * rkVector.z - z * rkVector.y; + kCross.y = z * rkVector.x - x * rkVector.z; + kCross.z = x * rkVector.y - y * rkVector.x; + + return kCross; + } + + /** Returns a vector at a point half way between this and the passed + in vector. + */ + inline Vector3 midPoint( const Vector3& vec ) const + { + return Vector3( + ( x + vec.x ) * 0.5, + ( y + vec.y ) * 0.5, + ( z + vec.z ) * 0.5 ); + } + + /** Returns true if the vector's scalar components are all greater + that the ones of the vector it is compared against. + */ + inline bool operator < ( const Vector3& rhs ) const + { + if( x < rhs.x && y < rhs.y && z < rhs.z ) + return true; + return false; + } + + /** Returns true if the vector's scalar components are all smaller + that the ones of the vector it is compared against. + */ + inline bool operator > ( const Vector3& rhs ) const + { + if( x > rhs.x && y > rhs.y && z > rhs.z ) + return true; + return false; + } + + /** Sets this vector's components to the minimum of its own and the + ones of the passed in vector. + @remarks + 'Minimum' in this case means the combination of the lowest + value of x, y and z from both vectors. Lowest is taken just + numerically, not magnitude, so -1 < 0. + */ + inline void makeFloor( const Vector3& cmp ) + { + if( cmp.x < x ) x = cmp.x; + if( cmp.y < y ) y = cmp.y; + if( cmp.z < z ) z = cmp.z; + } + + /** Sets this vector's components to the maximum of its own and the + ones of the passed in vector. + @remarks + 'Maximum' in this case means the combination of the highest + value of x, y and z from both vectors. Highest is taken just + numerically, not magnitude, so 1 > -3. + */ + inline void makeCeil( const Vector3& cmp ) + { + if( cmp.x > x ) x = cmp.x; + if( cmp.y > y ) y = cmp.y; + if( cmp.z > z ) z = cmp.z; + } + + /** Generates a vector perpendicular to this vector (eg an 'up' vector). + @remarks + This method will return a vector which is perpendicular to this + vector. There are an infinite number of possibilities but this + method will guarantee to generate one of them. If you need more + control you should use the Quaternion class. + */ + inline Vector3 perpendicular(void) const + { + static const float fSquareZero = 1e-06 * 1e-06; + + Vector3 perp = this->crossProduct( Vector3::UNIT_X ); + + // Check length + if( perp.squaredLength() < fSquareZero ) + { + /* This vector is the Y axis multiplied by a scalar, so we have + to use another axis. + */ + perp = this->crossProduct( Vector3::UNIT_Y ); + } + + return perp; + } + /** Generates a new random vector which deviates from this vector by a + given angle in a random direction. + @remarks + This method assumes that the random number generator has already + been seeded appropriately. + @param + angle The angle at which to deviate in radians + @param + up Any vector perpendicular to this one (which could generated + by cross-product of this vector and any other non-colinear + vector). If you choose not to provide this the function will + derive one on it's own, however if you provide one yourself the + function will be faster (this allows you to reuse up vectors if + you call this method more than once) + @returns + A random vector which deviates from this vector by angle. This + vector will not be normalised, normalise it if you wish + afterwards. + */ + /* + inline Vector3 randomDeviant( + float angle, + const Vector3& up = Vector3::ZERO ) const + { + Vector3 newUp; + + if (up == Vector3::ZERO) + { + // Generate an up vector + newUp = this->perpendicular(); + } + else + { + newUp = up; + } + + // Rotate up vector by random amount around this + Quaternion q; + q.FromAngleAxis( random() * 2.*M_PI, *this ); + newUp = q * newUp; + + // Finally rotate this by given angle around randomised up + q.FromAngleAxis( angle, newUp ); + return q * (*this); + } + */ + + /** Gets the shortest arc quaternion to rotate this vector to the destination + vector. + @remarks + Don't call this if you think the dest vector can be close to the inverse + of this vector, since then ANY axis of rotation is ok. + */ + Quaternion getRotationTo(const Vector3& dest) const + { + // Based on Stan Melax's article in Game Programming Gems + Quaternion q; + // Copy, since cannot modify local + Vector3 v0 = *this; + Vector3 v1 = dest; + v0.normalise(); + v1.normalise(); + + Vector3 c = v0.crossProduct(v1); + + // NB if the crossProduct approaches zero, we get unstable because ANY axis will do + // when v0 == -v1 + float d = v0.dotProduct(v1); + // If dot == 1, vectors are the same + if (d >= 1.0f) + { + return Quaternion::IDENTITY; + } + float s = sqrt( (1+d)*2 ); + float invs = 1 / s; + + + q.x = c.x * invs; + q.y = c.y * invs; + q.z = c.z * invs; + q.w = s * 0.5; + return q; + } + + /** Returns true if this vector is zero length. */ + inline bool isZeroLength(void) const + { + float sqlen = (x * x) + (y * y) + (z * z); + return (sqlen < (1e-06 * 1e-06)); + + } + + /** As normalise, except that this vector is unaffected and the + normalised vector is returned as a copy. */ + inline Vector3 normalisedCopy(void) const + { + Vector3 ret = *this; + ret.normalise(); + return ret; + } + + /** Calculates a reflection vector to the plane with the given normal . + @remarks NB assumes 'this' is pointing AWAY FROM the plane, invert if it is not. + */ + inline Vector3 reflect(const Vector3& normal) + { + return Vector3( ( 2 * this->dotProduct(normal) * normal ) - *this ); + } + + // special points + static const Vector3 ZERO; + static const Vector3 UNIT_X; + static const Vector3 UNIT_Y; + static const Vector3 UNIT_Z; + static const Vector3 UNIT_SCALE; + + /** Function for writing to a stream. + */ + inline friend std::ostream& operator << + ( std::ostream& o, const Vector3& v ) + { + o << "[" << v.x << ", " << v.y << ", " << v.z << "]"; + return o; + } +}; + +#endif diff --git a/src/Viewer.cpp b/src/Viewer.cpp new file mode 100644 index 0000000..2c5200d --- /dev/null +++ b/src/Viewer.cpp @@ -0,0 +1,382 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#include "Viewer.h" +//#include "Density.h" +#include "OpenGL.h" +#include "Color.h" +#include "Scene.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +Viewer::Viewer(QWidget *parent) + : QGLWidget(parent,0,0), mTrackMode(TM_NO_TRACK), mWireFrame(false), mpScene(0), pDensity(NULL), DW_AXES(false), modeSplit(false), fondBlanc(false), modeFusion(false), numViewPort(1), border(true),isRotatePossible(true) +{ + mCamera = new Camera(); +} + +Viewer::~Viewer() +{ +} + +void Viewer::attachScene(Scene* pScene, Scene* pScene2) +{ + mpScene = pScene; + mpScene2 = pScene2; +} + +void Viewer::attachDensity(Density * _pDensity) +{ + pDensity = _pDensity ; +} + +void Viewer::freeDensity() +{ + if (pDensity!=NULL) + { + delete pDensity; + } + pDensity=NULL; +} + +void Viewer::initializeGL() +{ + // set defaults parameters + //met le fond en noir transparent + glClearColor(0., 0., 0., 0.0); + glEnable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + glCullFace(GL_BACK); + glFrontFace(GL_CCW); + glDisable(GL_COLOR_MATERIAL); + glEnable(GL_NORMALIZE); + glDisable(GL_BLEND); + //activation et test de transparence + glEnable(GL_ALPHA_TEST); + glAlphaFunc(GL_GREATER, 0.0f); + glDisable(GL_TEXTURE_1D); + glDisable(GL_TEXTURE_2D); + glDisable(GL_TEXTURE_3D); + emit glInitialized(); +} + + +void Viewer::setWireframeEnabled(bool on) +{ + mWireFrame = on; + updateGL(); +} +bool Viewer::isWireframeEnabled(void) const +{ + return mWireFrame; +} + +void Viewer::resizeGL(int width, int height) +{ + mWidth = width; + mHeight = height; +} + +void Viewer::paintGL() +{ + int vp1X, vp1Y, vp1W, vp1H, + vp2X, vp2Y, vp2W, vp2H; +// Choix du mode Split Screen + if (modeSplit) + { + vp1X=0; vp1Y=0; + vp1W=mWidth/2; vp1H=mHeight; + + vp2X=mWidth/2; vp2Y=0; + vp2W=mWidth/2; vp2H=mHeight; + } +// Choix du mode Fusion + else if (modeFusion) + { + vp1X=0; vp1Y=0; + vp1W=mWidth; vp1H=mHeight; + + vp2X=0; vp2Y=0; + vp2W=mWidth; vp2H=mHeight; + } +// Choix du mode Normal + else + { + vp1X=0; vp1Y=0; + vp1W=mWidth; vp1H=mHeight; + + vp2X=0; vp2Y=0; + vp2W=mWidth; vp2H=mHeight; + } + mCamera->setViewportSize(vp1X,vp1Y,vp1W, vp1H); + + // Clear buffers + glDisable(GL_COLOR_MATERIAL); + glClearStencil(0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + + if (modeFusion) glEnable (GL_SCISSOR_TEST); + + if(mWireFrame) + { + glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); + glDisable(GL_LIGHTING); + } + else + { + glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); + glEnable(GL_LIGHTING); + } + + Timer t; + t.start(); + + mCamera->renderGLStates(); + glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); + glColor4f(1., 1., 1. ,1.); + + if ((modeSplit| modeFusion) | numViewPort==1) + { + if (glIsEnabled(GL_SCISSOR_TEST)) glScissor (0, 0, mWidth/2, mHeight); + mpScene->render(); + } + + + // Draw world axis + if (DW_AXES) drawAxes(1.0); + + if ((modeSplit| modeFusion) & numViewPort==1) drawSelectionVP(); + + if (pDensity!=NULL) + pDensity->drawDensity(mCamera); + + if ((modeSplit| modeFusion) | numViewPort==2) + { + if (glIsEnabled(GL_SCISSOR_TEST)) glScissor (mWidth/2, 0, mWidth/2, mHeight); + glViewport(vp2X,vp2Y,vp2W, vp2H); + mpScene2->render(); + if (DW_AXES) drawAxes(1.0); + if ((modeSplit| modeFusion) & numViewPort==2) drawSelectionVP(); + } + + glFinish(); + + t.stop(); + float fps=1./t.value(); + QString thetext = QString("FPS : %1").arg(fps); + emit fpsChanged(thetext); + if (modeFusion) glDisable (GL_SCISSOR_TEST); +} + +void Viewer::mousePressEvent ( QMouseEvent * e ) +{ + switch(e->button()) + { + case Qt::LeftButton: + mTrackMode = TM_QUAKE_MOVE_XY;//deplacement vertical/horizontal + break; + case Qt::MidButton: + mTrackMode = TM_QUAKE_WALK;//zoom + break; + case Qt::RightButton: + mTrackMode = TM_QUAKE_ROTATE; + break; + default: + break; + } + mMouseX = e->x(); + mMouseY = e->y(); +} + +void Viewer::mouseReleaseEvent ( QMouseEvent * ) +{ + mTrackMode = TM_NO_TRACK; +} + +void Viewer::mouseMoveEvent ( QMouseEvent * e ) +{ + + if(mTrackMode != TM_NO_TRACK) + { + float dx = (float)(e->x() - mMouseX) / (float)mCamera->getWidth(); + float dy = - ((float)(e->y() - mMouseY) / (float)mCamera->getHeight()); + + switch(mTrackMode) + { + case TM_QUAKE_WALK : + //mCamera->localTranslate(Vector3(0, 0, dy*10)); + mCamera->polarZoom( dy*10); + break; + case TM_QUAKE_MOVE_XY : + //mCamera->localTranslate(Vector3(dx*10, dy*10, 0)); + mCamera->polarRotate(dx*M_PI, dy*M_PI); + break; + case TM_QUAKE_ROTATE : + //mCamera->localRotate(dx*M_PI, dy*M_PI); + if(isRotatePossible){ + mpScene->rotateObjet( dx*M_PI,dy*M_PI,mCamera->getValCam()); + mpScene2->rotateObjet( dx*M_PI,dy*M_PI,mCamera->getValCam()); + } + break; + default: + break; + } + + mMouseX = e->x(); + mMouseY = e->y(); + + } + updateGL(); +} +void Viewer::keyPressEvent ( QKeyEvent * e ) +{ + switch( e->key() ) + { + default:; + } + updateGL(); +} + + + +void Viewer::drawAxes(float length) +{ + static GLUquadricObj *cylindre = gluNewQuadric(); + + glPushAttrib(GL_ALL_ATTRIB_BITS); + + glDisable(GL_LIGHTING); + //glEnable(GL_LIGHTING); + //mpScene->activateLights(); + + glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,Color::WHITE); + glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,80.0); + glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); + glEnable(GL_COLOR_MATERIAL); + + // X axis + glColor3fv(Color::RED); + glPushMatrix(); + glRotatef(90,0.0,1.0,0.0); + gluCylinder(cylindre, length/50.0, length/50.0, 0.8*length, 10, 10); + glTranslatef(0.0,0.0,0.8*length); + gluCylinder(cylindre, length/30.0, 0.0, 0.2*length, 10, 10); + glPopMatrix(); + + // Y axis + glColor3fv(Color::GREEN); + glPushMatrix(); + glRotatef(-90,1.0,0.0,0.0); + gluCylinder(cylindre, length/50.0, length/50.0, 0.8*length, 10, 10); + glTranslatef(0.0,0.0,0.8*length); + gluCylinder(cylindre, length/30.0, 0.0, 0.2*length, 10, 10); + glPopMatrix(); + + // Z axis + glColor3fv(Color::BLUE); + glPushMatrix(); + gluCylinder(cylindre, length/50.0, length/50.0, 0.8*length, 10, 10); + glTranslatef(0.0,0.0,0.8*length); + gluCylinder(cylindre, length/30.0, 0.0, 0.2*length, 10, 10); + glPopMatrix(); + + glPopAttrib(); +} + +void Viewer::setAxes() +{ + DW_AXES= !DW_AXES ; +} + +Camera *Viewer::getCamera(void) const{ + return mCamera; +} + +void Viewer::setCamera(Camera *camera){ + mCamera=camera; + updateGL(); +} + +void Viewer::maj(){ + mCamera->reinit(mpScene->getCenter()[0],mpScene->getCenter()[1],mpScene->getCenter()[2]); + updateGL(); +} + +void Viewer::changeMode(int mode){ + switch(mode) + { + case 0: + modeSplit=false; + modeFusion=false; + break; + case 1: + modeSplit=true; + modeFusion=false; + break; + case 2: + modeSplit=false; + modeFusion=true; + break; + default:; + } +} + +void Viewer::modifAxes( bool b){ + DW_AXES = b; +} + +void Viewer::selectViewPort(int num){ + numViewPort=num; +} + +void Viewer::drawSelectionVP(){ + if (border) { + float decalage =0.; + if (modeFusion & numViewPort==1) decalage =-0.518; + if (modeFusion & numViewPort==2) decalage =0.515; + glPushAttrib(GL_ALL_ATTRIB_BITS); + glPushMatrix(); + glLoadIdentity(); + glDisable(GL_LIGHTING); + glBegin(GL_LINE_LOOP); + glColor3ub(255,0,0); + glVertex3d(-0.515+decalage,-0.69,-1.); + glColor3ub(255,255,0); + glVertex3d(-0.515+decalage,0.69,-1.); + glColor3ub(0,0,255); + glVertex3d(0.515+decalage,0.69,-1.); + glColor3ub(255,255,0); + glVertex3d(0.515+decalage,-0.69,-1.); + glEnd(); + glPopMatrix(); + glPopAttrib(); + } +} + +void Viewer::borderChange() +{ + border=!border; +} + +int Viewer::getViewport() +{ + return numViewPort; +} + +void Viewer::setRotatePossible(bool b){ + isRotatePossible = b; +} + diff --git a/src/Viewer.h b/src/Viewer.h new file mode 100644 index 0000000..2a41b6b --- /dev/null +++ b/src/Viewer.h @@ -0,0 +1,137 @@ + +/*************************************************************************** + * Copyright (C) 2005 by Gael GUENNEBAUD * + * guenneba@irit.fr * + * * + ***************************************************************************/ + +#ifndef _Viewer_h_ +#define _Viewer_h_ + + +#include "OpenGL.h" +#include "Camera.h" +#include "Density.h" +#include "Timer.h" + +#include +#include +#include +#include + +#include + +class Scene; +class Light; +class Entity; + +class QMouseEvent; +class QWheelEvent; +class QKeyEvent; + + +/** Classe principale representant la fenetre OpenGL. C'est ici que l'on doit creer la scene, les objets, les lumieres, la camera ... C'est aussi ici que doivent etre gere les evenements souris et claviers + @version 0.1 + @author Gangster + @date Juin 2007 + \nosubgrouping + */ + +class Viewer : public QGLWidget +{ +Q_OBJECT + +public: + + Viewer(QWidget *parent = 0); + virtual ~Viewer(); + + void setAxes(); + + void attachScene(Scene* pScene, Scene* pScene2); + void attachDensity(Density * _pDensity); + void freeDensity(); + + void setWireframeEnabled(bool on); + bool isWireframeEnabled(void) const; + + Camera *getCamera(void) const; + void setCamera(Camera *camera); + void maj(); + void changeMode(int mode); + void modifAxes(bool b); + void selectViewPort(int num); + void borderChange(void); + int getViewport(); + void setRotatePossible(bool b); +signals: + void glInitialized(void); + void fpsChanged(const QString &); +protected: + + /** Methode appelee automatiquement par QT apres la creation du constext OpenGL. + C'est ici que l'on peut mettre a jour les etats qui ne seront jamais modifies par la suite. + */ + virtual void initializeGL (); + + /** Methode appelee automatiquement par QT lorsque le contexte OpenGL change de taille. + Cad, lorsque la fenetre change de taille ! + Cette methode doit entre autre appeler la methode createScene. + */ + virtual void resizeGL ( int width, int height ); + + /** Methode appelee automatiquement par QT lorsque la fenetre OpenGL doit etre redessinee. + Pour forcer l'appel de cette fonction par QT, utilisez la methode (qui est aussi un slot) QGLWidget::updateGL(). + */ + virtual void paintGL (); + + //-------------------------------------------------------------------------------- + // Les methodes suivantes permettent gerer les evenements recus par le widget. + virtual void mousePressEvent ( QMouseEvent * e ); + virtual void mouseReleaseEvent ( QMouseEvent * e ); + virtual void mouseMoveEvent ( QMouseEvent * e ); + //virtual void mouseDoubleClickEvent ( QMouseEvent * e ); + //virtual void wheelEvent ( QWheelEvent * e ); + virtual void keyPressEvent ( QKeyEvent * e ); + //virtual void keyReleaseEvent ( QKeyEvent * e ); + //-------------------------------------------------------------------------------- + + +private: + + /** Methode tracant un repere orthonorme au centre de la scene (en 0,0,0). + @param length longeur des axes + */ + void drawAxes(float length = 1.0); + void drawSelectionVP(); + /** Enum representant le mode de navigation courrant. + */ + enum TrackMode {TM_NO_TRACK=0, TM_POLAR_ROTATE, TM_POLAR_ZOOM, TM_QUAKE_ROTATE, TM_QUAKE_WALK, TM_QUAKE_MOVE_XY}; + + /** Mode de navigation courrant. + */ + TrackMode mTrackMode; + + bool mWireFrame; + + + /** Position precedente de la souris. + */ + int mMouseX, mMouseY; + + Camera *mCamera; + Scene* mpScene; + Scene* mpScene2; + Density * pDensity; + + int mWidth, mHeight; + bool DW_AXES ; + bool modeSplit; + bool fondBlanc; + bool modeFusion; + int numViewPort; + bool border; + bool isRotatePossible; +}; + +#endif diff --git a/src/W_Density.ui b/src/W_Density.ui new file mode 100644 index 0000000..d56d4d1 --- /dev/null +++ b/src/W_Density.ui @@ -0,0 +1,56 @@ + + DensityWindow + + + + 0 + 0 + 495 + 407 + + + + Density Viewer + + + + + + 0 + 0 + 495 + 25 + + + + + + + true + + + true + + + DensiteTex3D + + + + + Afficher la Densité + + + + + Effacer la Densité + + + + + Exit + + + + + + diff --git a/src/W_Main.ui b/src/W_Main.ui new file mode 100644 index 0000000..7fb6208 --- /dev/null +++ b/src/W_Main.ui @@ -0,0 +1,504 @@ + + MyWindow + + + + 0 + 0 + 831 + 639 + + + + Billboard Clouds - For Extreme Model Simplification + + + :/icones/filesystems/exec.png + + + + 48 + 48 + + + + + + + 0 + 0 + 831 + 25 + + + + + Affichage + + + + false + + + Viewport + + + + + + + + + + + + + + + + + + + + + + + + Densité + + + + + + + + Fichier + + + + + + + + + + + false + + + Billboard Cloud + + + + + + + + + + + + + + + Qt::NonModal + + + + 8 + + + + 13 + + + Qt::LeftToRight + + + true + + + Qt::Horizontal + + + + 32 + 32 + + + + Qt::ToolButtonIconOnly + + + 4 + + + + + + + + + + + + + + + + + + + + + + :/icones/filesystems/folder.png + + + Charger un Maillage + + + Ctrl+O + + + + + false + + + :/icones/filesystems/desktop.png + + + Charger une Texture + + + Shift+O + + + + + :/icones/actions/stop.png + + + Quitter + + + Ctrl+Q + + + QAction::QuitRole + + + + + true + + + :/icones/actions/viewmag+.png + + + Afficher/Cacher le Repère + + + Ctrl+R + + + + + :/icones/actions/reload.png + + + Vider la Scène + + + Del + + + + + :/icones/apps/safari1.png + + + Reset Caméra + + + Home + + + + + Crée un Billboard + + + + + Afficher un Billboard + + + Ctrl+B + + + + + test + + + + + true + + + :/icones/apps/xeyes.png + + + Mode Filaire/Plein + + + Ctrl+W + + + + + true + + + :/icones/mimetypes/txt.png + + + Afficher/Cacher les FPS + + + Ctrl+F + + + + + true + + + true + + + Activer/Désactiver VBO + + + Shift+V + + + + + true + + + true + + + Gauche + + + + + true + + + Droite + + + + + true + + + Mode Fusion + + + + + false + + + :/icones/actions/billboard.png + + + Créer un Billboard + + + Shift+B + + + + + false + + + :/icones/actions/bbc.png + + + Créer un Billboard Cloud + + + Ctrl+B + + + + + Charger + + + + + true + + + true + + + :/icones/mimetypes/unknown.png + + + Informations Objet + + + Ctrl+I + + + + + true + + + true + + + :/icones/actions/back.png + + + Gauche + + + Left + + + + + true + + + :/icones/actions/forward.png + + + Droite + + + Right + + + + + true + + + false + + + Mode Fusion + + + 3 + + + + + true + + + true + + + Mode Normal + + + 1 + + + + + :/icones/apps/densite.png + + + Afficher la Densité + + + Ctrl+D + + + + + true + + + false + + + Mode SplitScreen + + + 2 + + + + + true + + + true + + + Densité Texture 3D + + + + + false + + + :/icones/devices/3floppy_unmount.png + + + Sauvegarder + + + Ctrl+S + + + + + true + + + true + + + :/icones/mimetypes/image.png + + + Cadre Fenêtre + + + Space + + + + + true + + + Boite Englobante + + + + + + + + diff --git a/src/application.qrc b/src/application.qrc new file mode 100644 index 0000000..31efdc4 --- /dev/null +++ b/src/application.qrc @@ -0,0 +1,24 @@ + + + icones/actions/back.png + icones/actions/bbc.png + icones/actions/billboard.png + icones/actions/forward.png + icones/actions/reload.png + icones/actions/stop.png + icones/actions/viewmag+.png + icones/apps/densite.png + icones/apps/safari1.png + icones/apps/xeyes.png + icones/devices/3floppy_unmount.png + icones/filesystems/desktop.png + icones/filesystems/exec.png + icones/filesystems/folder.png + icones/filesystems/folder_home.png + icones/mimetypes/image.png + icones/mimetypes/sound.png + icones/mimetypes/txt.png + icones/mimetypes/unknown.png + icones/splashlogo.png + + diff --git a/src/icones/actions/back.png b/src/icones/actions/back.png new file mode 100644 index 0000000000000000000000000000000000000000..2623a13a42d8e1761f3ff579c8048825d48e75c9 GIT binary patch literal 7028 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 literal 0 HcmV?d00001 diff --git a/src/icones/actions/bbc.png b/src/icones/actions/bbc.png new file mode 100644 index 0000000000000000000000000000000000000000..001d174d49ab173a2dd562cde49a0ade70e51423 GIT binary patch literal 9833 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 D`6F7K literal 0 HcmV?d00001 diff --git a/src/icones/actions/editpaste.png b/src/icones/actions/editpaste.png new file mode 100644 index 0000000000000000000000000000000000000000..18657c2438ea23c1c152fe178a7606580d507a5a GIT binary patch literal 11856 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 LXvmk#ng{+5rE7!^ literal 0 HcmV?d00001 diff --git a/src/icones/actions/gohome.png b/src/icones/actions/gohome.png new file mode 100644 index 0000000000000000000000000000000000000000..f6ebfe41fb56b4126b3ebd20143fdac6f476e255 GIT binary patch literal 14580 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 literal 0 HcmV?d00001 diff --git a/src/icones/actions/openterm.png b/src/icones/actions/openterm.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3869e5938c4722cebe0f57a1a4c876b2d608fa GIT binary patch literal 8328 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 Zrr_w8x@`d<^j`zOeg}8^$9B}@{{pi$p}GJ7 literal 0 HcmV?d00001 diff --git a/src/icones/actions/reload.png b/src/icones/actions/reload.png new file mode 100644 index 0000000000000000000000000000000000000000..77c4fd5112799d69b76dcfdb1521e81c5909abba GIT binary patch literal 15054 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 AjQ{`u literal 0 HcmV?d00001 diff --git a/src/icones/actions/stop.png b/src/icones/actions/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..efcc7fba5c8d494f64db9372814a6c7e662ffdac GIT binary patch literal 15974 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 CCr8i# literal 0 HcmV?d00001 diff --git a/src/icones/actions/up.png b/src/icones/actions/up.png new file mode 100644 index 0000000000000000000000000000000000000000..42bcc56f985149d9f3aeb7a903b4a63f80929205 GIT binary patch literal 6968 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 literal 0 HcmV?d00001 diff --git a/src/icones/actions/viewmag+.png b/src/icones/actions/viewmag+.png new file mode 100644 index 0000000000000000000000000000000000000000..3282e3d2661a595676e88551b7964e42a2411159 GIT binary patch literal 6136 zcmVpbP)|RMBCA$y1 zCAspFF(+8cmCgZ&iT&i27I>s|GlVR{t%nWl-0O;fFflT z9Ws0W55TuHF&=dM9|833Z*pU1U&b z0DS5Rgz&Edcv3xeY4Rop&{O0w9#-QdW);}XAOq~Z;r7#9dEQT4LsiwcD^K230JDnkZ| zYWq0&8C*aI85aQq{M7xk_ud*T3^*uk?&CJ#4NipHPtkD%9|#~j&g&Evn!DIegP*aC z0-X7YOMkSrCo1{SSU(eFG!8mtdVFXXgA%8yjS#OttpD+QE4#XTEEHpW1$djEeM$&E z06@0Lamt|i0$Xu8jt402eDe?07k64w$;WFmhqlQ;f~0j|p8z4_*7J)%;zy8=Y}8No)O zknj^ojD-LYr30e(g5dD=-ZAr|O0dbXT+VYR4!ij|zz};EzV|5uaE|f~1?*#pS>8Z^ z{`vp##vknK?pAF<4ivs^tgx;R4UZ9!pfHHiMoDPAiN3i#|6unsuh)h$mdm@`fkQVJ z0kyYZElhrjF5pb?1AwjU#pQVf#rFB%J@xAcEi6J)TTXy#X3u{ zK+6^W-HCVZES5BVd<%Gk*TVe|pPT%Y0A$8_T@|5^G9Itu0Xye^|I}9xhQ?cH6gr6k z#&WZeO+|#*5mW-eM?kVoWlW?BlQ@aXZ=X1mLhv+K0992xIui->b)OuiDA?@7Fog?j zoBy@v4LH1R(|$ zq_&l0Um_F+L&^E?`>HQA5uOD~?2fhA=~}@0Lnc784>(PL;;V1|T4wurx`Er?<@FrV z8jYlUK1kk4sx~l)QlbqhwX~jx^4|Q5D}|D9h24ztCIZF&3ky>nRDfNSM*%kD^DZv% zx%s`P?>LZ_ziEr(Mg^KwL;xYcfJjpAk}}n|M77rhCehS?KCtKXQVph=2JQ>@`A%nD z;IT0L4dF5es1{17t83hE|*Xc;o9$6mW-+ZwN{1mv2 z9KiUFBb@~BFu*1Z7ZKpTv-|R!2IEqaB&4;>@-5R6cmhXIMw?cRK~n1rzSUC1TA(`z zf5WQHz$$M8_k{aC+A#q31mmFDj7tq+3qvP9cR<#ZR4cX{0v(!TQU)0e$|$1(kz~6_ z10eWTpd|`@Y4gL^|K&jbL<2Yh+=hifc}KZZ3V0Zx8(|g!?mD}pnC)s8YmhSE;97Bg z5JX0VW+8|&$^_R{n_+7p-p-`V4?oFweZ^Xy5mvbj+#W`kM>_(*Dl!2ufUpGgQ#`R_ zXUpvLNv9nkuI5^95@}s@&??(lB_McKpl)P-`0jUhIwzV4Zvpp)`%H930TTcjEUE;+ z{+YZCY)kuVTC{?}*S>C@c&nt93A;VoD3LWk7CKI#%?Fq-3~jr8sZoQOa1aJTisKWV z0PuhSc?=5xjGfszDvAH5*Vqv}EA19R)ci4sAaNu}t0r+H<>_#b;JPCl3=fUg-|`XO z0QQ6$c%VZH5c&{Ygk3Z${e!`E6;=yDpgcQ1=^*(VV89p&4OEd61O)gY90Cl!6{wc^ z!5S^xxoxQ8AzTJ-3!}iHbq8RTDS}4h5db@9Tz6nwyPpQ_D$quy8!|z>oe>kpe?bKz z>2eODrmwF(-9p!Lq3~V*;6SZ0FU$g6SO`)cE3UT!%3%aBECGt)X?XQH-)(QGq!IX5 zqJ`+$4-FBK1cyivBxuqg!a!(JEr+y&-8wEKQ+zOZ{!_l%G59tXt@U+fw(|6WU3VVHcY%cv_Wc7(B6?w;Pe)lGEg~kJ z4H7X%OOh>Yxsz{6AVOOW5yyqzO@&$&p$1`cBvR-)0+6yIZoxqBa{DH4ojZN*^SkyO z$ah6nDPJoT2GAH3f<{mnV}!O*0fN9*N!PfQGzqk59mpCdh#OtqG-q= z1#ujqtv!(6REUPvh_lS)bq5gs)G{DsQvhsiENm<+-k+VDExfvY8}|)5`KXJlA_Sno zhy)=HcV%{Up*rii*A~tmymHVX#{k`w7^Xi`nz8T^X=`AID$!1kpeYf=?r21+BLJeb z_zleup9A-;YQ=$Jw$RHkntpO&rbreR3w3YKTV9-9T1Zmt3|?CJyx1=9Mdo!g!fu8U zt+WbcjSGZ<&>@&-T#~bqP63d%ESVLV-+H#NSQ=BdrpgkEH)y#+ZhreKL(_JkP$`7M zz(V(x`bcZcsK#kdk!KHOl~*EigBai>11uzY<#q24ODcnRWAklnw6(Is!fqP@6f_n+ z*ZP)oL56U3aH79mUg@Hh{7}4Co!2<(ojKX8r!!1p<9l(|Mz!S=r4s;%hPK1tqf@fC zv9ZZuW3x0E^y|dy6=4HflX3gzdR9W??ZkKo8=KLKPD7)yqTv)B9i6T>&D62WFS_+~ zuOO_6>{2ZJdM8~V69(=c6&W2HZzm{f<67y+Xq7w^xq6|YGQMsf8W#j5IlpJFHW~&^ zL5FQb46wXCc>Bt^>2sTR4II#2aSUkI19UbP{_46qKnj3KIM;eCTC1IU7-w}`ds)Vh zpzp%{7X_u(j0*|^Vk{k1v7tw+C~@v>UhU6M!`!)-b+lqDTiYsQX&Y*?9+26J=d@}yMkR3^1yu9cBpp51zd6{gljzmj&j2jZbknLHcR8N>7fFws1}GP zMYT_umT15v&Is!$-m9ePq*&SJ{X84BJUw^%N+0dfLq+daMpk>lOKGS?9oK#sMXKzIv#PujDuZO787h;Oy2A>F*OK0pDjDA2yQ zMzOrjE5uv8x!*(B54?~%uTC_Co{}Sq03nOV5-;re@|$`-JVmh=ceFY(={37jSYBHp za$PkTcX!?FN}mCOsLLHh6Yjj?wV~0Ph2fo%>0#()FRRRkEz`g35CEA}6&Y8!IAm~n zi7$Ui{e7r{Yg@cc?dHd?OYd#Hl=ZYq7V9R``IdEnBOn1|c zV!I}NnVh8h@&N`T4eR}}x$P}(vv^^tmS-`uJF=S$GTUDP-qZn4hg-<}V6k_yq_ zNCtR`+50R<)66Z8wl0E5gXmi9ulB8W`31k=7yP`R^YhVKh#ui{)-U)4KNs}4qm_17 zid7R77DiUGPapJvyMbp304mpxbr1mXIMFmm2aU(~d*n-+YeRmoZkq|JqlQr5d|y3l zENql=Z8zg)+>94JTJL--G}*>t`%JE$o@Yveb#ePozj4J8M!B6C-VIgq?e(7|)jnBz zN*$pH1{)inYcxv-YL#)XU$-@WLxZx-(RW6#7JRgqX=L4umkDgo_HA#?>f5djS~QBB zJ6&2Xtxa8XGLBVA8kJcZ++NrXSgdXdm$pFvtPlwc2m0S+1lQL5j z7W)?+)5xymSF@gNEVO9Rz7<%ajb$v+MjLH(V0oG4e66tR7@d)=7gbv)I$U!+W4XW= z$?+=J5CrQf=r{nG}qBL zRG1(Vg%a)CE4ih@N_Kdzu&7d5MTH{IPgw@WxPxV0iB8OZVx-)81;8UzL1-Z4(bRZ~ zZP=;kAD*=BcGoh2Xk&?vQ(;%b4XVqzDni->QlL@qtXa}`< zp^)VGN<7Q+K#qSy7cX%YfPHMI&SH|O=v*xjFOzDVayXmYCWFs1Q{2Wl^|%St7`!-8 z%?3$UP#JBsu{^uICh#raGTP|Y(2FSBuXZhM77QhhauUe$4Z3)R(-D+^O_RT46+NYY zwc7YJ0HB`Z8w?R$(vTsb!3i{9rUq!b7e+4i)^mQ|%leL=^|QX?JAo58K_+m5OtRX6 z9oT{6XQCC15{#MIUeG>&#uZ=_50T*nX8=VHU#Gz{q4|d|uKQIZ_KiQ5syfVZ%7PDM z>0%Y1A9I%fM4qd3FLc#=RtkY*ENSlywR_dt8D@^xv>NuN>h8w(yZ#=7Vu*i*@EUIu zPSd%Y8b8AWYTsV&z(q43GVG#?@^du;3X2>H7Z=EIKfmV|&TKo`zv_r1I!TbFlcTNS z7TN$9eC3V&&jc5XK!CUBNBjR<=?nn}Zb}sBqQLjLLQoB+6bh@NjwE*<`2-Psq@h<;<_Bs#j+zA&3YTWsWd(W} z<8zEst`(PWqqmuvZ=|5q6gCcdy2zlT zexkGiu&~I{!)C_VOfMN0ILAd+k_H#wZ2q;rpeDlW#?5_lNQM^Z;WC#{Y~pT)xx{%u zbC6!Zp@|PUekcDAjrTjIfTZPogzvPbEov-s$$bObXAJ15eu&>MP-T^%b?>Q39&biN z9`+G+R86XHHmg=q9am+WCa{SeMv?E0W0|UH1OMhaFWN}4;b&Ui|V*33pP8*bA>rT^ALORnO_G4A9MbR9_LXeT3S$T z{VScCZ?fjw3dhu6x*uATXNtkQ6bI;Kkt(415_i&#UKa$v)C3$|W`YOe8!Ua;ffY>h z9LKzmbh1h`TUcco&>Ua~1-jP>!6z~UNgtw2Q9S^ZN#^yc3KifvDpdSmV1QGVdEFw% zDhkC8wvwl7-4Lwr6s(VTN@ZS;XB7@JK$iSEBG`ZcKudhLx?VEm))j%h0nI-Wwf(Vh zZ}5FLHl^gHl2sS2w4kFm706K0PBk2<^b?95QNvI{L2V#768960`n0O z+&lo*3Bk<-U|kU0TmaSq!OaHX6Gw3K0r=$+>}@`^k#m9{VF{;jN!hSM;TOmqMi*yR zZ*CX(*eZCFItpEpUv(QdxdJ|p3VzHIU@p(&ukdtTuK7F)$blY5pWdLBT{67B7H1U<(O3XZ24^YZ24^YZ24?iv-~p%!$U|P1aX}J0000< KMNUMnLSTZ>{Z4}b literal 0 HcmV?d00001 diff --git a/src/icones/actions/viewmag-.png b/src/icones/actions/viewmag-.png new file mode 100644 index 0000000000000000000000000000000000000000..58446bbeca508478fe1fc446d92a0f22a69a94a3 GIT binary patch literal 5826 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 CCr8i# literal 0 HcmV?d00001 diff --git a/src/icones/apps/densite.png b/src/icones/apps/densite.png new file mode 100644 index 0000000000000000000000000000000000000000..871af438286d0c9b5c240f1147d2e9aeb307480b GIT binary patch literal 7679 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 literal 0 HcmV?d00001 diff --git a/src/icones/apps/gimp.png b/src/icones/apps/gimp.png new file mode 100644 index 0000000000000000000000000000000000000000..f466db8c9a89136e4901febfd0968a7d1f38dae2 GIT binary patch literal 10769 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 literal 0 HcmV?d00001 diff --git a/src/icones/apps/k3b.png b/src/icones/apps/k3b.png new file mode 100644 index 0000000000000000000000000000000000000000..4aaca484fc1f7edaf363dc8820735d80d13ca8e8 GIT binary patch literal 22565 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 G>Hh$tL!V;+ literal 0 HcmV?d00001 diff --git a/src/icones/apps/kcontrol.png b/src/icones/apps/kcontrol.png new file mode 100644 index 0000000000000000000000000000000000000000..0f7021b6d71a7d1c177b9409efb5d1463830208b GIT binary patch literal 15799 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

HWZ}ocT5rG&UKnC8U^O&U_2CWl zfEYx8t~&*$Kz@xTa8nV5WReY#tJfZZ?s3F_qzB#M z*&oun;vzD5_xQ~FzYRiPu-Z=wylEHs+UCAAv*%`UxWIOBZV!ov#5LGjwi@R=;Oi}!)gjViyM|S`i(e&9y_~|8;85pdj!Rh1>B_jJ} zs2kBJzjS9|pf7Uk#4M%c_RtGR#Q0aq85xb1jhj1diER*dL(T&P3W3tB_@QJaH2(_T zV)#%DaOe0n`16-l^NB;rH1$4)ONae65v7i`0}YEhX(G)mEmp?7r`Cw%LOg-Dg#y%K zB{4<*;;Us)SUF+UTX6xiB~B24p!H`eKhvq8O&u@%Qv)k9#E^yRx|92+Xcc3BFFtsb zL_e*88l*o^GSs(;*q+^#U%H*!T#XZZcf)3CL)#wFOr1)+NPz%O`sJqAsdIOV$e-{Z zkUkf0L9B<G;D{%tHE6q|+K21(x}Kql1h4OSJ==Z)h}*nQI|gw~ zQDaX%*5d(DI#(1BX^n^olS|ZXs*qJCE>s=RK*$mMif~$#h-3{=8U@|z0I2;T9T}Ov zV@C5Qq@CmBaLpMitJ54AKX)-rn-_ca=Ymt}vmiaNrv*3w%wzSqM27_0Ntv2jJ(ZD~VdHD@gtgTTHhL7odjN)tt8tJ`Un3jbTn-Ur%OC zu6>mr0g2!s!VgPC=&@SiO*Y;jG7VeEFkQGu1h?GX@P%oBeiKIWb9NaC_fdnKn-4@@ zw;dX_vrz4J6YMieo`*jq zyeJ!Jt&gf!&ih=huKh*suC-?9hHI;b?Fd(*@sN0(mG(NjnJ9tyVO|m

RDMVkR75 zDh%^$9AD@Xd}28&@S$bZE;WWRDFa}q2*~5#)(XdSi#xpg_2=FMSRs1OmcM+jclL7S z+FK&#Fjv#M1-2{hDapbGatt>NH^ae9FB*vVy5Z5ETEfW=Phd)ZlFfuLVjpnVSf#~w z6DJT1&?nhv>eKo)0TbcJ;KC!2JU~}qZPCB5L9!}WR5aLHNDaTs#O!I5q4g`!@ruJ;L*0Llzu8g12{}u+sx?c3HTH?2F)4WLe{t1; z5CK~cl=A@Zfm1e3y!#nuzTR&Dmve*5%;o*ncmXF7E1kEkBqAk^xtHSm! z4x?yS2Clf^TCJ9Es4|+LJib?2XsI;1*X%H<7PHN!-kt>D**ctsW#4*CsQ+fQ2I

    g1ed#2@gE~(H)pLqEoLZg8KBEBXfLM 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 literal 0 HcmV?d00001 diff --git a/src/icones/apps/kfind.png b/src/icones/apps/kfind.png new file mode 100644 index 0000000000000000000000000000000000000000..b04710ea88cba529d294669beb422d05c27bd1d5 GIT binary patch literal 15722 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 literal 0 HcmV?d00001 diff --git a/src/icones/apps/konsole.png b/src/icones/apps/konsole.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3869e5938c4722cebe0f57a1a4c876b2d608fa GIT binary patch literal 8328 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 Zrr_w8x@`d<^j`zOeg}8^$9B}@{{pi$p}GJ7 literal 0 HcmV?d00001 diff --git a/src/icones/apps/kopete.png b/src/icones/apps/kopete.png new file mode 100644 index 0000000000000000000000000000000000000000..2551e8aa04ba96376aeeae897b3e7cb558521e58 GIT binary patch literal 18160 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

    (2aFjCE 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 CcQ;}H literal 0 HcmV?d00001 diff --git a/src/icones/apps/kwrite.png b/src/icones/apps/kwrite.png new file mode 100644 index 0000000000000000000000000000000000000000..0c836645d4992bd4d792290e2b5c68b70c131e4a GIT binary patch literal 14374 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 OK*|al@(r?<5&r|NZ{;cg literal 0 HcmV?d00001 diff --git a/src/icones/apps/mac.png b/src/icones/apps/mac.png new file mode 100644 index 0000000000000000000000000000000000000000..5ddc5f054beea1dedb9272eb31f2fb157e63dffc GIT binary patch literal 12510 zcmXYX2UHX5^Y*4w0wL4{kOV>%lu)Hf61sp=t_8d(A)pj#q5>k2Ke0B9;sUGX~!eI|!`_-_S( z6g_A$7XX$(=>8P|j!*&M8xsKR$^k$v?nLlIHvph+-{Qj9p8S@z3W79|A)yT*a{~HN z1R~MhIr}gm)2z)q*>B-M2h57P*FC})WiseNL6sRNPoBj8x5`{lpaVtvz@QFkvo{aPo#ZVoeCTvsWk%58bzK&)UpK8imOa1k>rl z!lI%gqAq5K#iSDKfB$Aq33hSGLJ{5^%HYkwPECaE-~ZuBPfvJZ8GugH0i^f?NP5cn zO@LCN5-^+ur_dDJLVhpI1V8Jmrjg+0OYypy3=9Cz+h8PM6xlVNq92Htq~Y2NcVLM!KBBlpJ}&;>I{huW`6)PdmZ6=wSnS;XGcJ$79(e5>VEhzvVjWLhYakY^GGsfCIl6?)}96)_5 zVB@yJ*^ur#KqC>BG{wIqGauU-X%aQMRb#0R$#V9WYysQ(C#haBq<<&ue|8Zlukmw8 zg6RdMTdTI=f(W=Wi5Y~1_KDC1GjD_}s`+oBHc&`N$lj5bV@-dSj&j=CNk_}o%2wLh zpuF*Nobw?^lQ}m1r%%2A$c(Qc4Ekku7F}m&Y6DEaKBf9pJ}=|k@#8mld3TMMzv(`Dkt1@%p&zT zIA>OMuYfkIU#tA$O2zvZ$ShV(>4itns5hmb{9&ule2Q(#d92x8Yj|*@Y}s!v;fl#W z)gm?Gs@JKTy{DbxRG&Kp_3zZX>Y>`waPZt6D{5_Ck6KBf?~BOA*yDA(^Nr!|QN2vQ ze`X=+oL;C>_-V!&kDhh*sh>nYLz5pz-F*K%tVpu$@y}0}F(1wb>*v%t_teAHqi#7f zi&__N$tV%Ip6BfICdhl@u8(e+AxK%i-IIO8QFfbAn9kyGfOjlHJ3frdB}r<1$wcB!G2M zIhU4jC5eTLtKiHG?KI>Ja0~TNbSaw{=>U(DhMYUg6L71)hA)-WVVXT;hpbp5qx*7m z^$e9db^gQ4YG{Rs6DE0imA(XDCHbq5`@o3(w6r;-k+6mb&X^)F7z1uunPFaIfw6r^ z3H5~-d9i@q@NHzLcB7~hED0N7H;{)@$r>;0moS#AAKSs&{>99%i@9ar%oGuHph>}R zUi8gI32nJy{U)v$Xp+IDJ(&%N#0<&_d4X={+R2wzUz;i9|D<%5oQu#chkR zzO`ATIFI%P{Pbu|(6u7@;e|GXS(E=GUPCJjG=qk*ii7?Nha@4UEq*$vUHFmlL=PG)U{L(xa- z1vop5>k^uSG+B!OWAvM~iN3fT`y?%@;LwebYuWpCedj|TeYH`-KF|Tqtg=nM_5XuV zU?=~ABF}=4aEyf4WP_`)FXmG4H53P)^ONi*Q z2PsSFUB)NY6@Yb5eV7|i5H|S2=^J76oExh>4J8EPhX==cggrgS{if<(%oGlNPwI6e zQ7&smkS8M|sfI>km`1e&wor`HQb=D~J~jIIr3MzK<>++ar;^qv@EdaIv?67v{KxEgy06MS?))U?9c=ro+B6>= zT7CQs2rSEVFzv`QHU^LiO*;VDu71$Fyh3(7*$sW@A4Hx3Usg|u&mG?qz~)KY&UNhB z>{gZ~l#0p9=q){YDva9yI;4Nl7jfH+E@!FWR&|Q&sw%}^TP_;?a@8K&v#ly*aqhEm z>Z%rT)%lSbNPLjKES&w+s5!KENH9ZU0yl3onMobb%b<*y8tQQH3u@LzNEVo_EF!B9 zFH2TPuVixbV3EEW@GBUx1fhiZvtF_a%U?q*P=&FWv$z3S3 zmYTKVK6o+eWE?tjZlgmNU3p^U(z!GLxibP_?x#_G0mc2uIWr4AXD`heo8_V94d$)3?=l*deO&}MZgeUEE*tJBNt_Qo3oh#lVb%BX$p#|9u^H_gwd)_4x|M8U z-m?7JS8GcMt$Z@pJXdb$;l6#L`xbwH$F)x9dSgTh2D&`{_+h~?%_UZX8KorHG|vMD zWZy@#82>Wom)xhwGv?way3XrlZzpxjpYvP5FBC{}={QMD;5@K)!LGiDJ zAA_HM2QmsSgZ{$tpNTF{(uHi{YMt+=eVLrT4L6Xskh_831teQ5zfS=J~gHG>PaR<2g^JX1+Z;D-w zVdX@RfRj=R9N)%0Fomp)-2+M}71x0knqSz)+i%@j^Imwx`PjSft}NZ&a>MWZ)`;Y< z_}^a{-|Hu@VEUsu--pZ=F2s1BDZTK{t~GK>>Tq$YW+42*V7nfDT6Wf6^Gut;p7t%i z&o#PuI&2?w-)^`r*P!#(7B<(#!GY5_%!#nhShwww)(JdZX;jYfgon^QfwS}mX%k=T z5!n_r|E+ya{p_|~$aaq`F93hnq!J$^#KoK*rQO39MLgA!*)SgYlHI>PLwfs^gp0f; z$OE|N+wjlC?%ROLhqN1MVm;WEJDdT&%k1pWe{zy$XqihNAEdGt5z%35xy8C`TsLK$ z+9sPvPU=zMC?4m9WJ}hvtw$uGIhMSK>lbjz?xd7HGj+4fgEv^@jR0Y+ptfhC_cNKtKi2 ziFkM#a{=tNDDRa8Ii?p&=7`@BI`ht|ODxFhe&V%2kAr_mp{q)- z+ShQ{!aUzNG(LoJg;%_Ho}%_^@;q>7ZOBtPJ$)}al(Hx1{joo0tCBUuiR79#QklJN zYcjDsfRLdlA|>CJx146iLb(+y8aZ`tc4X?5Q2hiMh!O<^p0z0duY#I|T(KB#J5&<# z`P*+{S3K;50zt5_;-{Z4Q6dOcCMQC<<}zPvxXjM=@tc56sSg8dDxa?@mt>0}nO3iccs#Ug#Y_3T^z~tASd<<;;&Mj8aRg?v|NWjAKb>`1 zO?vQo%^a;IfjH;ILvZBk(J-tRmi)H6Tc+GNE>j7JKBg9tc(Nj!IP`nvDcMA~OF>mp zOxDrCmLvzjT}@$9MO(>F8ZWK4m_K5L@ZzswpNBuggsYD$E`MadsGvo+RpYPz@cF82 z3zd&N;)3DHp%JlU0T;QtOk+*{0%D#2{=H{@SojN17hka)N%j%BaE}7VxLkS7yNX&A^-O@>ErPIF#8jZ$Jz%+7>M219% z8yw3K0;GsfbEfsv?iJ>e+yO(Es1$tVS6vhoJ(Vh&N-UpdS*oDdQJ26O(&O?4ke%oG zgJh}G>pkzQ?w6$qYZ3SCoZ{*z+jeT>S23=d_0NVi2d$7lW??EzCRe6})^M6LE6CDj zZs2|P)2owus)a=x{5V~uN{p~%1?SzKn$6o+OQcLSo0dseJ7%jrkB32~$j?*2r3z{fE8ZP^xzzeCJ$eU_QZMRaMjttHBwl)UWx*7!&m0#V zil=7fBF*CC1)&ucVO?+a89vI3ic&2fit4y>-0Esf{lYv*b2~$f;b6X7TAc53fFl)_ zo^*nB+mWT)v8KzQ$P4Cye+rORfvx-2uYb&X`gQ0|Jap2OI^2D6uB%-N3;6657#J8Y zEkv3~oVjb9t4TYrY?eN}Fp^;ZAdA!31^iZ=pKr#;=r2w#(e5=?G~C)IPv&@R0}6+h zjr(iAll(u;kOuQq5#CrkUma89Y>N{EO7NNv(mb@;lbSZPh@Vo$!YR=CoC zyTgWQA&R1Ix$neuD52R!ffdfz*6N^l?AU=$WL|szY9NFey6>TFEXUYS!4ui_Sk&9x zObr>j5u+BBq!?!b(ssx|Sv0FgcbT`zW)kNNhUJI%eT9nUegY#|OwWx34dD;W?Ie|$hx z&yIZh6dn;5_fX?!my5Y$VWluD3rW<~>mpWdX6Fao<;0|EQxMZC4PpN)ByO&{{>zlU zIy0c3!IT~$9lrdFc6eK*uW;l*-sk~Sq43F>>x4f)-aS#!&=3jbO!j`fcNFn#skpcp z3#G8(tw+AAIv+S7>l_zH;@-QbDT-xw`BXVbiz=UA^fA-4JFIYhC0>pedZ0mP7i~yz z;)H|fX1FQ;R}|QEJ)|ojq@ej3w-Buj6;!4F&eh$Oeg%YO-In9svF=BYePnxZ83F1s ziv>YWM@$mV?cTfh5x=fZ`a|#1^m}`%TqiAkl?kky!g>NwnZjy4G_g@2D@K~gUC6kb zT~$?uRaI3L4vrv2kod&d5BDCG@^}xa;m=G8E1zUFXJI#+=`^~=CXHzD;UT`KkQ%#| z7Dy{6fZijU%Zku2q=GE!GmZ6fJ%!~a<5-#RP`!rZ(Puvc{uI)#q^WPWjIpOr@5h#C zZHBwsL5zu|xlPIxL1fH~gniS=yetia!E!V<#d0DQNM%5=*5=F;+z>pjb1}tu^1l4| zw4q(jrHtm25~m46!okC^pE%&;ZYcE*sZm_Z*eIJmbR+UtZmOBW+SJmaE=>(e@q66{%0Vn>TcTrs^f!n8Md5kKH*C z@sN2gGAu&uyL&gb$^vjzPI=}QjN`-b zVw)7*CapTsdS~|}VuRkpB`7&OfjxI_9ah|PpYvt;-P^Yvwi+*dkr}SXRm~u5w8$$c zVE!o9DcL2|sV+a~IjIK}x?NvM`thM}_NUT(G<;~<$RTYFG?a6FEU$x-BG0A3X4k&u zT`dQB7r4ZbJ+$#|#X*ATED#v3TWCPral+F!fP*_k3ZOK~sm`~fS%^;X()Yajspu%8~=kU5oWwVk&MHM(0+(1@g8 zhxFiHQccx#IE)Qi;Hq7cgwt)kq;^e*>)ul@H-rL@NmzLLxSUR*_y8P#0E7xLW8vxM zs?ABndxpr5ou2czj) zMMXvG&OiL?D3@U6f~y$?Re7aKK%v~X^S!|W?2UhAlxO-a4okpLU7Nv$YEOf{zbNOb z0t^n0vu7(o(!Ptb`@K|$Vpw6U*2G`(-0U`OZbKgRnJs&q?sDx=)2;3h9`1N@Ks(9S zO!%Ub#^#Nx2_nfGwGpOmbh%UZNhE6YaBD@!)2FBh1(>5&xVaSi{0WY93_GevZ@;}CC*d}Gv`h7RHp{Epn~3O?RZO_O@;IjrU$sq|Juec;;;?(IHAir$U}5| zwBE+afL4mTkHuoL?WZfwJoiB+toUkc_U9|@?KEm$lO}6XWF(x;<(7>0u{Y+lgXO}D z$5z*5)x()cv<>y*8lKs|ql8`&xPsY}Ctch2W-sFIi3F_X)YREceKbDNX!K{L*8>AfS0WfjtQeod1osckm?q_cOPa7rOc zocBhm>x1kfh&v*$ao-H}5h*9v`+d`lSwv(5C%hwGWlfNxc2rm1me0fN=Dbfwr(bx7 zjmo@BB(xT043%bN$VFINkovcYjW%HmgRqJE`eE2(+|}PoI_9;v~ zpdk+!aj)OAB-(O#zM*vBMh)G<`y z{1YrTxR|=S+AS2Uxk-uM`}hmB9&T#Y81OO=&}mKnDkGZSjLFdJH+31eVCYm6_b!Og zH+`2g2z87X4oRv|6-SU>EqM!MwD{wplr#{?blfE&9jwPjP^25y0qb|Sr>{K|#DRWj zpCtFfpNE1pTn03b3vx&eKDej>Qu4YE;oN5}F5#mET7G&Dw({OxNZKPrLVzCUGffRK zM%c^(1WmIG#t6}j0Tyh3AGRn#1pvU$hZA<#aMA&);3m6=ppw-lXZbnx`=8A@Uc0WD zuS%9MDeGmFUd)t=bIX9z^HvR_51`R{UOq%nxePobm)&B_-iLvHce3(6v+^#(%H}F0 z&T#nlsrSH66rYaNgO86XrWsj5VKl**R3`Q6eST=XT6GWEXtrP!LzUPZHMI~N4BF3R zeFpU5u{ugH!?||gooc(#R!jLO`Q|l8JgYq2`&0(^)5gcPXzK0zsY_=^7a!fkiZ6y_ ztV+*q8qdP%M@;8dSIETC>s%ZHKi#X>gE|qlldq^e$yIR^;XX=hi|+#gPe@&o<&za5@6vYVD4d6Q7>NXK+OjHJ=#%)2 zgzYt@+r&VDTOd0cV+L%xmR*mtSo_DdjWHnKz#LYsx zO1xs*2<2i%P1@JTa`9Q2iZBn&k4Sui3eadyzMCo$YV5^*j5k00-eP~lg2S^}r4+h~ z$y7xkVOAeLt8<#h=jw9Ww8~c)dcupQSFqpXc3Z^H=4B=UHxb9A1@9dv|LNpkis%n} zKA;p%ta3OipPxE(v`yeGBAWsJQB>`Gjnbp z2#n9-ZtKrD7l^fmX&f5|v)vpG#~}UTO7D-KH5HleG(zJYw=sYAWt;$*N;@Z~W#nh~ z+Z>(K6kWQh#zQypGte;(b?&;)PWfVAKs`y9H#cTMkBPNacMUNk4(Vi&U8=zyaZ^wd z0IQh7)Gr{mmo9zKOdE}|m4?XiX=?nzgJx1PGUiaEtW^eEyXEMvw1@$NhyjeDQ&zV2 zf19UMzl0C5K~wI@K~xv)l{fz`(+_tiXCjqZN3yh7{bjEU<0y6(=U&6IZMPGpM{bQjG0nyS9A$y1y=dpkw zKLu+0q$KY4G+d#M2kB^_My zDYH$Mc+O?mIBflVj**F9<`m}Y%9+zAm;v{qH?aI3v&WJ&{4NT6kdQ)0Up9ffKiT|E z5`m=*vH!N6_A`yw&;9oG5BPW9d7^euVSLx(3#tj8vl&*1^o>R8Da_Y>X3BZ?6FQbm zA7B-SX9!)yV8&%cz!ss*%oVzN8jUOsC@(EIUNQ?>Q9+vICqoQYb2K–SNmJGah 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 literal 0 HcmV?d00001 diff --git a/src/icones/apps/mozilla.png b/src/icones/apps/mozilla.png new file mode 100644 index 0000000000000000000000000000000000000000..3be22d48a1681cf1fe36bcab29bd0a9e2af56442 GIT binary patch literal 22417 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 OKii#lI#${<(*6&Y*n&j> literal 0 HcmV?d00001 diff --git a/src/icones/apps/safari1.png b/src/icones/apps/safari1.png new file mode 100644 index 0000000000000000000000000000000000000000..fc3a1cb7f32249779bf08d47ed325963f62091d7 GIT binary patch literal 19119 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 literal 0 HcmV?d00001 diff --git a/src/icones/apps/safari3.png b/src/icones/apps/safari3.png new file mode 100644 index 0000000000000000000000000000000000000000..94594a4b8cb07e815ea1121a55dcae0ce1f6794f GIT binary patch literal 21354 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

      S&)b`4U*!;n4N0gq2^ zc+gty+ZtP=5fwtwP3LrTl@CMnaYBPK{>X42P|3lJRj?J(AmVt@4!HD9Okm5i*d(cV zCqOr#@915`={1qy3K9r38a&Zwtm7}{C${SUjFq4MBUg~$-F!62Xh3XLZ9$O=*dTdcuP|c3Ek91A`?)xl zK+`2vW}|n%l2m?)$sOQzq8lWAzqg9DL%o<&DmSiV1vgp{6z2JnEwS~MB?iF{%jNMT z&_xfRd!xqSTKleG8|#%~hb`k@vqus|Y4TS$GAMt*@4qr8<%YpixAv7lAl zeL~{y^YSswoi!v<@PVuQq9_UYSl+sYF@>|~g$JJM8>|@IxSP4F!xg8}1GV<(yKM(X zuZqv4R2d23eVnyZI6gRF{T)W3)cXB2>Fh*PxDg-*)4m?8P&#mqc@EpKdLO-BYg6y~Y_f_Er{}v>O9)LmU5-dnLeJU; z1%4P^8$XO90pHCCyUv&7T93z9Klui0{8)hiA^$qHTk{K z>YWwjIt4ZI4!)n$w)DY`>~)H2+Y&w8$W`y9+DuWzQ)D*Kas~j65d?3JyDyk+&e*d- zRN`>U5F4(DpB^tqpdx30f`ly)mD>eHB7?8EY9fkc#BU&-gjXedL!0A-+!OQ>GEgaBA(@(V9DyPUH=wYj=`>Tn<$Q2af z_(Sm_g_fQ0C61dlYv(#YV#>RYZo6T O1U9>FbE$S>aQ_c&DN7On literal 0 HcmV?d00001 diff --git a/src/icones/mimetypes/txt.png b/src/icones/mimetypes/txt.png new file mode 100644 index 0000000000000000000000000000000000000000..51eb8006bf933083a98954252da27b92f64b4adf GIT binary patch literal 10019 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 literal 0 HcmV?d00001 diff --git a/src/icones/mimetypes/unknown.png b/src/icones/mimetypes/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..0d0ccc768b5dd9f9599c2481d7d270ff650c6b6b GIT binary patch literal 9176 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 literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..057cd98 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,44 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + ***************************************************************************/ + +#include +#include +#include + +#include "BBWindow.h" +#include + +int main( int argc, char ** argv ) { + glutInit(&argc, argv); + Q_INIT_RESOURCE(application); + QApplication app(argc, argv); + + QPixmap pixmap(":/icones/splashlogo.png"); + if(pixmap.isNull()) + { + QMainWindow * mw = new BBWindow(); + QRect r = mw->geometry(); + r.moveCenter(QApplication::desktop()->screenGeometry().center()); + mw->setGeometry(r); + mw->show(); + } + else + { + QSplashScreen splash(pixmap, Qt::WindowStaysOnTopHint); + //Pour la transparence du splash screen + splash.setMask(pixmap.mask()); + splash.show(); + splash.showMessage("Billboard Cloud : v1.0, Equipe GangsTER : 2007"); + app.processEvents(); + QMainWindow * mw = new BBWindow(); + QRect r = mw->geometry(); + r.moveCenter(QApplication::desktop()->screenGeometry().center()); + mw->setGeometry(r); + mw->show(); + sleep(1); + splash.finish(mw); + } + app.connect( &app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()) ); + return app.exec(); +} diff --git a/src/src.pro b/src/src.pro new file mode 100644 index 0000000..a591137 --- /dev/null +++ b/src/src.pro @@ -0,0 +1,89 @@ +# File generated by kdevelop's qmake manager. +# ------------------------------------------- +# Subdir relative project main directory: ./src +# Target is an application: bin/ter + +FORMS += W_Main.ui \ + W_Density.ui +HEADERS += Camera.h \ + Color.h \ + Entity.h \ + Light.h \ + Material.h \ + Matrix3.h \ + Matrix4.h \ + Mesh.h \ + OpenGL.h \ + Plane.h \ + Quaternion.h \ + ShadowMap.h \ + Scene.h \ + TextureLayer.h \ + Timer.h \ + Transform.h \ + Vector3.h \ + Viewer.h \ + Density.h \ + Billboard.h \ + BillboardCloud.h \ + BBWindow.h \ + TgaLoader.h \ + OffScreenRendering.h \ + DensityViewer.h \ + Image.h \ + textfile.h +SOURCES += Camera.cpp \ + Color.cpp \ + Entity.cpp \ + Light.cpp \ + main.cpp \ + Material.cpp \ + Matrix3.cpp \ + Matrix4.cpp \ + Mesh.cpp \ + Plane.cpp \ + Quaternion.cpp \ + ShadowMap.cpp \ + Scene.cpp \ + TextureLayer.cpp \ + Transform.cpp \ + Vector3.cpp \ + Viewer.cpp \ + Density.cpp \ + Billboard.cpp \ + BillboardCloud.cpp \ + BBWindow.cpp \ + TgaLoader.cpp \ + OffScreenRendering.cpp \ + DensityViewer.cpp \ + Image.cpp \ + textfile.cpp +TEMPLATE = app +CONFIG += release \ +warn_on \ +thread \ +qt\ +opengl\ +glew \ +glut +TARGET = bin/ter +CPU = ""$system(uname -m)"" +RESOURCES = application.qrc +MOC_DIR = ../obj/moc +QT += opengl +glut { + unix { + LIBS += -L/usr/X11R6/lib -lglut -lXi -lGLEW -lGL -lX11 -lpng12 + } +} +debug { + DEFINES += DEBUG + OBJECTS_DIR = ../obj/debug +} +release { + OBJECTS_DIR = ../obj/release +} +DESTDIR += ../ \ + .. +PATH += . + diff --git a/src/textfile.cpp b/src/textfile.cpp new file mode 100644 index 0000000..33eea69 --- /dev/null +++ b/src/textfile.cpp @@ -0,0 +1,68 @@ +// textfile.cpp +// +// simple reading and writing for text files +// +// www.lighthouse3d.com +// +// You may use these functions freely. +// they are provided as is, and no warranties, either implicit, +// or explicit are given +////////////////////////////////////////////////////////////////////// + +#include +#include +#include + +#include + +char *textFileRead(char *fn) { + + FILE *fp; + char *content = NULL; + + int count=0; + + if (fn != NULL) { + fp = fopen(fn,"rt"); + + if (fp != NULL) { + + fseek(fp, 0, SEEK_END); + count = ftell(fp); + rewind(fp); + + if (count > 0) { + content = (char *)malloc(sizeof(char) * (count+1)); + count = fread(content,sizeof(char),count,fp); + content[count] = '\0'; + } + fclose(fp); + } + } + return content; +} + +int textFileWrite(char *fn, char *s) { + + FILE *fp; + int status = 0; + + if (fn != NULL) { + fp = fopen(fn,"w"); + + if (fp != NULL) { + + if (fwrite(s,sizeof(char),strlen(s),fp) == strlen(s)) + status = 1; + fclose(fp); + } + } + return(status); +} + + + + + + + diff --git a/src/textfile.h b/src/textfile.h new file mode 100644 index 0000000..1c30e53 --- /dev/null +++ b/src/textfile.h @@ -0,0 +1,10 @@ +// textfile.h: interface for reading and writing text files +// www.lighthouse3d.com +// +// You may use these functions freely. +// they are provided as is, and no warranties, either implicit, +// or explicit are given +////////////////////////////////////////////////////////////////////// + +char *textFileRead(char *fn); +int textFileWrite(char *fn, char *s); diff --git a/templates/cpp b/templates/cpp new file mode 100644 index 0000000..0d6377d --- /dev/null +++ b/templates/cpp @@ -0,0 +1,19 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ diff --git a/templates/h b/templates/h new file mode 100644 index 0000000..0d6377d --- /dev/null +++ b/templates/h @@ -0,0 +1,19 @@ +/*************************************************************************** + * Copyright (C) 2007 by GangsTER * + * coban31@hotamil.fr * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ diff --git a/ter.pro b/ter.pro new file mode 100644 index 0000000..9679d79 --- /dev/null +++ b/ter.pro @@ -0,0 +1,2 @@ +SUBDIRS += src +TEMPLATE = subdirs

    nT<7$UvJ9G7}uYQBzcq`TT`C%;gQ4W6Ya@8SWYeLm<7~ zcC;IZl`3G$nx1Mk92fK(zVgu*Cq7QU{N2()d3>ARiPs;`x`C(MC051(ilNRaVFUHT zzbX-W622Xu7Z(>HqFt!t$WCu_rMNx>NCvtTfn~$OKK8&oc1lXApN$47^ejQa=^pKK zvOHeb4a;9}{kn9xHg;N&HtobA3Iz!f#7M*oOe=bVqw>Z+ul@;s=NGv->&mT@JXcKG zoQ_WY!$&~$2rcJW(NLZhFfF_VE81sH4?$6$4ew`F^5EI?Ynn7Xem#s9OwqhD^6Zri zEbWRogU{T6W4c9o?fa78v4WJ@YbA%X5E3XEvb3~piDaHW%WT6qY%w*|g7gZrvrSq* z-OqhQzbwYkK$g$cECG-9d{~Ay81`Ui)8`VwblWlQd2ANBi;~~M#silax9$JBn#N&9e5!W z3Qax;Rx9u#=x{vh#FUX524oB4wGePA8~--f$_O-ip8$W9`wKw{6(#^!%LNU{jvqM% z>{}%7zu5Wd5vz-^oFmBuEN*35-{QCNb`YwH!!;sYQ&Dq%Qrurnr}D;{5VLc<9Y}CV z;!fZEKLr?`ii{R9gNU|;?LLEyuHr*#M`$B`A)QJ``gcJ$bhYAMNEjviqIV@WDlBTq zJLf`leYB}N3E>%h4h`niB>%j;Jjf%yI@CVYahTK8H2}o#aX4_+9yAwx%Ox~7h=_?5 zSl>ckLI{D19V#uP+vYMG6rSfv=z~HJXQD)^__6+S?d-mb&}x-(dw^7+YZ zTq^WthC_O-lD{e@2dI-hM!_yrFEHp<4*M(E4}D&pqL2Kev!4$~8ppu5H$h@H35t4+ zMS0FCPB-PTBgv6wapMdiXiY8Xf&Su=2-YsaR#vK9q(<6rn`PK;4oudSpY#JwjId6P z58IC~Y1Y*WPoQ=H#t)}daa5%7zey^yQ6e8BpLrcq0d1H!h1J(p`pSH7n~(_3&rN8; zsU(mjo$0R{nfm$Z=~`MQO_2SUL_Yod`AvlOF51!!^+6E=LWj{NbZ2K{WlTm3VuBDn zogC0j$`@2ckY)x*IfhXHzdJ{3@1nkj`#31r>Q6B|MQ~ul0PEjc7r3ynus=OxUS~e* zkG9G1zQC9z%aoD*T9ecbJXwEqB10{4?{3&z&CBjy=AX&NW*fIq+wW1bC@{+3+|3Y ztr67%4Y*d{o+01*Y+;@UO$=^(_m02ekYJr8Jr`Sh?gVM>(|zn-(x2!%5B#qGrzlkk z&d&`E4Y5;)1t^yDISmaBdxAV9g1}1j0~X3`oCAsCfiBTlH+5~iQ4JfqtLWH5h^l3% z$)sXtP5w!D;p@hbd5~WC)xP zj3icc-&U57$_~OuS_(xBk6kJgpe581_u|V+)AxR-Op`JYQ6$9FLt{?3p~|7eEiN)4 zp)n<;TB%lg_&)I#AL#D`mA!<`)%7*7Lhei2*;;x1>Xr1@P^om}g>8xvU*oLp`|^Hy z(c+WKtAMsJ^5-+G$Jx{d4t&rg81E%l_L`+A7Ca`!x}H=D9+ZNvPi{<08PgHs`WO-XvvzYUi;B z^^ux!hsi<-!TDAyqj_J-CrQiu5Rx`Nsh7J2>m!ZpLd4B=Zo!Eb8kE8!~Hbj9uE%3k~(2uat4V-0wuk)5g zt%W~pe(U(jm*8wP%Q*@+o#okIci4rvnt#4+$KSN*ApQo!?Dn$ZJ-X)jTc)qEfA2X! zUuRTEv6=r+etU!BX=gLQJEii#Bk4cWLHFy61gFG}<=^Hi_Z4!P^pnq-5*li23c0_p z%6#aT&+SiFXg3QExNU3rIE7KQkE9t9{v1J41cK6c)qQ}wSZ{L|#7p>Qp`yT46S*)d zAfRZ4O^GTG01bRZ2NCuhm_N3`i0IC_@8r`6guH;NSEc4e(@o$%U}*z~lJ7=)zT|g1 zteBGF-ey-6JB1c{xtXE5yTTyqgD4_WFa1V1Nl{UyC$IQA;|GFy3jq_mc^@mUb<3--{ONoh&ES< z@Y1EXYY<1c^H25_NMxY)iT`b&J-|G*u{754&Bwbb;o02gnoslc@^Z^%WR3tWbN{#= zP(MuxHbr?RcpgYa|Bmu=ge0JoOFqJ1mSG?v}dIwanmyL_QLcKELBNCNjmt^YGF`^U*|98=VSnE(zLhRZEXjoA;G3R1cz*$p;O{XE2hgEG3TfRGTuUvBdo zdO=_D3H9*r5omA?N`Q0l7I$a6`#xxZk!uVenLYr6CB}FFKaVVMr@fCVz<<)kQc@$k zTE=T-`Ho-gcd*Jk&a4v)E`zA7F_4caS;xqCfy%&@jTM=xqBShDt9Ys4pfm)I(@Vuu zc|6{nDoZ@FVBmLjr^1%x(!}Ue2ND@=G>K$$+@BCriQqcsqx-Y z?B&eNOuCFNR|KM+Z+GUyq086W`ZEp*Hl@(3=vmhciQw2joS9>5BqKs}kYZ&7-?Wlh z(pJjI>c3LvTLY$g=Y1MpH)-qYKspR;V=4m9)VY~7ESN_(SN#vL_HYHy_0S$FThP;0 zzxlp?F7s`hof2vKvPA54#v`3@K_#-rvj7+&5cTS_be$^N1xkCbi&U?N4DJn|6pGno zn;|>TjQZ?7VFU-8j|~R%9UyTq170iLzh#z~=z8qfhvd>tL9Uo^LYC@+*KE4k+U1^( z3o=sAl=XmpOtT z?eCrqo31!8|5kv|^4y{s)Up5kp7}Oc*Y(b!1hQFu5L8XyUOUHm%Mpdt&C18!w4Z^~ zG=+!v`G$L8v(&XIV0v{)O#Zs}O;IuZ-e<5xcmq1|0#na@BPn;ahKZDO4P(KpU7dePijnAM~xqvj=~ST@B$ zFG0|Ld~Ah$2GVxg-ybyKI=f+`3QQ~Efb2d&;|qVkR24IiSzp}!J1Mg$7Y5oEG;@)6 z+xv<&ZpNe49_n{>rh7O#IE0(U%;R3^@yvhGteS^~W3$AA_lhqro*f@x+^XWcAoD@9 zmh_boLgRPqN>=|^^W2N`q|Q=vXZI*elq3A2Fd3Od$_fRWbiLuT1J`&Qh2I2=^X6}5 z?7;&22O1bqgs<}b0{xIXyR?4KLh29+WCKd_`?l7)`$BbQLa~o_J(ic$uTL={kb-0h z4Iu%dDvD9%?o^mu9aTL>=;s~5S0eNNs_=Tu82#foLNHl$n=+P_SxZ2Cz$da zzYiBNF2+aYh_uR^0Oc15(06#@Y)0@9v#D+}Xj`*vI_gva*a_>-EvUDX)_R zO(W+8RfJ0cJK>HALa^=l$P8llU!bgw|CbNsEMIa_4#S~uZO&ZF^Hmh2;3rwqp1vxS zbc*@$)_<{J4dr702ybn(BE}w8fi3Evd-kL#kYuz-GS<9pfBG$L+Q~a(*TpQFGsR<{ z$Uaa6_U4fN9D#&*WX3;N`Q)5@hST~Z1NguNa`80kHSR7K~lee+d?+)Td*BHx z=5=1pQ@7LlA3{dk@x+Pb$OA#UNVc|VpaE3?1Fq&2*o&QY44S2)4*@O*{@bviLIBUa zyv4dWSGPGa;X1Rv9{Y~AA~gou$y*Gv6bv>v3WT56<2^0!w-o_xLcc{yf$-ypxN*Au zLhmj1oJGz**v%B_W0SB6F<(F3*OWSZ(^%-8ZfW_aCg!WMhsv2?%&Ch4F`mQQn=is% z1fOVjvs3AEwX}Snd39-j)J>ucOwFW5{66cC^YXdT8uecJdsFvyA-Eqpsa1iDBqOBp zCg>xbA6xy^l!%&LrO)~_#V+x2rAt8=ry1{*mfub)!&f%=;J}q!16MLw;ADIGZ{mY{ z_i74?i!JRB9<&;5VQf-zdF!z2h)uy?-B@oG^mTE@hhaDyqoF?kNUr@$&>b5nyLhw4 z+HBhW4S_|-*Q~QLbC8SbnJsH3y)@^s&w}1sh#VIpSYBq9i0og9$J}wEWo{~RQio6u z?OPH57ZS8bUZ~SYI4AFeDhAaHY#)Vqn|)Z>w{P)5_Q8W{Pvp!4DgFp+lfR#_{ro2- z=FvVxu-k|HEBZ`}^^9KUy`OQ06CEWHGfHVM#j~D6(r*rR3~@KHAst(nY!(Sq`g22= zArKe1h&FTTc4{WikBd5tX>Q5iAw-=-*PjI@;=*T9H(eL$BR|*XFdMIoF>X%=k)s|M zl+a(^+RV4U3mgQ2bpQ@_y6+y=18}tGs%~UFUxj9T2h*?GgjF-oqqdl{j#<@;h*e+F z`@To+s->8kSZzrpcD46?!}m)DqkT*Rc6{bLsowheyUrodxVDjdX@diY;+~DgaHOJJ z`D}E!sqCuhA&=W5ZiK@{XtBK!mr5_s?Q_-e&1au^|4LTxXZ}b=`Sf$<71mdI8dpm$g#1Y?fTr@Etg9{5 zCpM;qmc_e!x6&6rxT>|?>F>Mz{_@rD>-I@;+JmZ@t%D4eYj@<|87@I5wENz^IPvjE z(!|=M*FZ;6^g&hML-s&J`4MrnGhy z+j-glX}Ye-@^{dWtV%`?^&_dK7!3hRlISaVpnACkrm=(J}? z`OJ3aAuwbC8SiP?2xda4?Z(d+1ls%f z4&qyEaCJtaA5Q#~@9>0pAZ4rwRunsm;Ypofhw|1?QI;D{%#(Y}lebXD)r*9-G9It> zu*Nn@;{@?6ZDer_#-WDccX%;7q&8>zU7k+jC|~zxZ6RCy}fC z(tn!qxNp5%48u~cA>zL(3*a^cNk|B3goY-e1;y=u_fsw$pk6%W6oIyX#OoOirtX|) ztc~)v*AaG91d4wTi9(;3l>0-`*IH9>fCl*i%Al?3z?77Z$0Dx}o7&t=3)tBZS~g~R zEvMy=DBo6TjaRZxmF&sHH1{K_a02lOeU8_SGR-|jzs)WERjgpr*kgKk>tUkc6B zU`giHKE49n&Xxb!X2IrqnfUuIMYifbwd$iqrvnP`r*C$3sh^tPmSJgZbwi@KSW3+* z8oyw^+xDsD6ALcZw0hmV-Y{h%GzdH*f~$$e6qOBc0S;k6T`U>?V`zv&OOd$GMoK8K zZlWC&sB~*(73|h;XG%Zh5e+0HsE*H1Q0G4mYwm$;*=nGPZ-Op2^#J3d|gFezV!f zey`dwPanz~(Rii{lbqTGL<@1Z>8vJ$(Wj36br%9USG0yj+er$MK2qMzalMpBYnNL3 zNkt=b=B}xIVH(<7+~suoH7~iT!#3f1@YyNgd-m{0wCj-N)&_RAgPQko*t`w2m+uxa zuCBE#py4(^$%vDV+SpXq%HM_@_pQb>H}R1EW=XNBSNja{4gq0}YYQ_k9GE$_<(6$j zv{0^fuqK2^vjc59a=V^Yre{z64Rw<7p}zRlH|Nut7}HQXGWqQrW*5|klnW_shrs%F=arfeUvdczVl?rq^HzXB0WYsYtN@^_sHoL!p}bDOFgKdbd64rHKH(wr zOR7_=8We4H-_CgpQrd|2esdPR9aSe1`Bv~$zxYQ|%Ahm!%m^<{$%eDlLtyHDx^yVG;LMT-@ zM9%#HpSLN|!ID$%$|EbYKs)af0$XFUk4G}!L2e$m`av7{hzd1)x1`N*p>v<9fPc}4jIBjpWTkbD{T+Fmw+n7#d9F~1;eaZe5+H6rf^x5ms zCmwI)y(I!B*2)&JsyiVt`@I{dKA+Q&Y_uNt>DWmU>?$lfvY)A|a}9n(%RvjmcKB!N zC*`6*J05Zb;+z9@O^5O=9={T^>*4U-n{&F3dPdUGef2@Cy}`)C%sI8&?%9A_W%L z6Aa%ZyhrZFNvG9G_!QW+w0}??}Ruk zPm|&w5N3?TiGpAI42=bYL?# zy~pZ(q|{u`N6fFiCK^7L^7m*9|7z}{HRyG9pG0cL8RnO##_vz*h6jGyF8R9*6-;U=`z$#K$O!lADBW^ zNk{+Rx_ho+c9&&_{agk8Ln>6vt~(>jma&IV;mxCW`e7B`X1`6&>xM;>?rJo>0<23YkeEcWa+c?VWrA_L<_HHHYCJ z_w4#0cmR}s?@I#GSH|IW)v>Q4w=ountX_GWzP!D?-g?fijbsYp7t@y$CQbxW0>+?( zF`;h7VZfL69D=*B=T4~Y9w3|voQLcgrP8yu%+1Mvsl)bSc3>Sj&N#UiOp519ajgpQ z@VCG561R-ISzL}Ur#+*KqZif3{Pe(w$xz}gV9qhNIuXHp`0t>;ck5b7e{PPC?)beu z6G+;m($XS%1`wBKtspUp;Q8|KI zPpR7}+@)^>7TDr|Dj5=yAE>nBI77NXr%t-vKAl~0TiNA-OGO^$N!!Q^2=cR3rk4ew zJcm?~nhuur)uBY#DODY;!2bO&UKBo#q&Hh<8g4q3U3_wDF^RV&G&MXooNvY%G+`F$ ziw0?>=7^@#w<9S2*`RwnQN3R{ooTk@6QsI@Rr|(Em0V#~;6Q`Ud4dYc;zvgI@E2>I z6n*09{C-vh8n*dI1ar}h8t5MNx9#V%wb_s~4Q2vdeRW7de6y`5gd_@4cyg_-!X<*` zRoeuQ?|ki+tJs{FARvbYau?|{=P78^^)z537cu3eM6saw`67mF_??z9dF`6jCpS^* zqer&T60pK(44?VVY2@@caJ{3O{cd*;TVQz%MX70C{`@B_{)y+{Hdu*Tlg8#OiZc>v z(J-p02S2D$32J&6}9pq4$h>}xDIr^q(LI3yf?k^etvTNmoS48i=y!L1( zfk)&b+^4sQVONteYTE!_;T=h#p_I!bKzW-e(ZJ*l(WpZ816oHSAfjRf znB)sSnCJn`R$I!+pVX!Ixq9~xd&TiqW+Ispfy|^$_}d{nSw1Kq@o8G}2PnuK4eR^A z!#|(e;}ZP5u;-ty*g?hm6VKguc%!`aZ2=e`!!fm)gC@k3;f)R9=ZqLIsQv>!={E># zLzz7ED;O;c;=V-tQ%0I8OW0};Uw+TH7&trFyffTedfpuTuLA=A_!Co*NHyoAEBN)! z48TPsoMu~3)0I&bcv6v4nS3d=;^nitD;W*MVmX=CuzYj#CaomYy0ESW`H7*|9OFZNoE#sZuko=`cVT16evu<$OliJ0!x5Dz+CYY7>F-Eef@Lx-op=< z9zDJH@XgzsZ$E#&4J-ohKpS_Tpbfhp&>_(uQ2ZOMu}97{Hw!eeb3hY3h-L*=fxII8 zJd*Na!fHlJa_VL(a+*^7Jj$$$3_{HR|FSSMz=njO?HgF<09q_S{Ky3KAFvGr#J_+= z{=08K{$6e*B3P=|9kB1xcC=0tmp$wXHA= z!qCy$MeUrlu*?5{-5$#5+RaPVxwNw&eeOdDLY%tF0K^Z+7GmKh4m7O{t!ul|B{TAgiQcTh| zo%zE)+qTzWCn+PqMrJ!Hi$c^C8o}sYFm{ogwop|wMvlS4WBmS?0mY?LfMu$Q&IjEq zZ4qxjDAj+g?a=l}7+=}tZZYmM4*m%sY9s(`B?2s(bw^Cz+&e!9GEcnGpV? z1p+N{I)zK(F#O1X!=Kpvh|izIjn1|(D(hLn^Rl#)gmKvKH9yHi3+kWK|fq*E#B81kLp z`@P>Eckc7t=bpRIS$plX_TF4YNB(!=VxxciWi7`5fDw4E zD39>YKFGoGMhs94h0|xgfI{M93&|4-84I6jlX6`s>pGR=8aA-N@;M`-n3W)kJ8Z}^ z7!#!9S6S4ys=`fw*a@52WQ#fLJic&iTrYAOa+-5sbH1QAx#|i5bM$i9LttCvq5>ezg zmRgqgv(5E0#gD4FIH6yU*Y1isWPbgS#OsD^Ej+BYWmiU zO=N7-{B~(;!>sFiY%7f<<^C@GSx-O+$+MMiu@`x=A;n&Y^547sZ;?#MC|6lFvw?|gC?U0w;@kEuiuQv~3$GGi zI(O-X5z(@Ht-Nnl%NEy8oTEzrjYy;07Pb#+%j3GeB{8$Z*nH)M zQQMJChNxqKTAr-IU|b%v*OKUOp!j9$^7mR(5{IR09*n4sxWlW^PlOA*Ki^!$enLqa`TUdmYcH)4L(pv`qK{$GEaw4Wf9r0rbXU!y~_!jCp)( zdjBe%xT||-C9q!ls8`&m<6Vu@!l$v}i-XTLL$O`kUcT3S^Bo>##U*dj49w>FvYwQT zg%Q29Ug|Kgo}hs@ECa9R8-LJ{bKBhCme5Flv>A-{p&2eZzicxO%rm?8%W>fO8p)B% z#*yuk`q%?eH5&!3GS%-mW71pKegBukV!P;;0O7qAH?5JoTvxqaf!~KtJ&AzGeyc93s`FlvJ`J~lx%Xy|w zH7$m=)qbn!is(0U^~_I;7VJrUqVHRc7V?$j8BNd3d>w*1kNQk}?osnJnC{l2$&@0! z^hslUwD!q$R+y(Z#Yw*Q@NC}Su>ErFqP3$}15ph0pRZF^WQy|0n*AB_y{(f{^^I{o zUzcm~4BbW30E^xL;JfP}VK(MqOn(;mYdk}EE5~bD@Z@5_d5E>ib|Ud9v4mo#hy(MS ziF=Gsv}nE6N~Lsp%sM@kU$4@nm4a7eLDr&I-I(jt=HRzMbYaF;Mw6_rkdOl7uTO8n zvE{?C;T_oU%-p*=d%)>CU|42%|61nMz+S9g?Q;;Dkn=K_XjbCduZMM}bRu~qsccMm zO6`Zx{4Kp)K;dG*4X(sqwQ9@2UbSg|#`jWnF^msM8oPWGS$P)$KPp?o?Fl>#tAV4x z*p7|-(I+c2Zr%79f$aYhC;+YoFz{e5uS!RNob+6sSSI0l`Kh`)Xkjx(Y&k;pZQB}l zg<(TsF581>-iI;@H&srjo#e8F$D3H4A__EmU z!9?cNe72!iO=hpmp+xh0!`B(1w~J&ae~aSA`bpwaROqQWE>|AvP25HRI?mk6lx6MD zA+^7m-wFQ&7$5sNEvRpe8SGGFU}vwWBnbC&KG^ZLI_?ydbfpf$tU&;664x$Oe#HBJ zOHUwvR(`DAxOVQO;WFg-PhI!*>qT^2OI2tWg=PC}X9#)j8)AUh@u3PnQ0Ow0{2SNr z_*|Krfa6)+ne*r+>*OBGrNhR9v!e{$MJjTI zOTC=!hut{uOax5+wcC9#@wN;+*f!30p}YCO6YNfOeaYalE0SA2^NpoYE5NcUsj8oo zA)|0hhj*#D`G;F_SKwFR8&;64TnH^=OnIGx>>nQ9u9oPtz$xahZ2_W}w=T67Ji>=xAU3MQL=FHLIm^ zY3K3Je>rPoNKqz=h46T@>(%WzN>SDmJcK0;>d$XdmIrG4!wtTS_ z|C!qfcfX7MA9eE%Ccjg89efD~`@x;nAb3aHu*n<&e`h{OU;?uiu-O0Q`g=bv0f)i= zSr`cepVy*mnns*+(wC6%QI9#I#2^gkX=(+I3PeTNZ1ubrjfl7zcURY^Y}07RUbg1f z9@njUm9y;wuu-|2oRtTG=o2{|rm^w&lBTMvydHX-5&SkQ3^Jsf?pWip!MHk6r7&{B zM+7D%TXct^0wD%9#x}NE)rqO8?3CvI4GoyZ;VjD0)9hXa7e#3T7nc;s0dDeVWgC@WhMX%$j_;$DRTn4caJc9GoZsi+?lPwH=HKV- zW3&j{z>j`A)={e>mE3?|ZGxCcD7QWp;3CsxH}wQQ^g`xlpVeo#qAYsB7tOT^(Utd? zGPV~h?`9?>yW6#KS~0ewxNDP_yKZ)F+?$DgxnHEfTAG!_m1#s@*KC9k8>8&ff91bf zpm*C$h#4e@A;brY{L4aS1x6o~LT_bD83@!DXSG7VUkZ6X!pXdk0B~_}xs4Gm&77YV z$J8&t#3qpT+fwzc^+cPoR0ngP>TZdaV!Nqa$u?h|o5gnDZN#g619WyKMXVePcm7rg z4a+uav<@8^dp?5}VN39nTd}6=rYYH^!=49?`@6%yF%r337r6KBlGn;ent1>hL%>x5 zsQ3Qvh6J!c)1L--Nelo4fRU2ZIu^i6VKinHCu3W!hYNVoHWDQ6ckI=sRn>MFUtb(> zyuUt6iKUa;JG;~(3dWZ_s$o}otgRVRnBhT?qaOdvX*ys2v|Un_vrfpW;U!CYfQdDO zV@AXDkUdkWI6`Uot_Y0er{}cN{xMy+@5KAQMfzV)`ORUEdDfbT>&WIv(m7!TvkJre z=Ci{U^D=kgGc~`T(F<*^1aCa;GCKn%v)RI;nfT4?EgJ6q5@NA*Cid?(lQdh_d&Hvd zkB1nx%JKpd%>z(d$fIANwFT#%lsLKjUjX(N8Afqg8AAj}zs~H}@ZLY?p~t$` zVKkXb62n{h=3yx2hDO4zSn$DGNFb-J!LhDOf9ihheE+a0Nh1f&`HW!URk?k z$XjMFp)v+Fe&Wqv{ch*`HoNO-A?ae60XFet``1L)l#6O_Z|S@iEeGjk{fp`SY9|N& zI5IMxHjn>6q5R3VgsU=^IH{B#uJ`Ir(5o5=yg$vu=yR8QxNQRA)ZL*Ui`vTy>H}V1 z_lKB4!ztVbnS{VYoG3HK(RCnzLiCN&nid?B%@zuW56$ zRzb21tcO7q@IMB=v6fetY>7i*CIAo9p`iQ^Y&YMm36v*$>9eBb$DZxtZr zxnCZnt(~=G*Nm525hS3RwP7S_mF_?ue$s>5rWJ0|7KlQJ>B<(`Y2u91%2y0^Yb~9B zKJs_R$H`s~8zRva0WDtUUBKzXFiRZO%+z=pU*CB6tio}cnQw)O%a>4P)Y9k6__s?P zJHtIS`u+~+`ltL8CYMg5wZj`C;u(+&bnj7Yi0JI$_T5GM$K4Mu42t zC?zGpEbyVGCA(rvh}VnTTpAb{oA{`b?jY*;Q{+cK0bg71xOk!S;G6Ho6_Y)AKmM&t z+})Cs<*$wPT<K z@`-T8`%(ELp~EBV#nz~39~T3))t&4IO(`gT{Kzb^cCHgw0dVvcLoo$Hpr;q%C_7^I zOb*(sMM~m=!GhN$^^D$o6{O3Lgbng)arbTt{TrY(uMGKGrY5T)84lKFEoC5!OUya> zk6=6i@E8CnL4XUWlYsyp28aDcM(pH?Ip?CB+VE~=oAUM+y8K#wNK(UHO{%~AIi*FC zT0x>8nL{|TeQXVM<<_Lg`AohB18GQ6&Z-_~HWt$4yw``K#U?m=myUzGmm64c*3@|T z<_q41PD+zX1ecXihWs&Z1(Ojn4aVN~;yG8v=|0nMl{%p&2CVfdZ7{y_H_qkAz>6Zr z-r!&@#-@i55?O%?CS>2`DQfbt$lq2L&N#g(EO&RNyCDhCrw$FE6Ref5RMJBa-V+Aq z?`^j<#P_a~f(Wmp1`@(zLva_P_wexYOYMfpxX-Y3|42{|$tSlgAu3rMZ1+Wp|zWZ$l zhsdMa=Hy|?0UMr{wwCtXFIyict;Ep+^aiUXQFw4%#Xg+@Ohs$#0885~)+^&{5>C3y ze@hFBYq%SaEQ`c>0NZrhNgl7#6}(Xn_M@AC+X~w6}83cGF*n$20l@l(DZ9@~Vc*O`@ z*|9b;*mPbl`-PDzqBya)Hku+e2V-dM+VIA^i{d~8-3(PB1YgGecr~@AM;<`2k zH|vjP5?q0w&TopB%8Xn0D*aticOn0Yg$qIu6B7#;7f({JQF|cW^(|+&2z`O^-||;r z#dVMnX5ni!;iiO)zc@hP>0|s8m3s|pByv6`F=MAbNFb@+-x>o5`Gbn=yv zhNuRr4Oj;jRWty2Fn}BYA>!5ecnRa{S{Cya8lacS%~@xkzkj*D`+)ue2^_A~P>8M0 z`&)ZpK9j#fxq9Uc`3tPx_7L1_F$(7e6H{Y1 z-BniA3bB&sJ^iWy!(}>~eo8`}N+PC=9Nx!)10w^#8V~X#2Ec({Ho(qlw}3-Ea%gUQ zSkluSs1+cW034NuX``W)j$&Ut^8PSSqBmacg%HHIavG+zrNN)V12{?LG0ta;2kW9!mYmxlre`T4nTmu`6L^N zmDVhXaL&{#$EX!RDH4G{9-&JqntBVaSjk<^B54&SDY4a(ysqS?jmL}oLzjLuX2Glz z*Y8LF(H(SEmk4D^5&u5qAP49nUlpNwp1&Oin+I9Yf)@vZL-eAJw!-}8;fHGP1Oef6 zkw@IY`H00)pFcTvz;uxc$*CCQXVi9<&C%)?c3KcXY398a#QX@=HHHlY^_={bC0QZ) zp?0P@ARK+db+USC>aN0_^5c*Lfx^Q;V#$vq1e*vu#Pti#q8j_O2X42wr6ArQWMO&> z=f7vpE?Cgz#hmT3F9#c1)3} zCCjz_oFj)ka^E!|ue9uI9s@vBv4RN{qi%A(C<}CVAjEVA(yK zt1}k~$lH#+fRU?iMXgLhfh!aFS%je2&7{5| zTOs_9SyKmCb;T0Y9*CEIyJR7vaIl1T?p6JtXR=%>GPx(k&2p)u3d_G2_}fZ=fngZH z_7=Gc5sKgm3WL%p)$_e0lBWV;|Ft4l_r;kz^d$u0NrQJ-V}wX=?*XWtu3Z2oTm*4E zww$F^sEB73JF>MwYHKTAnU1@HvNuR^zo(^u*a(hA-n%jsXL36AB0+8^BOI#eomKtC zGY6`@K1pR7B_IR?{2tgm2ZG53XAL_BZW$EtkV;24%cUCZQLPoiOxBvY;9iX2^zv8w zxZkv&7SmNh3O4%twFfqrt{nV@K-8Gid(NFKpFI!LYIdj_*?3L$YfV@_rtzfA&e}*$ z`)g^4H`Fvc%^TB*Ih0NW+EJhWHOzSOK1}*@@m+?Xd#Vxh6R&^ZCTpkXyKY7u{w>wh zR`AE|VUK!)Jw94obCj=^PPS!Aoe%-ij1iGAcEE~#J+L3IN#t32!x4aX)i-?eOs3EeL~Ihirh{^U#e!M#0}7%IFuX(=|m^?oXao4*HseYwMyX7Wof zY}vbAElWsadnyA)@JBsqfFLhzR!P`qK9SO9tC6}f07cgLZmsF$`@YX0I3Wd?#2vkS z;?c1kD}8+90|p3!(VMo-M7J?J%9)T>1wLZtvy~!9kRU~k_Anvbq{P{=<6`0E;Fxor zXX45VEo;wvNu_{0x5(6zlT*8oTUnQOV_poCBgrJTW0Z&E@y>GI&jV2Y1-G{-@ZHO? zGX9Y|hUnCX&Uw@BU;dq)M~lxgM0_$`xsIR+d35K5HzmJx@|GCMSV?7kN)CPP$b2=T z0BxGh_Fg?1e`aK zs3sbJB#k7>Ur=G}J#!v0)TcFT_#fO^y*~rBsBg6qO!+H`IpoVBiB5)kj)>RS zrP+)+&?-hy8mzSX`Af0{=O>j^=EU;~*IUrS+w2dQKWbiz(dwzus953U$RfdV_nS#m z!yO}KBVHA3TXX6*n^Q|IN*7{yp!F903oioRiSyGT2Zz#o|>z0dvvFp0jEEO?Ob6+mImsQiu8Fpuys|6UQFb5W=K<2e|tnH#G?k*?SuU!Rs zm0HLXdp>ca-X|p<>ZbTV(H+@O;24g1`Zg_V{MB?;48g~Ie`nn?$A9_gkeHxDQ2-Q} z@(5QcDKgwJv|ul)kw++4L48SX5rUx%gC$BaJtGuhgk9>`=7A-}>g8PKQ~b+xKL|Q-!+gGFbr%)nNG#E0;P0XQ&w?%sNen`E%-M z`qN}JS~0EVj7(;8eyx*JW46FjJMik12%B83{>hKWY;_tECT7_u@zQdRxkjnV-I~+X zU(UiEch&6ORl0GISV4hbDvF{ikfe`ePFCRK;`kpBk$SlI!}$48c&rYm?AR72zPJ%Y zhUcm-;tr!~Mz?AVC<|jtlx;$y`5ZUO*%ucV0Ph`LBMFj9izE{kR?)!{cZ$&{%Kau1!bIPHSN*yiP zjs=4N65QbO^;j68-uO?qaoga}hM^gglcnkJ>2*06=@~UFOaLG*PNBe~z<*9%T1oaB z%+ioS!Q!uoMe5W z%Ac7D3T2>DTBcM+-EYU5IPUV)1NDq9$8aMko1R(@gU$DLva0D_EIqX)hS%wX#K_(@ zi1_Tq&O=#WT8C51c!q?$r>v>!C%Ktt+Y=dF{BRX!d5Vxcxxpw;NI#D8I!@c1@BCsPWa_5Y;e>h^wX)M_#k?`Wq1AB&~@RW%sV;EsVS zA{dkNj)bW;H2Sp_W{;e_%@dEo7OOcqIzUi&pgB?S9J?`HCs~~wbgy21uD%_W{$^z?lfYuvy{h)9|80LAOAI^x= zbC@alnH;kx&lzMPA5W&2{l;108gC8P#LihnVUMZ@54(#!hy4-w%k-eGIrT$aR^;ks z((hT67bYC7`u>vfFxwC;%6UJmQ+n3PGbt{E+H7i^jtpCk>#H5AQonRJkq3gN=!KQV zgg@#zfl`1s973iy{_iE?-r{DR)C61%!J_}&@f^d5toN7UM_{YWxF@fk?(;nfa-T6m z5o-6+B}y)Qv*3tK!-ewxPd&I=s4y})^{uBsIAh`v zv?f&d)r2y1Mo}R)ZsbC>?T>?u6$ZX1hRqioC8n}>t$)9gad>;}yQ$~Ywim&#?t(D^ zIX$)4xO)DT_)no^B-62UHN6;+E6aa7L>87fSR8|eJ@IduDYCQzkFM@a<{S1N09+Dq z8jS*UM&(aQR5&Mt9wF{3uDxI!Ya78e#?DpwtWl zl~aDy&1+P;Es1|822yI7!cw^(D}K9O;ZYR(Xc_F;3R7v`Tzk=5R}T5A=w=>WES|#$ zDS+`W6>S<#=1fceyF1&wvP;$5QyF>TsQ9Od1N$G>-(}*s!XJjht*&=SSw}gp zr=D}tl1X9K2U$zT9E)pI zjAq=dAq^|!`ISX-2zj~zX)nz_@%WLh%H+2f3w8MpBopm-8 z7(kSqVS*u+*s8hB*MB9Rw@+YswOE`kfR@n+!^Wk<0ddpa?kNoMxG?YtQRVM@9@|2( z#&Nh8xxZm*5q!gVaa1b=#`IJt$N_$qsX+ zGYBsBP5j{o(B)B`fSAPr^oKB(3*6$C@z}fI(eOPG0Xg6w@X(K2%FrWc82Xc>&BLcT zSyvQY_>K)3hUF|@f;rbggE1CH}B5FLrM2m3k6Gt>GN${-b44|2c3%FR5G+n@-KY^q6WCHR$e3sSIRE_r5I--_>b&-j0 zg76dq0k$=7%)Jk6OtO|2O>ux=5S?G~XgIqcw*W0^1z%jf#YP*|rgbXrUY`(H-v6^Z%HbQPN1$@CdU=S**gGD9G`{I@ zVk_&4XcS4-A;WFurJGWDq(L3T8q5Mbdq+z~a@6^MCgJFoBP|1+6+OBW61J z$fGLzl6lm#kE<5>nklEZ0UypN`T=I!k0%*5Lb$)4SOR0v9(Zohp@|+VETygmwY||Z zZZJvU81nFuwZJ-1Nx(lbzCqZ3KE#3<_7$UcAp42XrzAa8G)$voUFL;b(;0Fl z+yzhTegU@md8Dq$EUgUjt1CjXLcotSVZl$VYWvU-vlLRAuo@rA)&`yw(LqK0@6b`# zfWW$_{mY%(fy0}*t*tgx;iwNkGe!3O_MMsuq$=D{j;dUC_sk- z!Zkp>Bx`T$$BDAD%kPEIyz!l`EsJ z43}fd*JA2s;X=3yrR0^gvnc3t_`}Viqw@=um~@}=3#HaX#)5T!(yk5(ZXDx&DVF*f z%VwV(Ghh7uROVEg{#oit(VN|DOX!-66O&~Y-whHse3c?wM>qeIOUlWC`Y=!FrmBjI zv;qs)Ep`U5^wddr?EAYE)=F_|Afly$Y?A)py?6>iIB)q8M|KBR+5D%PA>#qJU!r|` z36}j~8QY{C5r)<;1fEG-#HD+fD*8~6Y_^;d6?(EbV<~yG0Nyx*540#()C{o!LndU(C+f) z9;>W5zQus)^67QP!B_WNNshPymgJ9-IK#fbvV(;`{$;A)SgAaTfK94y**WeKHhm0l zt!U~RE$XN62RsmhZ^N5U75tWrUJQ}@J=<|hBxO;?#Ghc(8nC7`Br^dWhvM^!PmooL z*8%Z06-j2dz<+7assD^k%1+^9z32s|16FZ&glnodAg3`RW(HCu?~DK$x@l-V13ll; zrqnj$luIquu+2cXSEj^F_2)0y-yvLob>X>UWy?~;LC7qy(jkzi`%gFLKXT4dW^ad{ zG>Ld98;-AKN+xyeH2%r#Lb!hI!dtsGV);v4aE9L`$x-0)m1-8gXr>rlc7lXWR?#|S zN;1Lw9)A+hwt3>^oh6ynxYIcFTB%En>C0nzlTHO)u4=|C9k)`!W8_kKCZgT=t$Ofc zXXLjh9<@zPqjaBE-|VUxm#8VVidm+5BV*V&)Y2ho^}1X(R?h_WX-*$2v8cvx{SKa4 z%#}xv>FB4pRnK`|l~VQhf_+>^(iZ1Yq0fmghZ781GcCPazRq3S)~7Y_*uBmz0XC_= z#bCc1U7y}B>h%F_ChX+>3fpcM9x07N1!{=wOgE^ z^T7o8lc;|PKEdqTJS~2AJbbj)e`@XAr?{NYqn;yi^}f|zMNK^i1z-x&Sz#2lx~%oJ zg$^bxE@ufOh_PpuYRoOJIq!}eaJ*Ilot0}!myvObii*BvVi}(3!XtBi+9>L=-UCjS zo63AKH;eaqJ5%y>fH{)0$9=pi+Wui(q|y5W@vBcQV>RfvJ%ouxJR1LKAW!;5J=mMu zS>gc5DU5|mR!wr~nfYX z6w->d>+`)0ii^j?F=w=)QQ?N$pRS=%A*WS+>QZ^YG8LeL*1-|)_ z4c?TXsp=*V8l6fion*ye+}2Ze5*qoEe2kx^!RqGR=iTj+S~`h4L3dv|*#Vn5r1ajx zSxhQ7pl;~1M>i&22|gEcyhgt^9ngEYpjRs&kXNel5Nq20b2h_CdtP-&qE-m~$4q7C z^={R?^~3$0#0z8N%n_dasQE0&uK02no|Se0I<|sIeQ&_Ps`Ku<3A#Xnp1l6MNHhv) z4Vf9@=Fw&WK5)9xYPpoB(8=xc6&jKT6yAX4hZ@WGr98JBbnRpTd9|wOM{EM2&8b#; z`{1N<%53GEfkqLJumt~avl%3C$PBDV5uXo~+bbIz1&hV{Q9&vzy&~el{u1%HD%wrk zZ81xL=6_kvh^nj*9sweJQndM06)VMQSjnb43l)6sh@tD}5^xkRwDMr68C^`uBlO3p zn@1zOfq+$0-a|Gx)gN5p+$8!fTUFA&|>_aQKHD@Tcc`Uhw^KW6jnvw0o|K& zzYqVo$SwUmw>fxUWqrt!@skvfye#YFqDcp_{clGCqu2eL(mt)KA!G8VQ9i2&K8FW` z@$L(T!^1|(D(hLn^Rl#)gmKvKH9yHi3+kWK|fq*E#B81kLp z`@P>Eckc7t=bpRIS$plX_TF4YNB(!=VxxciWi7`5fDw4E zD39>YKFGoGMhs94h0|xgfI{M93&|4-84I6jlX6`s>pGR=8aA-N@;M`-n3W)kJ8Z}^ z7!#!9S6S4ys=`fw*a@52WQ#fLJic&iTrYAOa+-5sbH1QAx#|i5bM$i9LttCvq5>ezg zmRgqgv(5E0#gD4FIH6yU*Y1isWPbgS#OsD^Ej+BYWmiU zO=N7-{B~(;!>sFiY%7f<<^C@GSx-O+$+MMiu@`x=A;n&Y^547sZ;?#MC|6lFvw?|gC?U0w;@kEuiuQv~3$GGi zI(O-X5z(@Ht-Nnl%NEy8oTEzrjYy;07Pb#+%j3GeB{8$Z*nH)M zQQMJChNxqKTAr-IU|b%v*OKUOp!j9$^7mR(5{IR09*n4sxWlW^PlOA*Ki^!$enLqa`TUdmYcH)4L(pv`qK{$GEaw4Wf9r0rbXU!y~_!jCp)( zdjBe%xT||-C9q!ls8`&m<6Vu@!l$v}i-XTLL$O`kUcT3S^Bo>##U*dj49w>FvYwQT zg%Q29Ug|Kgo}hs@ECa9R8-LJ{bKBhCme5Flv>A-{p&2eZzicxO%rm?8%W>fO8p)B% z#*yuk`q%?eH5&!3GS%-mW71pKegBukV!P;;0O7qAH?5JoTvxqaf!~KtJ&AzGeyc93s`FlvJ`J~lx%Xy|w zH7$m=)qbn!is(0U^~_I;7VJrUqVHRc7V?$j8BNd3d>w*1kNQk}?osnJnC{l2$&@0! z^hslUwD!q$R+y(Z#Yw*Q@NC}Su>ErFqP3$}15ph0pRZF^WQy|0n*AB_y{(f{^^I{o zUzcm~4BbW30E^xL;JfP}VK(MqOn(;mYdk}EE5~bD@Z@5_d5E>ib|Ud9v4mo#hy(MS ziF=Gsv}nE6N~Lsp%sM@kU$4@nm4a7eLDr&I-I(jt=HRzMbYaF;Mw6_rkdOl7uTO8n zvE{?C;T_oU%-p*=d%)>CU|42%|61nMz+S9g?Q;;Dkn=K_XjbCduZMM}bRu~qsccMm zO6`Zx{4Kp)K;dG*4X(sqwQ9@2UbSg|#`jWnF^msM8oPWGS$P)$KPp?o?Fl>#tAV4x z*p7|-(I+c2Zr%79f$aYhC;+YoFz{e5uS!RNob+6sSSI0l`Kh`)Xkjx(Y&k;pZQB}l zg<(TsF581>-iI;@H&srjo#e8F$D3H4A__EmU z!9?cNe72!iO=hpmp+xh0!`B(1w~J&ae~aSA`bpwaROqQWE>|AvP25HRI?mk6lx6MD zA+^7m-wFQ&7$5sNEvRpe8SGGFU}vwWBnbC&KG^ZLI_?ydbfpf$tU&;664x$Oe#HBJ zOHUwvR(`DAxOVQO;WFg-PhI!*>qT^2OI2tWg=PC}X9#)j8)AUh@u3PnQ0Ow0{2SNr z_*|Krfa6)+ne*r+>*OBGrNhR9v!e{$MJjTI zOTC=!hut{uOax5+wcC9#@wN;+*f!30p}YCO6YNfOeaYalE0SA2^NpoYE5NcUsj8oo zA)|0hhj*#D`G;F_SKwFR8&;64TnH^=OnIGx>>nQ9u9oPtz$xahZ2_W}w=T67Ji>=xAU3MQL=FHLIm^ zY3K3Je>rPoNKqz=h46T@>(%WzN>SDmJcK0;>d$XdmIrG4!wtTS_ z|C!qfcfX7MA9eE%Ccjg89efD~`@x;nAb3aHu*n<&e`h{OU;?uiu-O0Q`g=bv0f)i= zSr`cepVy*mnns*+(wC6%QI9#I#2^gkX=(+I3PeTNZ1ubrjfl7zcURY^Y}07RUbg1f z9@njUm9y;wuu-|2oRtTG=o2{|rm^w&lBTMvydHX-5&SkQ3^Jsf?pWip!MHk6r7&{B zM+7D%TXct^0wD%9#x}NE)rqO8?3CvI4GoyZ;VjD0)9hXa7e#3T7nc;s0dDeVWgC@WhMX%$j_;$DRTn4caJc9GoZsi+?lPwH=HKV- zW3&j{z>j`A)={e>mE3?|ZGxCcD7QWp;3CsxH}wQQ^g`xlpVeo#qAYsB7tOT^(Utd? zGPV~h?`9?>yW6#KS~0ewxNDP_yKZ)F+?$DgxnHEfTAG!_m1#s@*KC9k8>8&ff91bf zpm*C$h#4e@A;brY{L4aS1x6o~LT_bD83@!DXSG7VUkZ6X!pXdk0B~_}xs4Gm&77YV z$J8&t#3qpT+fwzc^+cPoR0ngP>TZdaV!Nqa$u?h|o5gnDZN#g619WyKMXVePcm7rg z4a+uav<@8^dp?5}VN39nTd}6=rYYH^!=49?`@6%yF%r337r6KBlGn;ent1>hL%>x5 zsQ3Qvh6J!c)1L--Nelo4fRU2ZIu^i6VKinHCu3W!hYNVoHWDQ6ckI=sRn>MFUtb(> zyuUt6iKUa;JG;~(3dWZ_s$o}otgRVRnBhT?qaOdvX*ys2v|Un_vrfpW;U!CYfQdDO zV@AXDkUdkWI6`Uot_Y0er{}cN{xMy+@5KAQMfzV)`ORUEdDfbT>&WIv(m7!TvkJre z=Ci{U^D=kgGc~`T(F<*^1aCa;GCKn%v)RI;nfT4?EgJ6q5@NA*Cid?(lQdh_d&Hvd zkB1nx%JKpd%>z(d$fIANwFT#%lsLKjUjX(N8Afqg8AAj}zs~H}@ZLY?p~t$` zVKkXb62n{h=3yx2hDO4zSn$DGNFb-J!LhDOf9ihheE+a0Nh1f&`HW!URk?k z$XjMFp)v+Fe&Wqv{ch*`HoNO-A?ae60XFet``1L)l#6O_Z|S@iEeGjk{fp`SY9|N& zI5IMxHjn>6q5R3VgsU=^IH{B#uJ`Ir(5o5=yg$vu=yR8QxNQRA)ZL*Ui`vTy>H}V1 z_lKB4!ztVbnS{VYoG3HK(RCnzLiCN&nid?B%@zuW56$ zRzb21tcO7q@IMB=v6fetY>7i*CIAo9p`iQ^Y&YMm36v*$>9eBb$DZxtZr zxnCZnt(~=G*Nm525hS3RwP7S_mF_?ue$s>5rWJ0|7KlQJ>B<(`Y2u91%2y0^Yb~9B zKJs_R$H`s~8zRva0WDtUUBKzXFiRZO%+z=pU*CB6tio}cnQw)O%a>4P)Y9k6__s?P zJHtIS`u+~+`ltL8CYMg5wZj`C;u(+&bnj7Yi0JI$_T5GM$K4Mu42t zC?zGpEbyVGCA(rvh}VnTTpAb{oA{`b?jY*;Q{+cK0bg71xOk!S;G6Ho6_Y)AKmM&t z+})Cs<*$wPT<K z@`-T8`%(ELp~EBV#nz~39~T3))t&4IO(`gT{Kzb^cCHgw0dVvcLoo$Hpr;q%C_7^I zOb*(sMM~m=!GhN$^^D$o6{O3Lgbng)arbTt{TrY(uMGKGrY5T)84lKFEoC5!OUya> zk6=6i@E8CnL4XUWlYsyp28aDcM(pH?Ip?CB+VE~=oAUM+y8K#wNK(UHO{%~AIi*FC zT0x>8nL{|TeQXVM<<_Lg`AohB18GQ6&Z-_~HWt$4yw``K#U?m=myUzGmm64c*3@|T z<_q41PD+zX1ecXihWs&Z1(Ojn4aVN~;yG8v=|0nMl{%p&2CVfdZ7{y_H_qkAz>6Zr z-r!&@#-@i55?O%?CS>2`DQfbt$lq2L&N#g(EO&RNyCDhCrw$FE6Ref5RMJBa-V+Aq z?`^j<#P_a~f(Wmp1`@(zLva_P_wexYOYMfpxX-Y3|42{|$tSlgAu3rMZ1+Wp|zWZ$l zhsdMa=Hy|?0UMr{wwCtXFIyict;Ep+^aiUXQFw4%#Xg+@Ohs$#0885~)+^&{5>C3y ze@hFBYq%SaEQ`c>0NZrhNgl7#6}(Xn_M@AC+X~w6}83cGF*n$20l@l(DZ9@~Vc*O`@ z*|9b;*mPbl`-PDzqBya)Hku+e2V-dM+VIA^i{d~8-3(PB1YgGecr~@AM;<`2k zH|vjP5?q0w&TopB%8Xn0D*aticOn0Yg$qIu6B7#;7f({JQF|cW^(|+&2z`O^-||;r z#dVMnX5ni!;iiO)zc@hP>0|s8m3s|pByv6`F=MAbNFb@+-x>o5`Gbn=yv zhNuRr4Oj;jRWty2Fn}BYA>!5ecnRa{S{Cya8lacS%~@xkzkj*D`+)ue2^_A~P>8M0 z`&)ZpK9j#fxq9Uc`3tPx_7L1_F$(7e6H{Y1 z-BniA3bB&sJ^iWy!(}>~eo8`}N+PC=9Nx!)10w^#8V~X#2Ec({Ho(qlw}3-Ea%gUQ zSkluSs1+cW034NuX``W)j$&Ut^8PSSqBmacg%HHIavG+zrNN)V12{?LG0ta;2kW9!mYmxlre`T4nTmu`6L^N zmDVhXaL&{#$EX!RDH4G{9-&JqntBVaSjk<^B54&SDY4a(ysqS?jmL}oLzjLuX2Glz z*Y8LF(H(SEmk4D^5&u5qAP49nUlpNwp1&Oin+I9Yf)@vZL-eAJw!-}8;fHGP1Oef6 zkw@IY`H00)pFcTvz;uxc$*CCQXVi9<&C%)?c3KcXY398a#QX@=HHHlY^_={bC0QZ) zp?0P@ARK+db+USC>aN0_^5c*Lfx^Q;V#$vq1e*vu#Pti#q8j_O2X42wr6ArQWMO&> z=f7vpE?Cgz#hmT3F9#c1)3} zCCjz_oFj)ka^E!|ue9uI9s@vBv4RN{qi%A(C<}CVAjEVA(yK zt1}k~$lH#+fRU?iMXgLhfh!aFS%je2&7{5| zTOs_9SyKmCb;T0Y9*CEIyJR7vaIl1T?p6JtXR=%>GPx(k&2p)u3d_G2_}fZ=fngZH z_7=Gc5sKgm3WL%p)$_e0lBWV;|Ft4l_r;kz^d$u0NrQJ-V}wX=?*XWtu3Z2oTm*4E zww$F^sEB73JF>MwYHKTAnU1@HvNuR^zo(^u*a(hA-n%jsXL36AB0+8^BOI#eomKtC zGY6`@K1pR7B_IR?{2tgm2ZG53XAL_BZW$EtkV;24%cUCZQLPoiOxBvY;9iX2^zv8w zxZkv&7SmNh3O4%twFfqrt{nV@K-8Gid(NFKpFI!LYIdj_*?3L$YfV@_rtzfA&e}*$ z`)g^4H`Fvc%^TB*Ih0NW+EJhWHOzSOK1}*@@m+?Xd#Vxh6R&^ZCTpkXyKY7u{w>wh zR`AE|VUK!)Jw94obCj=^PPS!Aoe%-ij1iGAcEE~#J+L3IN#t32!x4aX)i-?eOs3EeL~Ihirh{^U#e!M#0}7%IFuX(=|m^?oXao4*HseYwMyX7Wof zY}vbAElWsadnyA)@JBsqfFLhzR!P`qK9SO9tC6}f07cgLZmsF$`@YX0I3Wd?#2vkS z;?c1kD}8+90|p3!(VMo-M7J?J%9)T>1wLZtvy~!9kRU~k_Anvbq{P{=<6`0E;Fxor zXX45VEo;wvNu_{0x5(6zlT*8oTUnQOV_poCBgrJTW0Z&E@y>GI&jV2Y1-G{-@ZHO? zGX9Y|hUnCX&Uw@BU;dq)M~lxgM0_$`xsIR+d35K5HzmJx@|GCMSV?7kN)CPP$b2=T z0BxGh_Fg?1e`aK zs3sbJB#k7>Ur=G}J#!v0)TcFT_#fO^y*~rBsBg6qO!+H`IpoVBiB5)kj)>RS zrP+)+&?-hy8mzSX`Af0{=O>j^=EU;~*IUrS+w2dQKWbiz(dwzus953U$RfdV_nS#m z!yO}KBVHA3TXX6*n^Q|IN*7{yp!F903oioRiSyGT2Zz#o|>z0dvvFp0jEEO?Ob6+mImsQiu8Fpuys|6UQFb5W=K<2e|tnH#G?k*?SuU!Rs zm0HLXdp>ca-X|p<>ZbTV(H+@O;24g1`Zg_V{MB?;48g~Ie`nn?$A9_gkeHxDQ2-Q} z@(5QcDKgwJv|ul)kw++4L48SX5rUx%gC$BaJtGuhgk9>`=7A-}>g8PKQ~b+xKL|Q-!+gGFbr%)nNG#E0;P0XQ&w?%sNen`E%-M z`qN}JS~0EVj7(;8eyx*JW46FjJMik12%B83{>hKWY;_tECT7_u@zQdRxkjnV-I~+X zU(UiEch&6ORl0GISV4hbDvF{ikfe`ePFCRK;`kpBk$SlI!}$48c&rYm?AR72zPJ%Y zhUcm-;tr!~Mz?AVC<|jtlx;$y`5ZUO*%ucV0Ph`LBMFj9izE{kR?)!{cZ$&{%Kau1!bIPHSN*yiP zjs=4N65QbO^;j68-uO?qaoga}hM^gglcnkJ>2*06=@~UFOaLG*PNBe~z<*9%T1oaB z%+ioS!Q!uoMe5W z%Ac7D3T2>DTBcM+-EYU5IPUV)1NDq9$8aMko1R(@gU$DLva0D_EIqX)hS%wX#K_(@ zi1_Tq&O=#WT8C51c!q?$r>v>!C%Ktt+Y=dF{BRX!d5Vxcxxpw;NI#D8I!@c1@BCsPWa_5Y;e>h^wX)M_#k?`Wq1AB&~@RW%sV;EsVS zA{dkNj)bW;H2Sp_W{;e_%@dEo7OOcqIzUi&pgB?S9J?`HCs~~wbgy21uD%_W{$^z?lfYuvy{h)9|80LAOAI^x= zbC@alnH;kx&lzMPA5W&2{l;108gC8P#LihnVUMZ@54(#!hy4-w%k-eGIrT$aR^;ks z((hT67bYC7`u>vfFxwC;%6UJmQ+n3PGbt{E+H7i^jtpCk>#H5AQonRJkq3gN=!KQV zgg@#zfl`1s973iy{_iE?-r{DR)C61%!J_}&@f^d5toN7UM_{YWxF@fk?(;nfa-T6m z5o-6+B}y)Qv*3tK!-ewxPd&I=s4y})^{uBsIAh`v zv?f&d)r2y1Mo}R)ZsbC>?T>?u6$ZX1hRqioC8n}>t$)9gad>;}yQ$~Ywim&#?t(D^ zIX$)4xO)DT_)no^B-62UHN6;+E6aa7L>87fSR8|eJ@IduDYCQzkFM@a<{S1N09+Dq z8jS*UM&(aQR5&Mt9wF{3uDxI!Ya78e#?DpwtWl zl~aDy&1+P;Es1|822yI7!cw^(D}K9O;ZYR(Xc_F;3R7v`Tzk=5R}T5A=w=>WES|#$ zDS+`W6>S<#=1fceyF1&wvP;$5QyF>TsQ9Od1N$G>-(}*s!XJjht*&=SSw}gp zr=D}tl1X9K2U$zT9E)pI zjAq=dAq^|!`ISX-2zj~zX)nz_@%WLh%H+2f3w8MpBopm-8 z7(kSqVS*u+*s8hB*MB9Rw@+YswOE`kfR@n+!^Wk<0ddpa?kNoMxG?YtQRVM@9@|2( z#&Nh8xxZm*5q!gVaa1b=#`IJt$N_$qsX+ zGYBsBP5j{o(B)B`fSAPr^oKB(3*6$C@z}fI(eOPG0Xg6w@X(K2%FrWc82Xc>&BLcT zSyvQY_>K)3hUF|@f;rbggE1CH}B5FLrM2m3k6Gt>GN${-b44|2c3%FR5G+n@-KY^q6WCHR$e3sSIRE_r5I--_>b&-j0 zg76dq0k$=7%)Jk6OtO|2O>ux=5S?G~XgIqcw*W0^1z%jf#YP*|rgbXrUY`(H-v6^Z%HbQPN1$@CdU=S**gGD9G`{I@ zVk_&4XcS4-A;WFurJGWDq(L3T8q5Mbdq+z~a@6^MCgJFoBP|1+6+OBW61J z$fGLzl6lm#kE<5>nklEZ0UypN`T=I!k0%*5Lb$)4SOR0v9(Zohp@|+VETygmwY||Z zZZJvU81nFuwZJ-1Nx(lbzCqZ3KE#3<_7$UcAp42XrzAa8G)$voUFL;b(;0Fl z+yzhTegU@md8Dq$EUgUjt1CjXLcotSVZl$VYWvU-vlLRAuo@rA)&`yw(LqK0@6b`# zfWW$_{mY%(fy0}*t*tgx;iwNkGe!3O_MMsuq$=D{j;dUC_sk- z!Zkp>Bx`T$$BDAD%kPEIyz!l`EsJ z43}fd*JA2s;X=3yrR0^gvnc3t_`}Viqw@=um~@}=3#HaX#)5T!(yk5(ZXDx&DVF*f z%VwV(Ghh7uROVEg{#oit(VN|DOX!-66O&~Y-whHse3c?wM>qeIOUlWC`Y=!FrmBjI zv;qs)Ep`U5^wddr?EAYE)=F_|Afly$Y?A)py?6>iIB)q8M|KBR+5D%PA>#qJU!r|` z36}j~8QY{C5r)<;1fEG-#HD+fD*8~6Y_^;d6?(EbV<~yG0Nyx*540#()C{o!LndU(C+f) z9;>W5zQus)^67QP!B_WNNshPymgJ9-IK#fbvV(;`{$;A)SgAaTfK94y**WeKHhm0l zt!U~RE$XN62RsmhZ^N5U75tWrUJQ}@J=<|hBxO;?#Ghc(8nC7`Br^dWhvM^!PmooL z*8%Z06-j2dz<+7assD^k%1+^9z32s|16FZ&glnodAg3`RW(HCu?~DK$x@l-V13ll; zrqnj$luIquu+2cXSEj^F_2)0y-yvLob>X>UWy?~;LC7qy(jkzi`%gFLKXT4dW^ad{ zG>Ld98;-AKN+xyeH2%r#Lb!hI!dtsGV);v4aE9L`$x-0)m1-8gXr>rlc7lXWR?#|S zN;1Lw9)A+hwt3>^oh6ynxYIcFTB%En>C0nzlTHO)u4=|C9k)`!W8_kKCZgT=t$Ofc zXXLjh9<@zPqjaBE-|VUxm#8VVidm+5BV*V&)Y2ho^}1X(R?h_WX-*$2v8cvx{SKa4 z%#}xv>FB4pRnK`|l~VQhf_+>^(iZ1Yq0fmghZ781GcCPazRq3S)~7Y_*uBmz0XC_= z#bCc1U7y}B>h%F_ChX+>3fpcM9x07N1!{=wOgE^ z^T7o8lc;|PKEdqTJS~2AJbbj)e`@XAr?{NYqn;yi^}f|zMNK^i1z-x&Sz#2lx~%oJ zg$^bxE@ufOh_PpuYRoOJIq!}eaJ*Ilot0}!myvObii*BvVi}(3!XtBi+9>L=-UCjS zo63AKH;eaqJ5%y>fH{)0$9=pi+Wui(q|y5W@vBcQV>RfvJ%ouxJR1LKAW!;5J=mMu zS>gc5DU5|mR!wr~nfYX z6w->d>+`)0ii^j?F=w=)QQ?N$pRS=%A*WS+>QZ^YG8LeL*1-|)_ z4c?TXsp=*V8l6fion*ye+}2Ze5*qoEe2kx^!RqGR=iTj+S~`h4L3dv|*#Vn5r1ajx zSxhQ7pl;~1M>i&22|gEcyhgt^9ngEYpjRs&kXNel5Nq20b2h_CdtP-&qE-m~$4q7C z^={R?^~3$0#0z8N%n_dasQE0&uK02no|Se0I<|sIeQ&_Ps`Ku<3A#Xnp1l6MNHhv) z4Vf9@=Fw&WK5)9xYPpoB(8=xc6&jKT6yAX4hZ@WGr98JBbnRpTd9|wOM{EM2&8b#; z`{1N<%53GEfkqLJumt~avl%3C$PBDV5uXo~+bbIz1&hV{Q9&vzy&~el{u1%HD%wrk zZ81xL=6_kvh^nj*9sweJQndM06)VMQSjnb43l)6sh@tD}5^xkRwDMr68C^`uBlO3p zn@1zOfq+$0-a|Gx)gN5p+$8!fTUFA&|>_aQKHD@Tcc`Uhw^KW6jnvw0o|K& zzYqVo$SwUmw>fxUWqrt!@skvfye#YFqDcp_{clGCqu2eL(mt)KA!G8VQ9i2&K8FW` z@$L(T!^f?t9c@ff!Q@cI8v08oxTAN14(08HF>JK6i3`53Y;5|Q|N*hT=)z`Dxw zga`m)aRqSM0iZa&aAF693>4@vWTgQp%>t4i1IUnXh*Q&H3_x`+prsDLduUMXD0r`n zJP(BgAOfhDcz(X4PH*L$>pw&>@CW})x2=+}I@FaNhGQaNE&#vD;MerR(~tmMrda~J zRU5E$je*Ts;7=jP=rq|ioWUQt>~7ec3*HVYz`4r9V!=ib|3ImNEzcwb?c~UG1*TB; zIa08b(ghK?G8>e$PZPAy_og#oV2dz42>N^`UQ0C`8WK+1F2=8+bY*7R_p=mbPLuDl zmdJsC;0MLLlv_%YVEk>^L!6hbYf7XBe=*mU$PQqZBD2kzXT%Qfo~6qa!}E813~eSG zLIg_W8pMhBhKR9O*#3Y0lNFOzz_(E_XXic1E6dkqz5%b(N;y1Xj0klCP_y~ywfZeQo8`Ns8D8Np=8 ztO_`FD`igyw2*R?aTvOurIWUuY$*Ba=;K~@;9xO)`J=fdIS?gCB`3>g>%!(B_|~j< zPoMgFSF9BnL?KZ4f9-8h>Gut&9S-KfqjcEV#h#>hvabB|Y|k8(KBWU_}jit+hrf37NxL0AS~qIY$dbo#$g{ z`+l%!yQUhPwph&feot69mL;1vtdd<_DfH|DM>lX5lCGMXt{Nxm$z7wnVOvy}U0p)R zr*|bqJC{MsE+mS1nILVgMEoy*ME>LY22!9+5p{vcPj(CSK!x#^IL=t^I$hx*On9`7 zc)sV9y;sAO_#*D6_+RU3lE9y8#HjYA7Wi&Q4EPogn7_gV}c5%DAFnm9#&5jPFMRb=PN?l#} z_Mx0aw?kS6wmBdZisa#OT9}{!#>bmLYsHZeCGMu{@jltB*lH*M&CWo`7G4`^{XlRIz{@lEhJo)-MQrS4L zA$Fqc@~1*g+mB*<(6}NwHQ2$sDna_>LjB;#{e5&oyoj{ZB1{GB=-?-Eq-;0hRRvyh z0Bl*q(8!2?k3n{DZ~($gEN=0&R8;tK0E*Rz*F{hX(6?C_Tx(O}?}?wfp4Uo6lilUI zlqbRaJA!N$zmaU>1X~d<>iae7O(k{Yn(j1Y-WKf}@ofh8yqXP^_T(lFsM}?4T)KL7 zQ1Ib{b$5GvyErzs3%^EYKY#H;qLZtBt_+~cVm$P?-q4A|MTb2-Ju^Kn8QYec9eFYI zAfo#<@`_0O*b>erB_%mwnl6`{5(pzVAnv=}6N%*aCG0B(z!|-PGt^gvc~)4atai=a zyH~$WPAVJg=;$mj{R)cN%E~>9b@7A?#R2O{Emym)>r;~cYvz`gmY|j& zd2ET?FiO>f2M_qBhO!KTj4cE|nOa=;iC*+ZW+G}_aWC&p=IF;q$1&hvBoDVFJ(8TR zr_*v6lykSXLPm1W1jb{=efRkse*hX;qd1_nB6POX>)b#p{YIFYnriIax$|QiU4(EY z8g|$xSfRdn01a`ZnpZ$x3?&B|sufz4NIpw{_UxJO;l{WlcCZlJPq?ad9yxei{tBPB zeU?uaQ2Xgg&UPrUeQR-s?CrYFOof$vo;vL^n{8_E?(Pl^Gp?yd_P^z1BYW}r*8uL< z)P*FR?PC_PdMhIsi*sQuuznmrcI;p?t+&#FvusuMY!qh$aVvoH7&oPOhHFr9^X8GSKR!Hozz7+xfGlS*cbXr~-+^c?oy$)(lTn!yaTn0E zH&SpE-dhgP@~-PnQ&{QZ3Hx5ZcyR^xVg;YUb<1?#sYjsZ09(&}Mx`grQ5Wqj8G%b* za+75WuE~%YSy@>Xm6ajwV^8xQa8j4^v}7rv59QUu1!fNm%21mjyA|jv#0co^GAuZo zVmM={6REhyx%oblhmsdZp-RI}oH!vZagy>H?8k5{IC6XyXT21X`C>8hdb;G;)BV3m}V)+f7hXHqb^k(AdgXPa!PZJX?PySO}D zz<8(!KwKiYnkDHo_V85;%k5HDp+7FCx2CL}GU+p+_aO4zG=4haCc^Cvg2`GRI>>D= zX6NS(=70b8fSRXO*VorqZj}M}j=W}FC{UB0v>c;9y|6RXdEp*YQwhU=w zedTuxj+8otTpcy?)(Inj@2B{jhrne_L4!JRvQX0Z*UJ|#o_+oLwZB6(S;)pL>?n0H zUJbU!1&xP3e8IHc(Icf>H(r44?Pqa0>FcigcZXM0kx%w>*d-{a`v)WEjXjgKWp z0rkV+g!?)RaVD^hdG+bT;SXiK{*!}}0oe;cX;JtzbyvJUgMGr^+uIB?6|7mrw`XH= zWBkWi#2N{Pvt8U>TmT6-D6JhS4)~gJ9&g58L=Y2;&K^5w~e+R-YX8lGf>)qi=k0!&%14wetz$bIa#(;qtx+hm^})!2EaSK z)4AkGqZDvJ*7Lo{6sm0AVL8reOz$9!6Br#9HjXrm3f|uyt=@>Vo@Z-m+I2z}vWjYJ zqYSt{yTz1#2Xcd>{KK?D$GtI)pICOy1xA`h9^w=iSP8nVsi`Ua=TPGV$*DHK9f;;^ zcR1+U^dP)AlA6U5tKP(1QbM8$67Wu*DIEfJHq^TWI?S47*O}jZD3BhTs1yXn`zUfS z(iOVUQmkch?~h$+!!Kv=D9dI z?SV}YG>SASGntAjpmBBJtq0ujrU`aUS>lf%J@P=(Os5XUsBROC!Br4g)E0|4wg<#T zoplJmj=|=*^Hy6rK7INmIc4QCFr_uGj*JV)Ds49o+mlZZ#)c0MHO4>QTW;4PF+gpW zC@@*5hj{+qA;^Cun&>S(`2PL-rLABjVI17R7pCPVF2I2fj)FuyzU#NZa(T9YLnynu z8qVvd!5h^ExJ^ap&yS&hCRKRhw5*b>ITja+i+vi}+UN*wt6%!ws4a!ZDo@9Yzeh=!2!mAq3o~AfeQuumt=XLz`D9 z6bhTwtfF}C^=;{LU_MnRL)##f_q116R>}crlsIL^wS3(EwfK~joi_pJM;*zd1X?2k zHgc*ind@<^8)SI|YI;9szDW7W`XHC=N-flDD3`ae583q3 zdEQ_k$l%QzpP?&H>2EhOGU{n}){|0S5YrScYEUqfrnFJzQVAc^hQpHJDO`aFo&fMm(q-7m$;6&xh5^ zk;4x5Sk)W^nl2rkAAkOVS39!?LrPn0Dew*XAEr;gwH)CxEk?X^_wEzu_rz2Fr;*mO zoYRTfDx+GroEVCEQ*Q+W1hrv~T+O46jkVJVS65eaP7&VwHPY(@>`7u7uQo)fhn_Dy zp)vlo_gbUrk zBO+(NGURL`izHLB)eD843qg-sS3hlSMFu8J6n)T7}V|?~JSM^zHuVM62eBDw)P&@~{=tZXOjvU;9%~(b#B> zm!w2G0oJu^>UozgDPO&KQIW-DLSBNvVD#QmDpVOhA@kfMsFmyL zW zco{&J#1_SqR+Wq$_*Wjz8=6U7$FH;Yt0nA$ zdp8T40R?Pb8#u!*nNBZXyp|5}?Qbu}uX;@eo7A+-pnQ^R?Y%ST+ zj*w6*x=Q^iJ&rK49%V(RD-7pvNorua@6y%Pee$KV&@1DVWP611-`tbgZ^D7|Bn%-9 zvya^Cq>i5d9vt}8wl&qRy7e=NeD0qZtT**6vr)0}6^%cakLg{S`{IhA?gG>So&jU@ z+uK`cFccg)_&7>Kjaw_ac=@vU=Pqd1Xc{k&AeGwyZmbBRQ%M3-EyU%Fp@b0l#3p@a zW~R;E!{b9=fB$9je(|_PR9^Bp+Oa^`xqZ85^JF2st*YDA2*cby#HPQ>fw0j+jT}oTL467rb{HNm0dRi`On09+?06x#et^goMP1 zx^&I2b~eUfla#y+cmg~ps3)Ae{{4!usIZ<2~Gmz9;N@-hj!+?NZJ3*X*G^8P@D zfe7lQBFI1{6{y!G=fG!_sD#klckZl8KAgl=>q5YVgfr|8IMV);1pR&MXl$Tt;c+oV zuE8Yy56Xf)2mv7JsfVTBy#boy6ep_{D=r#7qAfC7b0_4S> z(Ffd7-19&cqOX(%p_(vdw;~N+YcpH2=vOUIg#1@m7YrVdBWD(-WMRZ$riTJ$-~E~z zbd*8|55)He{O%v#P*!N*JlCd-v*chXtxLdiQ@Y?BL(X6|_O>%-7iahg`<33O%4;AlUL;OgTh@SN&1t1ukT{&=f@lOlc zYs_;}3}Iox+4jA%=#<^ww$Ad{)6QvkVz>D%U(vF;*J^O~K+@|(iIIQNwm*hV<&^P& z#I)kR4#;w)Zztj6OlbbQvu*ICu;_-YK8?j{KB=l>A7#6wdukOFdQ9)bwdIwcu;J|2 z8~?ltX;nXWo6)VCF)uakl>WYc)(H3-UJS*f`IMMc@z0{eyI2tv8N`G*)4TXiP})w( zy-%u+mjgvcst${{F_#QlI!C+K4Lur3>2n3g0pRAWqbSn-Z2|46X+#Ed&xsD(D(dc~2;P(7tBcmKkStjk=vPOcuW+Bj=nUskt3XNR7;9)sgVOskq{CBE zMTor55}$W{*J&OEvyDlP^cOJWw${9WO8q9dBB~eLj=!%3Yx#YE3&BJvO-%x>N)0wk z4911ODv7?=q6=&Ssx8j0ClrI>l@De}FG@7_L#g+R<3l|HhDg za@kjlGfHPjRo~|V{72g*1HQohFwD|xUR{8U-eX9>k0H*3Eb`*c>g^Z6^i_C^K9=fJhWqiZq7%{P1vh-$Y*NO#eLD zx&Ng6+YFtDIB24xMZHs+5sNt_8QIq=Rv$5Aj<*yL{~~!yU|#7)IggQ2Xjh+qPtyUc zMcqo|=|pn(OBMqZ09bnz$wQ2oP}LYxzKV?LDF3Z2f^_1r#=NH3)Rj$9Wo2a$Q|kFG z-uY2&qCL|S2UA|0$~v&6`-x+`C>n&MItwM1ts&P+Kg+Zl04?cTPN5;=lW%W%4U0{0 zq+R;}0bvJO9OxKk-W#^!2787`ALqT>zQw}Z`E>(CsA+6mO9u;0Q&Ji+H!#IApwD_o za6NoStOFmbqN3sgRtQf~32mppJS!MHdh{q71Ro@-l=Z@w<78R1nY`Z8U{B91i8xos znT(7K_{`0aua9wxYNK9_?5N*~eV?rr=g(S~jwB9K8G!+??r{)Frr&}yEN+OZ-b~z28MQTnlHy z$h&Ifz|8v*g#7)hHS_6rZL0pPRO!dYo`1Gkx^_%VvX6Q{TZ%0>84Tk!m4isOB;n7G z4{gz(nx3AE)LDJKH4JTr!G351D?kTIj1MKDeQp3A%v}NXk&RPdzJ!)sxbR!KG&B_~ zMyM5|N;&=QBcOPv zE-yb>;h;#A_SBpVjJg9{b+OMB06lKSQ~DF?;o*_6ppgHQiio_GJmL;-P~RI#0KV>_ z-Y9HrZeI6taX}DkQy)}LrbfQ(Cx3@9*dnjPhc|It2x_Odbn#Wu{eZ_&_rTJZKE=eG zYs*6$PKY3PiSgGhz7q+zc@S(Ov{|`QgRUtd~?awgF0_-gEAzSu|3Ce zLj}oYGI~V&0te1OH1+kSqMTd@;>RRw0#XZo#oV4x4&N*@k9ciJ)tcW`)5%Eg(Vq9z zTsUMa%#jXIWZav}EYqXLqn4-Xky?2J1l+hZb;o+`-MinjH18B7X99m|gZiiu(nABl zCnyH`y-?DxHZT$0Wj)_e;$R<-ZdN7#LR2a*37rY1p<`3naNS5A(jr7dS-DgChvNDG zH<%y9xq5&hyP~XM%@HC_si<_ldL>d(Q)9ieVuV|Za64kCYOs*AI~rcWA{EMJzI{6Y zmOxOS#iTr(gxe~M3R|Am>mzLIDu0Oyd__0z;|V^Bavwu51{G%J=9g?z*UxOTsHGD* zKjp!CsuFZRFIsOC=5EhR9k-?eFIWh2Q9LdQ%6l{?o8m3rBFaB5zzpsV#-npj4s@x- z5rFy;Yi2)WYUHMfBc{$}-AqhOw11L}4PG3p3+<0|lpEU*EMfkgK@uBPVuMtz{Vr0qyM~ zK%MMsmxEL*P{ouk1@JpMhCrO($kx)x3~t0(>PV}ZxEh}?@_;S0YX?3_?1{In8D}QE zqFT&*NB7JGQNmc$apQ|g_($9gC>UWrVOo;YG9W)umObjiW)Oh@cjdQGFIGsa9u@S5 z+Skej-xOPYp&z*I4!1x>2BbLqir`<@Q`Y``x>H+g%Z~Jd2<;Jh&xi6;~`-2fZn^|s+A{?wFbPj-`h8K@;cg|UP>(3qsDWUI7@ljnp z?Hg85HY}sm*QC}7OlZNvu_3k2i0@#0pr@ZT)S9$7eSv2%CI%ZH**2h06H1cXpU^;) zYiempnSYw6T;5S1uw_s(00qsBiNu!ZQN@7|xaHS&_y}uj+ReAm3e>t`9^Wje>W8v) zXyfrk#8XHZ2o~iXiZGdQF*%xsBCRCjX>YIT{i>?13YMgEsc@Us3QB`9gLg_9sBe<7 zW^b&l6^>3uTT&Sg6RXTuDQ;EkE_>m#sa7&jmYk=#`2%8e(#lv$xQoNcaaEcwH?&W=>0;EkkTi$aW};SJv2redf>p1Z2y;agMf@%1^-k0| zS0(%_s49H@_tJa%CjIWPhuQE(m7$UTJkFxwDJl=mDc>|_94*opiA)__K8P4Zy>Ae$ zE3(DJP1EGBixJDOZcF>*?eup4L6%)jlAwgcPMn2JtUiBo>gN?mi)jYLXkIjCh5_T> zbveW?J&6)EGSZo;GjbWEXP~-XWr2tnDO~<}Y9nsYzGrGzmbgYS!|pfgzz{_Lh4bbg zGn9EZ{MZ;ggsK|u@NouVmL)r#JnjU9f~?NiI5g=SDehunv$4`Q?6Amfy^Y6R7mq}5 zu1Mw{!Efg6j9NvW-fQG2dC2N-pL&v6~@UN9p6aEQ=Yr}p2*a_wjW(X zZ^V{vrupjCg?@6(J}k!h#Y{g^57tSWjZI9-kv}fqgJf>RS9j7KOye$LewoICwe_yb z9y(25awr60jT$Jpa`ecNn+Ukv)VDDoX7w{a0GQ`c~ed0=h$7k$J{BxV>xr@Ow~=&@P8 zzPotT*iRbvmSl`5X(KUQV#fm8S=SB}4esTw)eo+wUr#R28eCIgs$OgQK$P)AVs3c}9%a6cE$~ zQ%fcVnPO3oO;NEyu%ru;SAZf9sNvnA%^R0cT-39h(yA+>3NUf*wr|9_vEnxFNAnDk zg0@t=9Iw2*2o89^7QE<;DQL?c)xB>DGtrfQ*8X9j191wk=qBBF;S5L&JW(+Z|FJV} zT$uCMHi43c!XmQ?FWRBPz;XGm6(U%o7icOM{>;T5)(aOq1Q(A?QR1r?wk9DGAEGy^ z{l_!6)GjiFDQEnx(0z|q*B4D-Z-1RdE4?{{P7d^99-bigiMUR{{da7&bpMYCJ=wyN z-y+9&TZ?%S>}3MQiAC6)^mCg*j+T?xCy`al$fIJGDw|$5w@;S2+WPbQC?2X7$DhA^ z`4SAtud;2at$**6sMe zW7h%3L%$R~akHUxfpmUJ&)}e>-9E_@RL`xjx=#p~J$^Eoy&jO+iSBMX^Y)w>t0lw) zh8&FGEPWu#Lux~Cwp%#G(n5BjaFI@TjNkC1jl({WTJ7%wv>D`0d1LC%`$Ix*#LFX@ zdpS3kIkj4}p9JFA2YlXjkyziluA{kgLsKi?3XZal%n%4!rja9j^x>`N&A_SN<(J zdfp~LrR%G*DPzfYJ;EjTtjqeg;eB!IbSE~(3!raFAQ64(T8b-NIAFY4Ar2_4aFWWU zXkS0(q2DJhnRc!H#taRuLkhZnQT}*U2_5g>XTJ~IbS`5%dyBFlYuB^4f>Z$E>kM_= z2jw9%dw1BLHMz~VW(s<@U*0%Gb#MF2$Sy|Ba1Pbp_8>loyvVek(7XUtStD` z{><;6kXRkjTKBA&>WASXf=Jn0q@H-@53c0$0BOg-K<&9Le-$ervksZY=Bt@9*-LZ~ zFn{_r+(r-Z^HUa&oaORdCb$VFiV9C{Ipv6|k%AZ;8u<>jZ^2Nv9y+Vs#p~WEu-_et zBxWC|s6FDOp~idnYOQbx>-1`op1P4WK7YR`8>yRalI;Yz10YA=zs3nWJ*L8ckmHK| z7p5hWvZ!psYcqn}7A=#UHu?V%zT--q(o!!Gok1?yt;JT|R+bvzA>@K4`E6#bhw^4G%9`5E z;=J}VY~0`l$uYGerrwx+qlUs9cT9vdoUbUb)8UwFCWkK%HJ1l}TpC6%RgC^t)Q7A) z8LZZ6OnSc1=3>4%N(SZeJ!1c|!(2CMJ|FUbyh(c6GHLaIA&@Z(i(n zRO}-R*V(4akdgp1Osw5gZg*k@^zQe$56rS_z6IZ&oeTFqvfRZus7N#$+YQj|_r_9} zZoex<2TWf6BbU0Iwk9udk;!t91z_%yW$~xQ`4;3d|RgdVrdugNkS z8n<6(ft%KAN1YK3$7Ke8_~3_rSs}ZjqCZJ@oc^z3*wf)RN(T;718)ZTD!t*-!KWoU z!gD-lxC4xv6~i&yU9c628B) z1@Yr9;NU}vM_0vex}oU#h97d;lq_ZNOdRK5J`hdk6%g*~2~oifslyt<8bbfzu$ro4heQ z%8vj=N;}See|PT!Z+d*Y1@CfClRei!Jo(4n1{qd6^8ngNRRT>I>9wv}DW~@s;4C^} z)2$o!#;X-<(HHZrll*CV3}Hn&C%H)1iWIWr$+D%RRZlgBvXq>rllF_|EDAz&sW~7) zfv3zPIUwn=%tq37%dK6x#nh3?r@sVBJl>5VgOxZZ9+Qa8 zkyIPlA4}8WVj7B{Z+mOUF~jDtLc#?9q-UfB}+8=kq90%y6N6lpozo&2bzP`4v5l{SYl&?eWX zY(Ag8F=6AlboUopw}LH|mps70)VFJ9wwL@>KV{^GZ%O#KJ#rwnY7aVl+ksS5>gT$b z`6u=;A#29kf!IU|nZ~k=ixTL7LQ}&R$3kVwe4mbpHnh$ll+Od42dC&og8*?|erFT% z=On9-@hpq6H%HXsr=kRCiQs)+TqTiJRR}KSVHCyL1`V#Rq*RyFOe?XnAk5T!r1j9% z((5kBPg}7tSJ>qUhjv6(k%Xi zohUt75d8L4Av&NUbv3i(d)=!psTab(DPKrM#RpMu+yv=irRv791Q%$I`0xk{_Qp^p z=_35GWa)R&W22C%iwYq!Zj0f>Ga}eNG3ryg3|oZT+5TWmnxErnf>qL5Tx6>yJKYzk z7=n(lbSkWyZuoQuIQc5JSy;Z!$ejusM3JD&cLG|pvWrt%s!ipicpbtW|n$Q zkqLNye-!v3@Vzgx&kKwU z5qKtZbS?b}tXIN~l~va0;WJu}gZDbozx*%b+33!m?5yny_6&J{&zUoVm?Il0nIGtz z=FJ&bGRl6_rT!prmY`GG!|JjvmZn$wNpaH`}=X7 zm1^#YqwO=5)SB)CEfRgOO|)XgU;6h8TE1-~xB+Rjw-sM7KYC?kh2-;>^Ot%LO1yj} z)*ap9q@s^-y7A|TfwBIso|QEdJ}$f}T%Y#tvWEY!_nOqwxj(!3DxhNa{*p-g9aGZ* zT=L9#DA@}>;0}$st5J%2chTgCKjfnU;11^qClUYYsz(eY{g&c;Rv%u-(OB3i8m6G} z;MNCYRYq`c@UpOy8Qrys2k5s|Vpu1MLn<}{j2!B>*vz+TwPt&mE~_SpzWuf&EKxbs z4E<>6uRhO0P7au7D8RhCK^5JI9CTo6%{t!1kyV3d71aQ&f%Fu#6kTN6ocTgTKK?UQ zZEA(207HT*MQdf^)W!=&Q*B!Q)`&Y3Po)E>i`yMBy|MbP%R?} zM;E$a3e$O5)=RGn(HvA=7dhGzLG|ob9bloIfGvovGlTufsiyO_=k39z^LL3E*IJS( z@_DK>0B<~17iH$g(X-& E1E4mNyZ`_I literal 0 HcmV?d00001 diff --git a/src/icones/apps/xmms.png b/src/icones/apps/xmms.png new file mode 100644 index 0000000000000000000000000000000000000000..be077612dfea00c0f81189bd906ef47dc8eb2a0a GIT binary patch literal 19640 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 c #0C0000", +", c #0D0000", +"< c #0F0000", +"1 c #150000", +"2 c #160000", +"3 c #160400", +"4 c #180000", +"5 c #190000", +"6 c #1B0000", +"7 c #180300", +"8 c #1C0000", +"9 c #1D0000", +"0 c #160C03", +"q c #160F07", +"w c #1F0900", +"e c #1D0D00", +"r c #101010", +"t c #220000", +"y c #230000", +"u c #270000", +"i c #2D0000", +"p c #2E0000", +"a c #210909", +"s c #320000", +"d c #340000", +"f c #360000", +"g c #300701", +"h c #3B0000", +"j c #310E00", +"k c #2F1700", +"l c #3B1400", +"z c #311F0B", +"x c #2B1D10", +"c c #3F250A", +"v c #392615", +"b c #3B2B2B", +"n c #420000", +"m c #430000", +"M c #440000", +"N c #490000", +"B c #4A0100", +"V c #4C0000", +"C c #4D0000", +"Z c #4D0900", +"A c #530000", +"S c #500700", +"D c #5D0000", +"F c #750000", +"G c #7C0F08", +"H c #462B0E", +"J c #5E2009", +"K c #56381C", +"L c #6A270C", +"P c #69310E", +"I c #5E3F20", +"U c #7A3D20", +"Y c #664524", +"T c #61472C", +"R c #61472E", +"E c #6F4D2A", +"W c #7A472C", +"Q c #6C563E", +"! c #7E5A36", +"~ c #70553A", +"^ c #584E44", +"/ c #605040", +"( c #755C46", +") c #675E55", +"_ c #7E6348", +"` c #7D6C5C", +"' c #7A6C61", +"] c #860000", +"[ c #A00701", +"{ c #B40D07", +"} c #BC1D1A", +"| c #BF1B1C", +" . c #BB1D1C", +".. c #BC1C1C", +"X. c #8D241E", +"o. c #972421", +"O. c #A42723", +"+. c #A02829", +"@. c #B02221", +"#. c #DB0F0E", +"$. c #DF0D0C", +"%. c #D8110E", +"&. c #CE1513", +"*. c #C01A1A", +"=. c #C61819", +"-. c #D11313", +";. c #D31312", +":. c #D41210", +">. c #D51112", +",. c #E90909", +"<. c #E80A09", +"1. c #ED0908", +"2. c #EC0809", +"3. c #F00605", +"4. c #F80302", +"5. c #83592F", +"6. c #84592F", +"7. c #875636", +"8. c #8F5D3C", +"9. c #925C36", +"0. c #85613D", +"q. c #8F683F", +"w. c #966636", +"e. c #976737", +"r. c #986432", +"t. c #996533", +"y. c #9A6533", +"u. c #986633", +"i. c #996535", +"p. c #986635", +"a. c #9A6634", +"s. c #986536", +"d. c #9A6636", +"f. c #93673A", +"g. c #956638", +"h. c #966638", +"j. c #95663A", +"k. c #92653C", +"l. c #91673D", +"z. c #92673C", +"x. c #92673D", +"c. c #90663E", +"v. c #91673F", +"b. c #95653D", +"n. c #99663B", +"m. c #9A623D", +"M. c #98643C", +"N. c #98643D", +"B. c #8E6642", +"V. c #8F6743", +"C. c #8F6744", +"Z. c #8E6841", +"A. c #8F6841", +"S. c #8C6943", +"D. c #8E6843", +"F. c #8A6946", +"G. c #8B6946", +"H. c #8C6844", +"J. c #87694D", +"K. c #846A4F", +"L. c #8A6948", +"P. c #8B6A49", +"I. c #8B6A4B", +"U. c #886B4D", +"Y. c #906844", +"T. c #816B54", +"R. c #867F77", +"E. c #A69F97", +"W. c #C6BFB9", +"Q. c #D3CFCC", +"!. c #E1E0DC", +"~. c #FFF5F6", +"^. c #FFF8F8", +"/. c #FFFEFA", +"(. c #FFFEFB", +"). c #FFFFFB", +"_. c #FFFCFD", +"`. c #FFFFFD", +"'. c #FEFEFE", +"]. c #FFFEFF", +"[. c #FEFFFF", +"{. c gray100", +/* pixels */ +"X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X ", +"X [.[.[.[.[.[.& 0 : & & X X X X X X X X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.& K.Y c 3 : & X X X X X X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: H.j.A.P.R z > : & & X X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: V.p.w.j.x.q.0.I k > : X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: V.t.p.t.t.p.w.x.H.( & X X X [.[.[.[.[.[.[.X ", +"X [.[._.[.[.[.: V.t.t.t.t.p.p.w.x.K.: X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: B.t.t.r.t.p.j.6.l _ & X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: V.t.p.p.t.j.V.j 7 T.& X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: V.t.t.p.p.N.J f 7 ` & X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: V.t.t.p.x.U A X.t ' & X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: V.t.t.j.7.M [ } C f p p p p p t b (.[.[.[.X ", +"X [.[.[.[.[.[.: C.p.p.N.B F :.<.#.:.-.-.-.-.-.@.t [.[.[.[.X ", +"X [.[.[.[.[.[.: C.p.w.P h O.$.4.3.2.<.<.<.<.<.*.u [.[.(.[.X ", +"X [.[.[.[.[.[.> V.r.p.9.f G %.1.:.=.| .. . ...+.9 [.[.[.[.X ", +"X [.[.[.[.[.[.> V.p.p.b.W M { &.] A B m m m m s a (.[.[.[.X ", +"X [.[.[.[.[.[.: V.t.t.p.b.L D o.C p 9 2 2 2 ~.^.(.[.[.[.[.X ", +"X [.[.[.[.[.[.: V.t.p.p.p.m.S Z g > : X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: V.t.t.t.p.n.8.u 7 > X X X X [.[.(.[.[.[.[.X ", +"X [.[.[.[.[.[.: V.t.t.t.p.p.x.E 2 / & X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: C.t.t.t.t.p.p.j.5.K.: X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: B.t.t.t.t.r.p.t.w.A.: X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: C.t.r.p.t.t.t.t.t.A.: X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.: P.b.j.p.p.t.t.y.p.A.> X X X [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.(.q v ~ H.x.j.p.t.r.t.A.: X X r [.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.Q.) e w K ! x.x.j.w.A.: [.[.[.[.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.[.(.(.E.^ > z T P.x.F.& [.[.[.[.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.[.[.[.[.[.!.R.x 7 H Q : [.[.[.[.[.[.[.[.[.[.X ", +"X [.[.[.[.[.[.[.[.[.[.[.[.(.(.W.) q X [.[.[.[.[.[.[.[.[.[.X ", +"r X X X X X X X X X X X X X X X X X X X X X X X X X X X X r " +}; diff --git a/src/icones/devices/3floppy_unmount.png b/src/icones/devices/3floppy_unmount.png new file mode 100644 index 0000000000000000000000000000000000000000..de32b561b8c779249814a0967b0582abc85494de GIT binary patch literal 14014 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 literal 0 HcmV?d00001 diff --git a/src/icones/devices/bak/cdwriter_mount.png b/src/icones/devices/bak/cdwriter_mount.png new file mode 100644 index 0000000000000000000000000000000000000000..ef3eb89c967bc3fc3c7ab4fa7e6f12427c2bc3dc GIT binary patch literal 13202 zcmb_j^;cBi*S<5rPy-A&!iY%6AT@+^H%KEOAOh0LASg)7&v#oTeNA0=ZRuY7PScMnFwb?uke0j<4}on<>xvnqTRsNket(^F{QJT#HMcs>bK? z+R(*3kAK8`WJ>I8i)lnau^^cwNhBXLNQxK^1qHV9wfV!Y5GZ#1(6HY`e}8|msTtqe z`sUf_wkI`~erm!+aclCb>}_# z6i#7K<=o;ny_Hqh{iAeJ1kXnH{x#sV){UPkX4o%mL0me43xQ4D~N&VvUo9yDB z=m3ZuJ7)+xs0$cu`YwY=)7Q&dU}!3V1FA>@+pW`uL_!B~EB#|5jmOVG_c90Bvp>MSMNd&5YK(a^B{bn#*jetdb$S;mQw1PC=C4a%Ck%*_JaMKa6wRN|?)jwNeAq zdB?Ung#krUr^z*t{qiM*La9hd=rGJCKW2<%RZt~(G_9?5BH=6ZV#r|DT|Xtxw>l7a zd^l&9<=hjRTzIIasdG?ghGsNfB^XU`HNEq`^m#Df-U# z6MP_`^4$gdgZ67hK6Y4>*h)8?q5w+0zcpxIWAz^k)dMz6Go^OGzU0uMugte?aigM{ zE$zENy2rnjmg~Q7`Fy#c*xVnzs9kbu7BgTB^B6HjDEh{(FO{7}mU63Y}D99#8MeLFlhGY?JMX=Q1t$d5e9`G}^ zM6@9k;B1En){@cQn>>>j{uE+>kIaVOzdD-cgYmJUYY-4^s4l)>F^&9u(lz%gzwW76 z#LpU>Zt7L`on7cAkc#u@uJdWt4QN1%T2S22mx6EM_cl~5urV6 z=V%r+ebgX%-Fj&dto`~*ffUnCf4lMe{Y5aJkA#}Hwk#*Iki)O918f>ayHOG;h$`GV;5^u2Cv!YH zDRVwcYQCPH(E5WBqWsJ5LC(Rz@9ftpf0izI6v)XHI!qD|2G%BvtRPsRt1WT7v&~U; zsx$|ZFi*6jH)S>b?-TM=#!NQ`Fcm@WV6p z|0pltORo7vY{LCZGfxwil(?W%l0}w4{r4SP{i=>>+2;@JkzbtSAeCtJId;dnONrvoPY}++toz8`hi74QuWZFPVH33k`Kn<~o^vv+t4PNj&$V+J1Jb#~Y zmBI8v^A}`?_tJ%s!TD8;>R>W9jQm1QLYsn8A z4jyTqrj&h6j#N6s$;3C(p)ShegqhlrV$;9{;`5wVH~FbTz}}_m7+jY&L9eg}C`HTQ zL%%n;pRAgDtQs{7rvH`HK4`2IUcFf6dFY0u>*e)US?X^F<%x>Ib3qY>6r#6=I*XB0 zUHFx#G4=U|__sRmET?|G5a2oL&qwoiP_xXI$FtBa z)w0ccpG)B;(hKKkyXz&7CzDmzCFm^*azGcZEpz)Xq51eoFyrEZJ~zL;-L5s~B;N{R zkIQb9lSA9X@(X_}h^+xX_LcEb!0@uYTCFGk#_7NvyUfn0&wu)PrE8eUP+5dy3zkK9 ziq@q1^YMT6orpML2P5-z`=wd<}sBSp7JaoJEj3|Ti$+``({~pOnV1D_{T}R z#I>&Y+&dlBH4`z-XxZbn5Koc0?M-MoNo#6SdH$t-1l$|6bs>}_*PP=e(FI8dj`PR}1WFVLs8LyoCLK*1&VH7H?_72QaSsuwUIK^l zaetUJLGyHtLL^4rv(vY)i`^eK3e5em@@Y0k66n0sy!TNygDc;aOqP#c5M121KjQUO zOF?z*j}u+7ipmPfGlrB=i7(=+8z*G0%%1}A2WaAqJ;y97CG6Bubs4VgyPXf5#R7xM z1J=(~NAV*o@MI!wwVJx4PJ=<|7o8O?$E0Ofy*1uVH#v&>;`D@$*yr4GX7T=KXc zL3QE~?Udj(ckF9{l?1nxgeTB`L$}O=kUK;OUA6*E38(otAUH80hF>JMwn}VuxLHbo zOnh@#Dl;aB|X1` zBz}6eAAv^#1f0`)cS7DN(b}u)<}y|dm9tqV05f0VR1k9C|hXKnYM^U#dLc0(z{88JU*@A7Bekl(>JpYJYB%b*y=&d-OFnlF26 z9=Y5ZdMLq!?HAwK{>p$A`u9^9-KKo`+6HMxs#FlS;IHDgpsOW-O-$Xni`gZ!Nb_bU z1Aj{Y9$?`A%6}t_eB*H9R#^6lSBmghS?R)=2cQ*|(|0HJ>BUy$L1IRCU2aD(xvho71E0_4J?M?Bi3pw+6{tR z$%5l%6Jk;fLTY;2kv0?rU7{L_Efb1aZPumf7d5;8CJY6iE=`_$KQP=t^P_m%?lQ9F z5Xo;|Gzmm?fC4(0s}Xs0eZm%2{qML^D&C#pKk%csx`Wp6XULq?rc@j;d8n~#BI?&e40zgA@IG&%cmib;5+NEC)@ba&87TNMw$4QDqE8dTmM0PmT=V|i`9w>L- z>;8S$MVx$h#L-sJ~cCQj3d8(L-jt#p}5JE+9j(NRDA?Gy^0ret$B*vTL~*Y7tBu$f)9S zAc($mN^4T7Njcr!aPa+SoY+l5yi{QM0~s^R?%!GCyxCl>&cE4*d7e+2TBLOi-=C}2 z*a<~GyY$M-Ow2V$WKcYv%oHgyOL?w2mFM2D|G9Zu48n0>li21vzhxUD#n50@(1>nV z96Cg9t{iB-9%guAknm4RIye5`zr0C4JOrL9;IURg2xe6CJ~V2+s(LMTdKJ;4Nw@)v zHTFp<`pf>iN((P2iaKptO6Wk~)AUa2QnlCaiGx4@JL{9kO%&CGx%&wLyeE)?!3U>Y zKs_`a6g)-UA)E`(bme|I(+?fmhQKQ9)9wouILsnS{GYN9J6b7~2y<_5{Y_2$8rVhw z&UFcxw}3Sp{IMs$HtgR`8CRc1=`NE$O>O!umH0@+#x&-iVgJ$U<_DYZ z-o`cKBx?wKT`p_RKz2@CopYtoWm}7H%e%V#tj|8&t?v91CgxfXkYetQPhz_F_ z(X@i5n|pcVO_XbNsSU3ALfgz14fa`)G?|=pgN_@wuAbC0vd)DJk-Evo1#w9Zq+`^3 zhIloRv_i4H4)D!yoQ%#>1d}owgVBTN;sb?Z?}p!zvhtkHhgKn4hKV-$!-)>oR8|6g z_=a-H=&i30BbkFNk%S#1C7zgLBLn04MweBAo(pqAXVO;c7u>*Ls_#*ro%H#vkzziu*jW_a)DC^}#hGal5l9B1(n?sah!1)$T$}&a+b6lKa`hmOqU^xWy)J z3vf?RZy0wm5_K`O?=w#s(qJurK;~NX-0e#*BA!=0DLVfCNnO9)O_eXz1*#{{5l=ho z70Dx2*FiN7F2`Tm1-d+sx6<&NL!T$NQe1roWA*5Z2^sDi@n*EJ=5YhhApEla=oh;H ztb4Pu=%oieAtJC_tP!<8DEY64L-dd_IOqwLyn2rz^N`4;=NE=2Zb@pKHt?=bZO&(` ziv;RM3k{N>v_{^RnJ(0nWMCMt)vr3rJA7i*Sq9a)?_3_QI$hMHcnEr?@!6p2yzq1o zuk!QCUrqZia7*HC%M;kkW3t$)$tb)fFG#?@^9@|Rx-nCR)I3~Z-lR9tEa5DQu?t5R z9WKYf5=UOV(YHoVP%Bldr_PmMLd$pH>$dpoX<9eDdLo4pEvbyaz(5zsAVPF~QMwzK zlA<|2)#+j4sq~0c3mHFmE^jP;EJsd~L=wskQ*_uuOh(F%fDFtEHj5vR`D zxux!xhEVptwPE8@}Wgk;Rw&V7K`b=G#kFU=&w~?-c3&7&e zd-kbzczuL?WlLzGt}7G8^{;xN3woRE&rP*~Vn5kgk{#Q7jPdVpn=1b>FGxsbiex$S zH|kU?yJg%a#5_)T-h$7F$9bDl8+!a2Bug}cWOG^BGI%EHN8e#d!I$Puy-I6un)Paz zJ^-aW%7D29iJnTBmV-YUGxXhSy~n}6L>IW^EKV0y01cOAG9mIk9`dSc)H5*1&jp`e zS5DrSWXi)gg35Es61h$({38BlrSE_UHdaP?DayMjk)=f0yFPGGxzAB4)et*6xgN$D=+p~5g==&%u+~N)AEX?vx^?Gss+Ss z4OQbkB4I&t>aG&>{sq)Ig~&duh*H3Un7jfhC1r+R6e@_Gi|X63q_v4wlzBI~if){S z>R@7W1$#<8dPKJGm%={AP|3ldJ~D}_a#T;$O)OuTLoi-E&uE(qBz_ckSeQ(<0fYDA zn-B1-LN^6qE3~lbQq?)WOt&c0gpHF|U(D=~ZY};z!$BimX%2CW>SKSN`@Zj1G5EY% zYC8GNUvYup`s#}&IEvJs3n0n~qyCPLT_=bWYO|NbItq7;Y0G>J48$uj0<~Z<4dW zglcVZkv?$G8==W=SIAw)m@7L&f-KY#aeH31Q~xbxc17}IwuiQAFQqC|COj~H)EJ5m z#d2#h_X(vY-r%KiZA=eqR?0^(Fa5bm8kAMrJdm;kj^F z0Qb*Bg&^Ia=dXbw3h_CEnd6aI{cbvXj;vlWg=AI-K23d0^^7pQU7a(QX5hhy5E~-; ziV>mkL$-)oeHg6HIegbFl?XHp{YDepR!KSCnNIc=UEY)TU?uhltHG?!5!rtexxX68 zM1t3;8;SbBp*bcweBrin%8s1#rhjtUQa1D*h*2j&F=|n9{rQ*5J##1;1dGx6T0~-F zFxtkobLrZ%aVd>mAznK)JM*VlIHiOzkyB87pK|=WvbYF%rYop^KoP-|DFYZ~7YX;l z43w{8Ukm)%RzRwT8Om{z4^hBED3^0Xky^){4yBgxPw&xJ((BK*p^$|`6fL>ChPWZo zb&Pa!b!k!gEKqbT$!C*FkqgtIi^&ew!^Cu7P$W*j;n{V&nVC;pLQt1TyDYb9u|D*5 za8C~4cgu}WmPBsi0V1!T)frAs(3&lCbo>54+?thvLXc5y_Xw?K!5DwQA|y+2ovf!? zX`&h#AurOYbCnY>k5Jl|VyH-akSgX)Z3%0o09Tf_dNpB}H;7UOXg$-ds!S}Kp0g17 zoYBJnX!)GAhuV|=Ij4-z)yUO@_8-E|D6>W7rnmjywxpOA9uXu(ej^=^=tu%V2-oS< z;7SfuDo_%6d*zp$2L@kWj#Q&pye0Q*Wt{Rb@VE`L*r$&UGt1~OKTX|@knWF1j+GXl zs(xLtlZ7jXWoMG*xc);~G62sS&!#Hw)%Y7Voq$|{tpUi1n@?M-(Fev-+3>@Q1 z`V_1j#z;iT!8uxKSD45QG5ez%9%q61s3p1U?}G8Bk7Fdha1bD{GU-sQ+4B5gBHRl9^i>vRd|jE zT!~V29T^_?i-9V`>qe~cY?%}p0al41_|nH_xP8}YzVXAv%V5!P$}aqHWH@CvrO$#& z0xkdgcJ7O4Z;lS;$SjAK<8A~<`=W%COB`VCB3ED=mZcux$1C*FKKPR@>( z9MX+{1y_>0Xg|bBnUWc%s8SJ)iU2JW7X~>PQ`8++7qASGjm%P(}7z{P-Z;*k=1OzUxnlt129=;MhIWLq`zWp-JR#9_r7w$e~%F*cX9RzT7BW) z^}-+L;QF=W^Acg}~7^pbZxMSYFNjGV#cNZriunL72@ zRw)Wg1f!ZhRD~tT5?G*s1ye>*hxQ1Il{*G<_rk5?jQVw2o$J0+%@JzR7N(WK7g zvUNF=%(ON_FonO!RU^@VC~^$K*76t#Vq4{g(${s9XHQ`v%_4{+2vl5io(eT>n8|$@ z;G&J+OoQ5G%l1UFU_bY*^F7Ra6SLnCVD;!WlmM7EghvW?szI@c+?cOLw7T%oa#W^+ zsSr9)QlwJr3tb2(F6a%!Uz;f-o+>m{<>|LCPw9D_Jv_n&Z1D!`(tC(35zM2y7?6_t z-6+E;T1G=JlcbSNvM!8arTst1!@i?sK!-|?Gkc;{#Shi#Dm>;s9LA^^F<=|G`sM?7 zpAI!aZ@Ji+)Agn1L#mlCjTKJqoBh6b0czMdLCb@1#afzwU!xPyzVa; z#Y#RB{;;r!%BCxqVKJ-3oQTPFVviidu)@@}AO#v8pGfA%1H$pcnN{GyXCtrHV^`U* zE1b%oC?VIN?BP)Oqj>n&Em}7NtBU8_`H#!PP*4>8#~%_IEYP2Ow#FejIV>fHk8#(u})?QMnDkmd|vK9aTJ>n-*jPemq6U+8N5_Vxe%`LN`kE{>}2dY zh2~f$+O)tRqBCpf<>;JLE=SrkjM>?4sGey}O#3&Z=kWSUUWVQa(BfzpLkq|Pw5Zvr zxlI_=fXSZ%plYcwfx1Bg)S?xGH&w=Yf5G>8>z)WmWGK;7(rEn?E+W0k(e9<9&XG2> z^){Pw2YtHd+KS;!(hF5nk+0jdFH42o^wzjZhjHv40ls$$pmklSk=p9ZbJY)B#)hiD+nOAYv)+nRxS|>&=HM+lbXS z{zXNcK9v-`T#4hQ1J9G4CxY@%V#Il~ScH!QzMT#^b&lhS>edES?1#&7E-8xj8dKMZ zf4!t}T?o22yFyXr@!u*K^KH%VzU$QF46P|3DlRTbf$DUzCU~5DvVSzDZB=1x^~t8z z^N@YsV};Bky`byuJu~2CWv2SY26+h9dw7-=jbqwDARoTpy>we*?}7yZeJdla zh}xUxx1UCM+Db9`4!TA>@L$3%x$%m*6$#$n4Pnb1un?x)_$Q;!OMlFl#G(bbX;e0j zy%9&D-*>k1e|LzjGEP&c3{Y7>*QIYsJvJ*cI_!ny=bnTGM@LH@Af*3wwzTI&%S7Ft znBU?Xe_`5}AEgG4IVJyOo3*^(R5vqH$?R&0Bpkom6WIl~28+DEvdg&WuUoi08)l2k);I1f_}4>tnX56)Jk(H2FBUk zB;1vcxbjq8mE(8re^d_B-}2}cc;i{)w7?Ea{Dsy+Hz>ts6}^-^ABkT1$srSx?=&(_ z=8@cbxGDTSoo4ZEhA(m1^?vBty!j1VZ@nT_0q_;nP5-c=-dt0k zsvX6-KJ3wLwY*~rGE>BqbJ#v#uc(1d6A^N_tNpL4E2GvLey?d0l^cq;$BoF0*| zY$BT^mLXq{)Eu-43K?$@{Jw<(`9WDohw=7S_>Roun13xF-8U`=M9BdHS>IE>o2!(C z>j;_Kls4z1yrzn1>FNgecft!&5=nb$X-6079EzkPBpU8(Fmyyc&e2EVlHD(Vw7#tB zw5`IvOj=qTq|9w3;v^UqYO@e+wHNBtk#S#B=T#gB8yHWKr0xj+^NH-%|J(1rbSWMG zWIQ49wGN!%A9r_~rPhSBR-VN|!4rXd@f~3CoBU%Dl8Od}(54S;N19x~Z(ErZd0}zj z%LEXv^>v6TXis+$N$Zb`yyHJf z07^42Nr8zoB!QwE&^@PbK$B(W_0vLCoEOiqzPu+M5-X)nlvV*>X&($Y$`TVY;D^ER z!=*RY6ck{OBO{nI%<7%rzu#;>XCi{%*bChoIvpHzKOO9Uw`PZxknpxDgx`^ut>y{I zA)Zz-Ni+YdYjjswd?*7gjQmGO=pOam?-GzFIisIrXWPkB9mB^d=IJ!8Az>REX5rLI zGhih(Azl#imMVDwY-|&X%XCBmF^GqKI)Cnw%zgVcUgZQo;AWH@!lNUL>E!IKZN-T? z4x@N0&=jxW{D*}DQczeo|F7alP7AeBs4!S4aUJ!6#RK=vIxD1D6B7M?rsm7pH`b`nmQY;Qv>%bF?#hU<>T>z`w2}<+^h=BBWw(z7MD5s7{(3drv{OWpU%S<^a6{H(hsU5402-%m68t@8iWXwlKP#J&m_xI0WDqc$u zeLfu;4;Cpi?{IAntQ5h-fS-{Fk##KZ(>l%7l0&rW?&Lp;a$x;2*0_U5PI0>DD9ojB zZM08sEVDnj2j9v!W({M5A`KaHpF=>*KwT6_2m$m18Wg*;^z^fJQWs3VUm$Xboxi&S zYlnhkQ$DZ7Q+A>*ujRP&WV!II{lb1)hvcJ~D)W0Hz*AlyCHrF5$4B(7AJ5kL+P{VC z(lJL_u{uPus__KleZMQSf(eE{0T0zf3?8oOVBd(R;k1h&In_y(-|cr@xgK<|o30G* z%wXyXygw8*qXdZLaq2!}q=i6YK6KUrgT^Ug`_tQuCrv>8Om_pdpKW7;JE=$}>TV%z zeC}fA*Y>eXQaOyOER-J~^rFULYZEuYAR^z)HvOM6YkFU|4Gzw`+BHig?fliUtvF|m z)Yn!cQM$Zln%<0Z8gm-1ChLvFH&3@gM$jqgX7?D0U&P?V7)7|siHVAA!RNG=_F*&F zOWv?4a_vCI*7?STyD|41Knth3UkJA9m1lHH_AcoI7!~2{PY6fEJ{St2vbvk}KsK@K zmzN^Efh5vKvfs|6e!O4gxTR5ms}_>Da>oWf4cJy8dJzs%)kg5}6MRpxOZmC#C|K*W zNrso~ESaulC($rA<>)RsGnE$A{V6ME?O!={;0^3kbzX7g3qF1<-2q1CgRk`d7_b*>p?F$-O%kE@Ip+WhAK{Ti${wFko3n^ySq zvMi%o|J!xeQ7@JIoDi zhp*tC1e^%~>)qmZSS;_WOF0aWAE^En4bb|N0|i8^QvTXz`zMJLyb(}k1UdHimU@5# zafcMzM8u~VRNvO2q+@+j{p#lQK0}BMohRQH%zNQX)HfE$W*Bi8e+a;?7k+-TlTvX# zBXT*sNSuRA(^@~Aa+FTfc&EH_;24+df(+6!A^z~*@2iq+gdx$mTizT5gv(FkHh}^Q zI-zLSBfes(wTg; zr7jyzYq=3iVF#*hDi6bnnij|EAvZb1)K8afZUhFer|tG-ZaZ$-0hH|_N%mdmGIg*x zjWhR=M5{OaqHd*w2;)t*EpVI@pp_DczeWaQWRB57f!}UPvKv>^+fI3TtoEiz!91=; z>;=*X*CbYcIttKhc3}wkxNB|LdUJ`f`FJhMqxgI@jJm1 zMl@%9HyMksS6Vt2Y8F&%c$wC+FT_^~jgwi#>$!Sr zxxlZJ_am_@o3291k=XxyP1fiak5axP`2#TYtCBrv5ny!)m-7o-vXED4+h~Vz&Y%ej z6@I>&xns%t>bDicW`~-TX*!C@V#dUMncb-Dndjl7;g4wpZZ~@l zxaH2L{~`yEM1LJX8oOc0Vc)hBEgF9D>#A$wpdheo8RgHLNFaxZ4q2IU7D^%~{50Y$ znj935m#<8@WcZdCztrBy&CCq4ue~wd+`j>k&(1R1A}Jb#XZm! z%Y4p%(~T3LcdG5;t6+q{^9L>Q^JhdXpJD05Jq_UJnaF=BHBROt!R6GfPfq2S7VdBG z9(#4~%u`5cf%XTxo7#0C;6P#pO{W)&l94ls{?F9ON9m2^rkV+eVD;)ppB@wd96xZYih)mIBaSfVV^34*Xz?>$KLlISHNI*V1adX3(LD2d*CNr>J_)I?bk zogldTz5l^I_k7OGe9rtb<(+xnXP$Q^T1QKnjF^EK005Awswn8;O4NS|LV(NrWUNMT z1%b7?vI5}lzc0VzLo%+0$X&(c4FEtw^NMr6qkvWC$>RdqA-F-OKiG3rVfB*ox}FngX&3J?-wfI%*ZEbSSZ(FYa-*5c;1PXt^L3;L6|Jw_{ zn{^W3#;ZhV;n$P1_+oTuw| z&CZ@rE5KR;2A{qHas#D?$a9l6a=)4yUkV$=F0ECbG1-WDY&KB4{2T-DJ|!R z^rU;~TR=nkmK!^}!;KqV0_9XXotL-p@P~))0g5J1e~kyPs|U{=#9N?pow*IO)Ad}N zgKVmveSH?a(YY+%-gggSDqtw8Z(4GAKjE8`Ni^iXxOnHyX9=%^RO6JKXx);Yd)B%Gc{Rt2zuG>JE z6!}_2=-84}JkWEyZqBW$bD5k7LI!XS>2+?(8x3M$*Hc3++^raqBAVACF^`SHae0GL zizVX$V9hso`#R{ms3xnO_e?x3VC=s}0=E{^I~fTkziTu~9Wk!DM1q_~mtG(M$mjS( z1u1ytopnd%PL9+x4@|xTjOplLGpgBvfW7hwAQA*4uzbmK(sA>njn;!+aXq#;y;1h+ z>*~$x<;JSTjV`*#;4V7}CfSqTcQpaQt>SkT(I+prAdq4(1Rs_U(>#4uHmk_g~L`(1AMSZKO1oinY5gh zO}*Ezv)L4xa$clF@KeeYf2K%fiUyrTjrDyr_Qbm>*cNyg{U+~ff4u83^?<|SKw6`c zQ%TkJcT(K@f;wR}1X?Uu1;G=pW>@ORQV_)1_E4?L-Jx;;1sQIQrn!;@fx*bINJ!z} zE5L_@c{v3h3i&b+Ga#W#h;agX?JTH$ly^olR9?) zN*1kCqT^uN!GIF7M3yi|uDBAE#TR9V0g=jAW$Y7=)dNR!h8AAKDQL$}64;60CEgvd zg_=Fb&mH5+1b~#O!}r_fSLgpt?()nDmBc*-M9SG>x4pH9*mrRu3!R%(5AwLkhz3FG ztkD{~?fVcQJ3cE?iro4%N-Lhh^a_SenTm6GxPr$3XCNSN6Q3i;dueYeAJXf?yAa4s z21?OW&_%Hrlx-oDZ!i+Uwj&(-I-w(mr+mF zr02I1CLMWD|10a0d@S8wEygLp3g@#WXN8oa-)k0Ks<_4pyoHxB}RX`@U>^jK(~Gw~BO#Q|MS4{-Kh4D@iwnV7Tdm_DmvZog3p_&_L%7$1N z1k|sJxwTZ0c*VFZTMs=v-IlrY|KH|gd+mA17GKNrowD1fJAO%{dNsti=UK>A94b$D z(sqAZhw?m~^OkD#kVD8JOp>JlEcRpGW7*hT{Iaxg-h-mxNhFX%=q#XYJQSc1->6^f zaT&)p>iv@cTQgbBL^$8>Tz`Iyj7L&;k>~x3Dc$LMT>FPm!JN^&yCw0?vzxH6A#P_We<4pD}^bFcr61Vf7W`bGD0)AA@cB5z2gN0O{q5l2)O^s5e~0;< z$8^raxNv|U6*|{P6;?iz!vIn#kVeacza40NXXoVCPi-PmMK~J~`Z<_<4R^| zqp_l4i?hajs3WrZ&AdklI1lneP5NB@oDbd?zdfbimOazVT6G+8Cv;NK8!{x}a@AM# z(P*tS&E|YzmLPayMT_@=M_G*1L_6bIf*u?=Tk>7Y6F!AV*0Uo<4)KNy)EY)EU=M+r z%h1S2&aeFz=>LFX7F_N%*=Dq3j-p+gx%=Yg=P!Za zvt@z6-SjR^ZnFIWHE|8cbOF^1@(&W$qdmVm$*)-z9$GAxx-9Jc<%?CHSJ0J2d|pfZ zAv482NT2)=Z7fKnFFUuc>H*C-MsrkB8Bi-kdLk@pZo7bmGeh;MK`u9(gLv+aOlBS9 zVm045norc&;gcMzg0{&W9UY~1Zsm^#mnz%rtGb#B_WXY)=LKQKgMTruUL{ZZoEM9x zc!mMJAEqUheWl{eeQRV(!fvoKoilw>z^S?u{dq+mNkyDI$vBojDEHe6l1~zNoNMgz zB#a}-tbN`gT;?9I0Av6{LQ~~besraCx=SG3+oN2RREKKG79f)flR;!ddHE-KFIE&7 z_16e@&h){$_4lZf2^(VX+sL4x2pfXyIDjC1+*t6wQP)`qS6!2xCV5;o+OH;^{d1Mc=uhhQ!&gEx@KN%cUoN3Szbrm2xi% zcUMfTmDru7zNFl5`uvi2o=q#Z#YsSF&~p4&ZOEU@Spya52CEty*lL1wu;}aCrEN7c zBlWRGeVt)ha5t)n2!JfRm`b;}EUIZg{us=JwhFfC348oDl8ACNW3s_jYIDwkTz4XY z{G|3XV;b|5A#bi3kMo@MWu1u<&#httGR7mK2ZF8iE2-oU=-hfkWfEKNO~(kYF0VI- z5Z3YG!*7j|AegHE zNloD9i`BsMOS)hqvI!3brOQTxMa@r6IRucL7oL6>6LIMoQ?7KR;)`#*we%@PxeM48 zJ|ymZ?;zsddF`gt@OtP6KEkL+BwuidZ2_GEE*?|d7Z%yvJ_A9E>iJ1CM?|ei=Ma@# z6DxyB#xBNUGmB4zObA0*z$%;IjviRR$NKRvIm`2IGhV59#&~exf}IrwxcfvP;OL_3 zJk~8xJZ2;DW{TD4XD3(c+g>tGF`j@eHqFYgHwC3vFS|t47OsNuG~$-)?;%_F!CEES z^8{i{4zKJSWtWa9>Ofyw#Il|hIz7qKWQ;>PWlE&EnD#2A>yUM~dM|%}{d70NJ2^jv zO_Lh6!5+0yzI@n{XWDW+Xa}H0?E$p%f5;x*17xsd2d-z`9XH+nUi)Sv;O4eR-`;3D z@}c#su2r|)Ck3wat;j|(0`Jd*PybNly!!kH8ka<-n)G6A*V8)HGE4hy#E;cnZ4Ge!rZ$&RNWTE*}M}K+fDPJbpA@k8ZKI(Tr$Vet_*7$60NV z8)w%oh|uR`HS*D%r1e*hOjD~jF12r&WpemML}u6*$vFRZlmEt*GPXD;~uFy2hH zV`Wm21oQ2j+g;n8WbU_I%Ssbqf)&l#>hYI;!}cQ4O~MD>3oVap8+@0iqP9R&KWsL$ zFS3W22X#Zd)VEINgq-z(S=DVM3yf~dmP-<8bzvPTaX)r>8#Y-P5sMOVkLr*Gz0XfM z*&zi{8}tsDQS0^rs}b>!yvz(`FOOF5ic*fnPx@6Gxr%ZO&@z43ID{{bA=M*QISgnUBeu92Hh&3D%&Fa{jmP za0V^w;54iJWGHK<)L^cc$A0+qbP61_R>LlM&-x=vJI8#rc{3Xt4m1rv25^Xt7T_V6 zKAg0=uKCiyz|19wz1>nL3pRNr{b6e$B(XayECZoy8>wi{G_RRT!m2j`mm&dKf744XPW`@J( z37*(L=i)J3FtdvMPVXq-B0BOxd}kQo?Ie$6r%kuB)H}h5+I1Dg(-?RhR556Ik7DRd zJ}M82G;KTI;sB@v=<<*6{5Qh!5!0fIBMhQ^r#D{M;#_SxIXO6x1Dv9#lV>f#Fg}$0 z)l>}u0rosWCqVTqJ^TVb^L%Uo7sx?R`vfz=x}qT|=jTpd1-SW3k!ZNb!TP{Ai8E-= zMT=?m573iFcj?pS;HJND!oJOp9~kKQZJvyUTe7x%o5VT%?jURy!{3_q z*LA4gWHD3t+~itIZ|LGb9f6I37En$)DtV_U~c67oCq&i%qp zkPsc!?h>$sveDBS^Ii@Yf_qCv&^=007Rm&J3j8cB+t(rxk)y0!tB;3vz?fLc?#AuK zwukuP{McEmf2tX#ywr2AmZmE3uDffNe6(Wdb#m&|Vw4>vdg&@?A1D zAi(j9ZsT`ntxgY`DuEm{aw;(6xPZi-=Ac1#g!EszC_yzS2e-7qcTB|6<4k81%06BW z!3`{7E}hdkTSTy08fj?sXl~|XY4scIwFCX22-d$G%A}_=AZF{GOE#XrS+|c* zU*d>Q%yr&oJ$JBc;nwP|ZavG#*;`Tbu)y_fyb5AW%|$N3M8BiHa~=Zbz@GDu7dZ() z2q+x?(zm?6e3d>?5+r`MeO)*RLJ2*S1LYpbLE_F@KS}Y?sb^4hX4xXz^*0JKI2Lq1}IT@DuseS z|0tOYh8f@?BWVlfN$hhs&pBF87#jA7OU&IY-9%ZjTVtZC&=QB^PxTZ!<*PYT;;x9q zPW7uBJ~|=^R@5v2s+6b)vw_D@sb*S=GTVq{t(Sku?L9gYdiIgFmRCM^yZOzv*s*B{ z2L`F2i;=)U?NNUd!A=akaq|htP!Aw0JN%3iEmX)ZM^ggJedYA~Wm;=$Z@;h=F)^0% zZ)fDB?dxX^zc`xLEHU!L(WNdinV-F;>%)~D7!;3ybl7NE=o=MP7}`ChV1FW`gxmH# zKG(~e5ObCZK6&xQ7`+&j{xw%Ch&y|MLfq>yUAa`W*=a4U_Bc+@0mF`I&{}Apy#Z#W zYIEPsT4-eV4?r}RcPAa@(bv6xGYtDZFn>DIF{ukK>Jd_1&pLI{OWAM2eq^GB)mVKOp zQi;;911K%K<6~rVRwVLa?2V5BrJ)+p6uYXwLna8@TxrN%2?Z%GG9NWoA?$w=_RuGR zk-{p~G;px;yr+jS7~$_;r2wkKOx!zn&U~c#@QareC);k=d#N<^7(^pcBa%Z6QYeUE z8h|AGOf~MyS6O@razm#23n0#JSm;G~0caW~a8z&e6O3Dbf z5#35{7;E=?bP7!_3ykz(zbb`pHa2?Nv`>)pX0bm|t$gb~xO3Y|l-O?-0x4Gh5y;0_?M1l0g+bNY&twf_nfkF+d3;^`;YLN&48P zY*8Ev-_tm^t?GP$TIUU4VhVn!khLHs9?DJjT@29H`K&Dylj(70$m2nU@;FEtzJD zo}Gy)6MAZ|D0V3lW>z4pB9DA3+atCg#<1BgGVGl(?D6)!{*26} zgC8?#PQx(Bzd?Z2i*K$OI;NHav7U8~-K`2cI( z0YQE0PnbFntR!~gqo4CsLg49Z*##~pFT~F>-+T4gRU3=FjXprR*rIWRpp#m^|T2lBjc%J{uGqTXj%!v&=5YN7f!XUYB6|4 zcmq6t=|7D37brd6_jQ+hZjbhuSJ@nAM_ zg?c2hY5LF6e#FT2!n5H93%~n|m?8LO+pI)M`FWiB(84DefDN|86^p5RCWys{u_tN~ zJmi2iZ$6G1W2&4}pN00Lmm1$0u^E~R@F(A7JC6lxm3m+Nj z@vv=ul2R|FdZP)&N7#oDwtkOLcC9r+)^9}{m=A)f3gKkLY6joLaKhIiRPjcp#PMt9 zF$0gf!~IRKSsGJ!Q2uz!#5yJnQjq3XLL|Mq9iMa#L>Q*d?k~^R$l=g_0edOS11P3x z*X2_-yd8aK>IQIKX(m$XzIggq4s{b27_jmE2{;HPLGBUoI_8&k$bfaotYi3#Cf5QN z#(ocsASQubs8>*dejtDF$6~#*6uJLr$@(wV$1g+JIVx(A(Nm#FEHmDjG};Qqt|`P6 z3ylB<$RcQzB+Rm5cOc5Xen^E_< zR#Cz@83~xC>D|-mKVWF|yNxFX2o9!m` z*~v=OEg}D+KEap#8vg9&bV4F#olxc~jJ34xeNdHZm+f|dCgL_e~t&A8EYG?H>|UWBELq9#E!{&r7198B(a0wWHD ztRRTvS{){4$ZF4?3$z;Cql^F!773kizd;wowE5<4o}SWtoTd6WOZ;wH|EFCD&WAhd zfUTkgA&95ibuX!fSN!x^e|~&aojJQ@X9z3_g4Cb0zZ^9yJK4Vsu$biuVDU(TjSJhF z#PN=Qdd@#7TA}*#89R`NaiO$BaGqkJOFy3}8yH6(s({6)%l$k(h4R_Z$CcL0Mlq{~ zG`U%{O^Tj@hOcTiDD`BG#OeS&j7UhYL}LR=TA&hix637qpA61M9~N;dU2EshGluGg z{@Nf<TWKCZgTVM!P@ww%;BpQs zD0HsgK9k@zU&Ee3Y8@OhxpyYWtPPE**qLtR)1v!e%%5glV`R*K?@O)5JQ336b44{S z@W;PSW%C*}jY*6HX?%=z4(PhPYjx2TCo2XQ3hF2?{b8<<-&=_Xg?SmYYS=p(^qYUY zwlO@XMP3N3L}X_(F;_i%*QQf>M{IC?kyypjOb6g#MWnD-RI0(X;k?-ix#!r8KQ~wCJOBqKf$XjRko<(pUJqA0vc>nDB69= zsYS-?p{=5hY%w=Cf#}5AFSDT)(!{E_o02SoFy8tex?LL&b+YZO2 z%!*3~7m3B(oMDjbY3+wTw{$w$l) zs^#fj(>C%GK1y8R-)UFy(W9<^F5?%J5vk5M5Iqk}i<4(M zNvb}qjTO$)v}6g~G? zU(GAmZEluvd=0+pF1gu5W)Jxs+})EP18sO6l}cMtXi#O*F?x~O#1K1}F@9kf$wzEB zYTeTB*q~%?`(+NF-sT>Cse3W;^Oyneqvfw^o_vM8Zz`XCfTgUR2()8xqC0KC`R+KI zrVSJGkAc;j!^poMS^f#w4iKZsDZ@YCJl(DgyBFvVS<61zn-?&Ps12IF@%O3uYlXX? zGUC>Gv^_3;x52`$8k2fZROR^ZMD~V$^D7ibtHb0dr~pp)aa697C!>^twPHbtiA*R< zQ|{?6*E+A4@+vs|kD)@U{4IzVgh0{20D*-vChU{9(IS9poAfa%kB+XBgh{eqzK}*c zdq;xk20kWLZs;!dS5J>j;a}-qK{OQEP;cafJC7Xm4!!n>!Er*lU`U(k4^e-(;bX{P zf}J`F+WzmCMX$QWKPsgn%FITkZ-D{F|F{mnp4<_{=SfB0{mZ+3cr2~F79R5g;F#0< zkY|5u^wE4~sZ6-ut)X=B_8qK+5RlG)`+Gd^x_2b_@V$i(gB8=p;h2kQhaZWXc`I?x z6X`r_X$EWI`!=G?R+3q;Xlljx#fWKlQ7;#%P^21;E5P-@Qx^d~A@Pk4zrowSac4a8 zhDMM87CCyXQv7qLPwQd(W{)LrsCF`17{%GeKJ*usUDsCg7}!OJH@@U9VarLZIFD6& z*kAtqC}o@H=Z_YDqmXXiAEl0qt|nV$dj#46SP`F%Xzd~w`lV8QO=_P`Khnx={J&Fl z7QK5l9T6bpMZD8$EL7WCW03J}WOiCVeh}EmfMHvBZRUl&-x0z^F(n(0M8x z^jAC>Z%!2EQ8A5(#FGX9w6NY}2l<$!t zlk}A?JxljAmkX=acyVaOXY}RSqn{=b$(wu4@M;7kM1n|&Ay$xqOprNVh&dj?-9Vw2 zm|bK|N|kyeC5wjobVjmkPOy+07()UKBuT!UWrm#j#Wp%TuDe*fWDd~wAj#TTe1we= ztZ;TwDK)Wj_O6#Meqlc)G}l`FV2fgb1K@Y2I>G>9h5nTpW|OB;EUN%1uJ;wuRNBE3 z%CHPKK`aR%J~!5ajk{&uf4n%I%B;O_!OfNtK!y6(V{tp+9dwu;d~^}EzOzU8isi2V zwr6oM;O@6=ko()IJ%8qH(rgcni>)>?l2essHdENq+=fH0M^EwXOK0M0~hWuLUhA~$3L3w{- z6O%4I0)eCN?yh5QdWcTlNm0HXm-6AlcK?g5$AG4MV%hkali-B!2j}kOUKE$BRYoIz z9nXU{a7#4~ND5$|UJN)``)xCQ6IM4JCK9jxVfr$Gh@2bzH_FPbv&PhXIp5{Q&-WEY zHS;{4yjt@NG)zcH@eNJUIv`ArrLPCt5rQ4fdixm-c6zdu1}vP|gUs~f%c0m+h3H8s z!7@l$1BJRTiQD&w3l-j1b-zb#e;j1>5nTBX^-4=(>Smd*rl#q>|fp0w)vZ^St;<3 zVe_3f08=X^niU6%CMht3kZ_WaQisI!5}sRV!*}Nf(@-75Y&P)PH(wbj>RK07HFF@$ z>|Qt2hL1wWJlgVLYszf-!j z9J75QvMI5PA4&ol6J*e&dE)q@z7pufP>EZf>FS2XU*9mX@VWb381tp%gFDP)%xfae z1r&oPnu@<^Fy$vK*Ynv<00I4M@aw%lWL);&zka` z7LaD&li{;Q7mev{p8tlooY>^2fKe@E@O0%2{DeV-a>m@< zKgGi!sgc8PQWWF#1dN=rlmuvwcwy4xcueF8{oEDJ{WwX-VG6GRY*L4OVdVJUpB@%x zQ)%S%y~B&z3d%}OP5bpwkmc;l`M5v?JzLMtr+8^kG&MS^+Zk^qNTZ6YgUj_sT=IlSfL>75ixEC1x6vhnd zyAO7oyo)IRX4CP!=!-DpW;{6^6d4|mJ9d8%N@AC*Nr!3a`JgkO<$%JsXca)3)A@6| zSzi_4XHX^9sm|d5od4d|wcR6CESFX^eD>vp33tO1Q|pNJ-6;u#^mtrvk!fuEtN7!& z_sHQZFH`Yqxvq^>Wx?_*-XcYZgh*6>i@FV>l9T(2cwgL~4<+*4>z2_z#RzE%8^*H5{73uQV-wlA0iMCVUYitJ>eq|aZ>OASGzWwsNU#-3 z5TZLv3-^mEf=npZlvXGFa+>k7i%`jY)%PfW<<JcT~}MIHs68W|NKin{5K|c zcf@jwbvsz;xQqwfa-q7y{Z_{PL8yykhjmWpj5q^4!{U4$lkgAYbVwjuh~6!f7<%op ztl{>fS*+P>^Et(^da*-|?835C#-Gs(uDXt!ug+q5Xb-Gvf!<_LFhuOf^ho^+!MVa= z+Vw}rOok@;ypK`_)LyY5L)eHZ2NFBxDJSggwrd1E#nG9J)?(AsFo?V0fj60LVKeIB zx~zgqa~jpaGk+0CAqQn6rk*97d`vX>B4cJVs03BP8`IbK!l-~jW3!yfs2Ontwf7AJjwPd~u`)I_^FoE7Y@|0X&&KrAqy}7t@ z>nWW}+9KGLE<}1IuR*WxeZTHrrQMekQbluP0p0n>G1jp*pHV3wE1I3RF7|Fg4daCF zD=q{O(1}J+GHZsQe0e1M{zJ`Hf7ow7;K}^J8Q5d+8?ZGdDw*IvBYMPa}Pg{u7LT_ z{XUO~|MJs2!mrBf6v`{(>WD5zos0=e`J*VJlp%Uh2Bc>@(%WsE{9xsed>9v|&{HyJ z{8inhr|=?U>`c!T8T~f12s@9^i%59gUzQnqIwAjtp!=jmj=!5)W%Vl zS*L!Lr1Av6!M1byb~0~W`uXfHWj%!-{w-L9>4 z7Dj3MtGmSgA&(@8RjyDsAH|_`gX>hYXCLX+4Qt#-`A95~o(d=8d8^*f|4YR5C!bss zbC!ol?80BMIeztXlN9CR`zZ8%fj^rgOijg9j_SxTKm7pi$J# zjvK1`YA^a8!!`ZYUgG|BCrjDHk1B{5@#?ZvSRa=E_$9s|5gP2^7S&@3o{yT1EzJ7C z1~FVvwVF(z2>f|wEPa(eTTvhZyn5s-${p~ydRe0IbJcLc%D5d z!b3AkaxVP#(kMe`^e z#R>=PM?g@hYsd=0yPC+ZdfnIKBSs%LCHpn4U)WDO&B4zp!m~FYsaTAI0B4JE-U7n;%SuoCsUl5YXxomoeOVl{v10h@q|O zr?(V7TnBmd6zfSEEW|WVZ&nc8((`#wR=5W5p5cA}O33A!*XKi|-{yXIy7Pa2UeS(s ad6!?S{n#gc{wwau2tZX)OQ9NR8TvmBXHcL3 literal 0 HcmV?d00001 diff --git a/src/icones/devices/cdaudio_unmount.png b/src/icones/devices/cdaudio_unmount.png new file mode 100644 index 0000000000000000000000000000000000000000..9a94168da7ed5177549862b393dc609cbfd1ca99 GIT binary patch literal 24670 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 z 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 d={Nwb2WVG>#L?1vr>)P(;P1pMOJ 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�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 literal 0 HcmV?d00001 diff --git a/src/icones/devices/hdd_unmount_other.png b/src/icones/devices/hdd_unmount_other.png new file mode 100644 index 0000000000000000000000000000000000000000..9f4ce3d28ccb1cf83aa129520da33444397bd414 GIT binary patch literal 7909 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 uO9hc+!nVE1UW+8qvTs~uEo(_*NlJxKs2KYY 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 literal 0 HcmV?d00001 diff --git a/src/icones/devices/print.png b/src/icones/devices/print.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3d96fb180a559cf06b84a3e68f5227f2e0c645 GIT binary patch literal 17340 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 literal 0 HcmV?d00001 diff --git a/src/icones/filesystems/folder.png b/src/icones/filesystems/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..3e2a65828704b29cace5d50eed28330ec70071ed GIT binary patch literal 9230 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 Jo);tK{{g*e@Oc0L literal 0 HcmV?d00001 diff --git a/src/icones/filesystems/folder_home.png b/src/icones/filesystems/folder_home.png new file mode 100644 index 0000000000000000000000000000000000000000..f6ebfe41fb56b4126b3ebd20143fdac6f476e255 GIT binary patch literal 14580 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 literal 0 HcmV?d00001 diff --git a/src/icones/meshopen.xpm b/src/icones/meshopen.xpm new file mode 100644 index 0000000..526b5a1 --- /dev/null +++ b/src/icones/meshopen.xpm @@ -0,0 +1,96 @@ +/* XPM */ +static const char *meshopen[] = { +"30 30 61 1", +" c black", +". c #010101", +"X c #0B0B0B", +"o c #0C0C0C", +"O c #101010", +"+ c #181818", +"@ c #191919", +"# c gray11", +"$ c gray12", +"% c #202020", +"& c #252525", +"* c gray15", +"= c gray16", +"- c gray19", +"; c #323232", +": c gray20", +"> c #343434", +", c gray21", +"< c #3C3C3C", +"1 c #3E3E3E", +"2 c #3F3F3F", +"3 c gray25", +"4 c #434343", +"5 c #4B4B4B", +"6 c #4C4C4C", +"7 c #505050", +"8 c #585858", +"9 c gray35", +"0 c #5A5A5A", +"q c #606060", +"w c #656565", +"e c gray40", +"r c #676767", +"t c gray44", +"y c #727272", +"u c gray50", +"i c #808080", +"p c gray55", +"a c #8D8D8D", +"s c gray56", +"d c #909090", +"f c #989898", +"g c gray60", +"h c #9A9A9A", +"j c #A0A0A0", +"k c #A5A5A5", +"l c gray65", +"z c gray69", +"x c #B2B2B2", +"c c gray70", +"v c gray", +"b c gray75", +"n c #C0C0C0", +"m c #CBCBCB", +"M c gray80", +"N c #CDCDCD", +"B c #D0D0D0", +"V c gray88", +"C c gray94", +"Z c #FEFEFE", +"A c gray100", +/* pixels */ +" ", +" AAAAAAAnq @ 69 %dCAAAAAAA ", +" AAAAAz%o@osu@MM;32 * zAAAAAA ", +" AAAA7 *yokM*yMMh b6;yo7BAAAA ", +" AAAs 9MXhmm zMMM@hM;ub>@CAAA ", +" AAj6kMu@mhs eyhh*umc*MMs2CAA ", +" AV3MMM@o @@e9>;@ @ eMMiyAA ", +" A3kMu@o6uneeMMMMh;he* 6zM2bA ", +" n9k@@@yMMM9yMMMMzoMMMo; 6k3A ", +" 3eoyM@kMMM;hMMMMM MMM6ez2**n ", +" okMkohhhho9eeeee hhhy>MM6 q ", +" hzu>@;;;; eeeeee ;>* 9hn;% ", +" @@ ;>eMMMM MMMMMM MMMM 9>o* ", +" @unMeeMMmh;MMMMMM>hMMM MMny ", +" hMMMeeMMMh;MMMMMM>hMMM MMMM= ", +" *bMMeeMMMh>MMMMMM;hMMM MMne ", +" X5keeMMMz@MMmMMM;hMMm n6o@ ", +" @s3* @9eee hhhhfho9ee6 o3ue ", +" eMMu*yeee ;;;>;; eeee@MMco; ", +" oemh MMMM;hMMMMM MMMu;Mz= 0 ", +" q6*2zosMMM;hMMMMm MMM6yuoe@V ", +" Voz9 o9MMMeeMMMMh>MMboo@hp0A ", +" AieMz6 *uby9MMMMh;k9XouMb=CA ", +" AA6kMM;*2 o;;;;@ @6 sMM9jAA ", +" AAC>cMhobMz hhhh*iMu2mMyyAAA ", +" AAAB@rM6>MM*hmmz zkXkz;iAAAA ", +" AAAAC2*s6eM96MM66k*s9#jAAAAA ", +" AAAAACy @o*h kk 6 > 7CAAAAAA ", +" AAAAAAAVq ooo %yBAAAAAAAA ", +"O . O" +}; diff --git a/src/icones/meshtexopen.xpm b/src/icones/meshtexopen.xpm new file mode 100644 index 0000000..6dee834 --- /dev/null +++ b/src/icones/meshtexopen.xpm @@ -0,0 +1,292 @@ +/* XPM */ +static const char *meshtexopen[] = { +/* columns rows colors chars-per-pixel */ +"30 30 256 2", +" c #010000", +". c #0C0100", +"X c #1B0100", +"o c #1C0900", +"O c #191400", +"+ c #101010", +"@ c #240000", +"# c #2C0000", +"$ c #2B0C00", +"% c #340000", +"& c #3C0100", +"* c #370A00", +"= c #261100", +"- c #2A1403", +"; c #221C03", +": c #3E1200", +"> c #3E1A00", +", c #2B1B1B", +"< c #26210E", +"1 c #3D2000", +"2 c #383000", +"3 c #262012", +"4 c #333220", +"5 c #440100", +"6 c #4C0100", +"7 c #460F00", +"8 c #4D0E00", +"9 c #540200", +"0 c #5C0200", +"q c #520C02", +"w c #5E0B00", +"e c #5C0909", +"r c #560A0A", +"t c #421400", +"y c #4B1200", +"u c #571600", +"i c #531C02", +"p c #5A1804", +"a c #660000", +"s c #6C0000", +"d c #6C0D00", +"f c #640D07", +"g c #770400", +"h c #7A0000", +"j c #770B00", +"k c #7A0A00", +"l c #7A0D0C", +"z c #6B1101", +"x c #681800", +"c c #751300", +"v c #7D1609", +"b c #4E2700", +"n c #462805", +"m c #5D2302", +"M c #552200", +"N c #4A3A00", +"B c #513700", +"V c #5F3200", +"C c #5C3A00", +"Z c #553C00", +"A c #622E01", +"S c #6D2E00", +"D c #7E2000", +"F c #76240C", +"G c #623300", +"H c #6B3500", +"J c #6F3D0C", +"K c #703000", +"L c #66211C", +"P c #672819", +"I c #75201E", +"U c #79271A", +"Y c #4F3B30", +"T c #6A2E2E", +"R c #623F21", +"E c #623232", +"W c #753130", +"Q c #554A0C", +"! c #6B4300", +"~ c #634800", +"^ c #664600", +"/ c #6A5C00", +"( c #705700", +") c #764E1B", +"_ c #66542E", +"` c #774B26", +"' c #7F7923", +"] c #79773C", +"[ c #6A4544", +"{ c #6B5D54", +"} c #66614E", +"| c #666052", +" . c #7B6D67", +".. c #830500", +"X. c #8F0700", +"o. c #8E0B00", +"O. c #950904", +"+. c #8B1B03", +"@. c #8C140B", +"#. c #9D1400", +"$. c #9E170C", +"%. c #901702", +"&. c #831312", +"*. c #9A1C18", +"=. c #B30C00", +"-. c #A31300", +";. c #B31605", +":. c #B81A0D", +">. c #A91110", +",. c #AA1E16", +"<. c #A81F19", +"1. c #A01D15", +"2. c #BD1E14", +"3. c #B71F1E", +"4. c #BC1C1C", +"5. c #8C210F", +"6. c #81250E", +"7. c #8C300B", +"8. c #872019", +"9. c #812510", +"0. c #992816", +"q. c #BF2100", +"w. c #B7230A", +"e. c #A72819", +"r. c #A82415", +"t. c #B62112", +"y. c #B0221E", +"u. c #972620", +"i. c #982424", +"p. c #AA2424", +"a. c #A32622", +"s. c #B12120", +"d. c #DE0E0E", +"f. c #CB1A03", +"g. c #CD170C", +"h. c #C31808", +"j. c #D51600", +"k. c #DC1201", +"l. c #D3130C", +"z. c #DA110C", +"x. c #C71717", +"c. c #CB1615", +"v. c #C51A14", +"b. c #C21A19", +"n. c #D41211", +"m. c #ED0707", +"M. c #E70B0A", +"N. c #FC0101", +"B. c #C02000", +"V. c #925A0D", +"C. c #885F10", +"Z. c #836500", +"A. c #8C6500", +"S. c #906200", +"D. c #9F6F02", +"F. c #9E6E08", +"G. c #8C7808", +"H. c #8D7801", +"J. c #937502", +"K. c #9D7300", +"L. c #917508", +"P. c #826110", +"I. c #9F6B15", +"U. c #94701A", +"Y. c #A27500", +"T. c #8A7037", +"R. c #825252", +"E. c #9A5E5E", +"W. c #A17946", +"Q. c #975F60", +"!. c #9B7475", +"~. c #A96F6E", +"^. c #9B821B", +"/. c #AA8400", +"(. c #B5910E", +"). c #B19312", +"_. c #B38A3A", +"`. c #ACA53D", +"'. c #BEB43B", +"]. c #C2A01B", +"[. c #D6AD1D", +"{. c #D2B211", +"}. c #D3AD26", +"|. c #D9AA26", +" X c #CCB222", +".X c #CAB228", +"XX c #C3B524", +"oX c #CDAD34", +"OX c #C6B134", +"+X c #D4BF3F", +"@X c #FEFD0D", +"#X c #FCFB1D", +"$X c #FDFC15", +"%X c #CDC437", +"&X c #D7C137", +"*X c #ECD12C", +"=X c #F0CC38", +"-X c #E3D433", +";X c #FFF62C", +":X c #FAFA2B", +">X c #FDF824", +",X c #F7F73E", +" G.S.H C > @ @ : % g 3.b.O.Q.UXUX ", +" UXT &.:.O.9 5 a &.i.z J.fX,X,XpXOX5 I f 9 5 s ;.r.6 DXUX ", +" DXr 7.5 q w k v.n.b.g /.:X#X$X#X*X5 p.c.2.5 A % q T E UX ", +" Y p & ^.FX8 5.g.z.4.a |.2X;X;X;XyX5 p.l.h.q T.kX~ * % SX ", +" . = 8XjXqX# F +.%.v & V.F.D.D.K.I.# U +.+.p B bXjX/ . } ", +" . 9XrX).C > G S S G # d k k k k d # G S m X X A.}.vXN ; ", +" - t & 0 6 J.aX2XiXmX& :.k.k.k.k.B.& mXtXiXmX# d a 6 M . ", +". # l <.s.k K.:X@X>XXX9 k.N.N.N.N.j.9 XX#X#XfX# w.v.,.z X ", +"X I b.z.c...Y.:X@X#XXX9 k.N.N.N.N.k.9 .X#X#XfX% f.M.n.y.% . ", +"@ 6 :.l.v...K.1X#X;XOX9 j.N.N.N.N.j.9 OX;X>XhX% :.z.h...X . ", +". X & w 5.x L.fX Z.Y.D.U.% #.=.=.=.=.#.& C.K.K.( X * ! 5X] ", +" . ' NXsX(.5 c ....j & H H H H H H & d ..k x t sXaXlXO 4 ", +" o H.gX.X& a.c.c.p.0 oXpXiXuXiXbX& p.x.v.c A yX-Xn . | ", +". { t & ^ zX& @.z.M.x.s [.:X#X$X#XtX6 3.M.l.w W._.* i # JX ", +" HX% U w & 5 s v.l.b.k K.X$X>X{.0 s.x.:.5 & 5 F L R.UX ", +" UX!.e 2.;.g 5 9 v 0.z Z.hXpXuXpXOX5 U w 5 9 X.v.r.5 PXUX ", +" UXUXW >.x.s.0 p J % % - Z G H C > @ t ` % O.4.b.h AXUXUX ", +" UXUXLX9 *.b.#.5 vXsX=X% D -.-.+.5 ).bX4X0 t.4.l E.UXUXUX ", +" UXUXUXGX6 ..e.8 Z iXyXm +.g.n.0.% eX+X* F 1.a ~.UXUXUXUX ", +" UXUXUXUXLXE & L t G.mXP.0 g.g.a ) 0Xt m r & CXUXUXUXUXUX ", +" UXUXUXUXUXPX .X @ o 2 7X# $.$.# _ . - @ [ PXUXUXUXUXUXUX ", +" UXUXUXUXUXUXUXJX{ . . o @ @ . 3 .JXUXUXUXUXUXUXUXUX ", +"+ . + " +}; diff --git a/src/icones/mimetypes/image.png b/src/icones/mimetypes/image.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c4e4f702f572a89cb96920c67e0bfaa5aa3c95 GIT binary patch literal 10929 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 E0XHXOl>h($ literal 0 HcmV?d00001 diff --git a/src/icones/mimetypes/sound.png b/src/icones/mimetypes/sound.png new file mode 100644 index 0000000000000000000000000000000000000000..1f07e55e3bf45ec3ea425fcf3271ad295b462679 GIT binary patch literal 10399 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