420-KH9-LG--Techniques de visualisation de données

Ceci est un petit site de support pour le cours 420-KH9-LG--Techniques de visualisation de données.

Documents sous forme électronique

Cliquez sur cette cible pour le plan de cours, sous forme électronique.

Vous trouverez ici quelques documents pouvant, je l'espère, vous être utiles:

Vous trouverez ici un solutionnaire des exercices du chapitre 1, en format électronique. Je vous prie de ne pas le diffuser; si je m'aperçois qu'il circule hors de la classe, je vais en prendre bonne note...

Vous trouverez ici un exécutable de démonstration de ce que nous aurons comme résultat à la suite des exercices des chapitres 2 et 3.

Vous trouverez ici un exécutable de démonstration de ce que vous pourriez essayer d'obtenir comme résultat exploratoire une fois le pas à pas des chapitres 2 et 3 complété.

Utilisez les touches de flèches et les touches HOME et END pour déplacer la position de la caméra (remarquez que le point To reste fixe, ce qui explique la rotation autour de l'origine).

La disparition occasionnelle des cubes tient du fait qu'ils quittent l'intervalle décrit par les plans de clipping. La disparition du «plan» coupant le cube original lorsque vous poussez trop loin la rotation de la caméra tient quant à elle du fait qu'une seule surface du plan existe vraiment...

Vous trouverez ici un exécutable de démonstration de ce que vous pourriez essayer d'obtenir comme résultat exploratoire une fosi le pas à pas des chapitres 2 et 3 complété.

Utilisez les touches de flèches et les touches HOME et END pour déplacer la position de la caméra (remarquez que le point To reste fixe, ce qui explique la rotation autour de l'origine).

La disparition occasionnelle des cubes tient du fait qu'ils quittent l'intervalle décrit par les plans de clipping. La disparition du «plan» coupant le cube original lorsque vous poussez trop loin la rotation de la caméra tient quant à elle du fait qu'une seule surface du plan existe vraiment...

Ajouté le 08 septembre 2003.

Vous trouverez ici une maison qui tourne sur elle-même. Elle est faite à partir de la classe Bloc (légèrement modifiée) et de la classe Pyramide (de mon cru).

Truc: commencez par faire une Pyramide qui a de l'allure, puis vous travaillerez à faire un objet composé (ne vous lancez pas dans la maison tout de suite: faire un objet composé est un travail stratégiquement différent de la tâche de faire un Bloc ou une Pyramide). Vous pouvez bien entendu commencer à penser à une stratégie pour passer d'objets simples à un objet composé, mais je vous proposerai un modèle de travail dans un cours théorique.

Ajouté le 09 septembre 2003.

Vous trouverez ici un pâté de trois (3) maisons (toujours en rotation autour de l'origine), logés sur une patch de gazon. Elle est faite à partir de la classe Bloc (légèrement modifiée), de la classe Pyramide ci-dessus et d'une classe Plan (représentant une grille de panneaux verts visibles du dessus comme du dessous).

Les trucs applicables à la maison (plus haut) sont aussi applicables au pâté de maison.

Triangulation

Ajouté le 20 octobre 2003.

Vous trouverez ici un projet permettant de générer une bibliothèque à liens statiques (.lib) offrant (entre autres) des services de triangulation de polygones quelconques, représentés par un vecteur de points 3D placés en ordre anti horaire.

Notez que la triangulation qui y est présentée présume que vos points sont aplatis sur l'axe des Z (la coordonnée Z de chaque point devrait valoir 0.0f).

Je n'ai pas lié la bibliothèque à DirectX spécifiquement; elle opère sur des points plus généraux. Cela dit, vous pourrez sûrement ajouter par vous-mêmes des outils de conversion pt ==> D3DXVECTOR3 et D3DXVECTOR3 ==> pt si vous en sentez le besoin.

Je suis certain que c'est perfectible, alors les commentaires/ suggestions d'amélioration seront accepté(e)s et apprécié(e)s. Il est clair que l'algo de coupage d'oreilles, appliqué par ma petite bibliothèque, n'est pas le plus rapide qui soit, mais il est relativement simple à comprendre et à tracer.

Ajouté le 20 octobre 2003.

Vous trouverez ici un petit programme de test pour la bibliothèque de triangulation proposée ci-dessus.

Support à la création d'un contrôle ActiveX 3D

Ajouté le 07 novembre 2003.

L'archive ZIP proposée ici contient un (petit) document décrivant grossièrement ce qu'il faut faire pour adapter une application MFC utilisant Direct3D comme nous le faisons dans le cours 420-KH9-LG et en arriver à un contrôle ActiveX faisant la même chose, mais pouvant être inséré dans un conteneur quelconque (un programme VB, un dialogue MFC, autre chose) aussi simplement qu'on insère un bouton de commande.

Ajouté le 07 novembre 2003.

L'archive ZIP proposée ici contient un projet ActiveX complet qui affiche un village qui tourne. Cette version utilise un thread pour gérer l'animation du village.

Pour créer le ActiveX, il suffit de générer la solution contenue dans l'archive. Le résultat de la génération est un OCX, ce qui équivaut à un contrôle dans une DLL.

Si vous utilisez un outil comme VB6 à titre de conteneur, notez que je n'ai pas pris soin d'insérer une icône représentative de mon contrôle dans le projet, ce qui fait que la boîte à outils contiendra le composant (si vous l'y ajoutez, évidemment), mais qu'il n'y aura pas d'image pour rendre le bouton visible.

Ajouté le 07 novembre 2003.

L'archive ZIP proposée ici contient un projet ActiveX complet qui affiche un village qui tourne. Cette version utilise un objet autonome pour gérer l'animation du village.

Pour créer le ActiveX, il suffit de générer la solution contenue dans l'archive. Le résultat de la génération est un OCX, ce qui équivaut à un contrôle dans une DLL.

Si vous utilisez un outil comme VB6 à titre de conteneur, notez que je n'ai pas pris soin d'insérer une icône représentative de mon contrôle dans le projet, ce qui fait que la boîte à outils contiendra le composant (si vous l'y ajoutez, évidemment), mais qu'il n'y aura pas d'image pour rendre le bouton visible.

Support au TP0.5

Ajouté le 27 octobre 2003.

Je vous offre une archive ZIP contenant un exécutable (en mode Release) simple dans lequel un tigre tourne autour de lui-même. Les flèches et les touches Home et End permettent de déplacer la caméra. La touche P est un toggle on/off pour montrer le parallélépipède englobant le tigre (ce parallélépipède est un peu rouge et transparent). La touche S est un toggle on/off pour montrer la sphère englobant le tigre (cette sphèe est un peu verdâtre et transparente).

L'archive contient aussi le fichier .x et la texture (.bmp) propre à l'objet. Vous pouvez l'essayer avec autre chose qu'un tigre dans la mesure où vos fichiers portent précisément les mêmes noms--parce que mon programme de démonstration contient les noms tigre.x et tigre.bmp de manière brûlée à même le code.

La fonction pour calculer la sphère englobante d'un maillage se nomme ::D3DXComputeBoundingSphere(). Pour mes fins, voulant écrire la fonction qui calcule le parallélépipède englobant, j'ai utilisé le même prototype que celui de cette fonction et j'ai rédigé mon propre CalculerParallelepipedeEnglobant().

La sphère affichée est celle du MT2 (ma petite classe Sphere, un peu modifiée pour que le constructeur tienne vraiment compte de la position et de la taille de la sphère) alors que le bloc affiché est essentiellement la classe Bloc, un peu modifiée pour que les normales soient calculées à partir des huit points servant de coins au bloc plutôt que présumées orthogonales aux axes.

Support au TP1

Ajouté le 16 novembre 2003.

Voici une archive ZIP contenant l'énoncé du TP1, Usine de bonheur. Lisez-le bien, car une partie de la livraison de ce TP comptera aussi comme un minitest!

Ajouté le 20 octobre 2003.

Tel qu'annoncé en classe, je vous offre une archive ZIP contenant plusieurs choses qui vous seront utiles dans la réalisation de votre TP1, Usine de bonheur (dont l'énoncé officiel ne devrait pas trop tarder, mais dont vous connaissez aussi déjà le détail).

Cette archive contient:

  • le serveur à proprement dit, nommé ServeurTempsQuiPasse.exe. Ce serveur doit être installé sur un ordinateur de votre choix--quoique, pendant la période de mise au point de votre programme, il est bien possible que vous désiriez l'installer sur votre propre ordinateur, question de ne pas interférer avec les autres équipes de la classe;
  • la DLL de marshalling, nommée CompterTempsProxyStub.dll. Je vous rappelle que cette DLL doit être disponible et enregistrée sur le poste où se trouve le serveur comme sur chaque poste où on trouve un client;
  • une archive nommée Bibliotheques.zip qui contient deux projets de bibliothèques à liens statiques (.lib) dont mes projets clients se servent;
  • une archive nommée Commun.zip, qui contient le répertoire commun de mon SC/S (un projet permettant de compiler le fichier IDL contenant les interfaces pertinentes);
  • une archive nommée ClientConfigTemps.zip, qui contient un client capable de se connecter à l'interface IConfigTemps du serveur résidant dans le contexte exécutable ServeurTempsQuiPasse.exe pour lire et (au besoin) modifier le rythme des tics et le nombre de tics par étape; et enfin
  • une archive nommée ClientTempsQuiPasse.zip, qui contient un client de démonstration capable de se connecter à l'interface IConnnectionPointContainer du serveur résidant dans le contexte exécutable ServeurTempsQuiPasse.exe, puis d'y obtenir un point de connexion (un IConnectionPoint) pour ITempsQuiPasse et de s'y abonner. Ce petit client utilise un objet de rappel (un «sink», en terminologie anglaise) un peu simplet qui ne fait qu'afficher un message à la console lors de chaque rappel. Le modèle va sûrement vous aider, mais il vous faudra vous en inspirer, pas le copier à l'aveugle.

Procédure d'installation, poste serveur

La «procédure d'installation» de ces outils pour un poste serveur ira comme suit.

Répertoire d'entreposage

Tout d'abord, il est de mise de créer un dossier approprié (votre choix) et y déposer ServeurTempsQuiPasse.exe et CompterTempsProxyStub.dll.

Au fond, ils peuvent être n'importe où, mais c'est plus simple de les installer et de les désinstaller si vous pouvez les retrouver facilement.

Le contexte exécutable ServeurTempsQuiPasse.exe

Pour enregistrer les fabriques de ServeurTempsQuiPasse.exe, il faut exécuter ce programme en lui passant en paramètre -RegServer ou /RegServer, au choix. Il inscrira alors les fabriques au registre de lui-même.

Attention: prenez soin d'écrire son nom en entier à la ligne de commande (incluant le .exe de la fin), sinon il est possible qu'il s'inscrive au registre en tant que serveur interne (DLL), ce que vous ne voulez pas.

Pour désinscrire les fabriques de ServeurTempsQuiPasse.exe, il faut exécuter ce programme en lui passant en paramètre -UnregServer ou /UnregServer, au choix. Ça peut être pratique de savoir ça si on veut faire du ménage de temps à autres

La DLL de marshalling CompterTempsProxyStub.dll

Pour enregistrer la DLL de marshalling nommée CompterTempsProxyStub.dll, on procède comme pour l'enregistrement de n'importe quelle DLL respectant la norme COM--en utilisant regsvr32.exe.

Il en va de même pour ce qui est de procéder à sa désinscription.

Procédure d'installation, postes clients

La «procédure d'installation» de ces outils pour un poste client ira comme suit.

Répertoire d'entreposage

Tout d'abord, il est de mise de créer un dossier approprié (votre choix) et y déposer le contenu de l'archive Commun.zip, le contenu de l'archive Bibliotheques.zip, le contenu de l'archive ClientConfigTemps.zip, le contenu de l'archive ClientTempsQuiPasse.zip et la DLL de marshalling CompterTempsProxyStub.dll.

Au fond, ils peuvent être n'importe où, mais c'est plus simple de les installer et de les désinstaller si vous pouvez les retrouver facilement.

Avoir les projets Commun, Bibliothèques, ClientConfigTemps et ClientTempsQuiPasse comme sous-répertoires d'un même répertoire va aussi simplifier votre travail.

Générer les bibliothèques

Dans le répertoire Bibliothèques, il devrait y avoir quatre (4) sous-répertoires, nommés include, lib, projets et src.

Si vous voulez que tout se passe bien lorsque compilerez les projets clients, il serait sage:

  • de générer chacun des deux projets dans le sous-répertoire projets;
  • d'ajouter (par le menu Outils==> Options==> Projets==> Répertoires de VC++ de Visual Studio .NET 2003) le répertoire include à la liste des répertoires sous la rubrique Fichiers include, un peu comme lorsqu'on prépare un projet pour qu'il utiliser DirectX; et enfin
  • d'ajouter (par le même menu) le répertoire lib à la liste des répertoires sous la rubrique Fichiers bibliothèques.

Ceci permettra entre autres aux projets clients d'inclure les fichiers d'en-tête de ces bibliothèques (comme Registry.h) à l'aide des symboles < et > plutôt qu'avec " et " (par exemple: #include <Registry.h>), et fera en sorte de permettre l'édition des liens avec mes petites bibliothèques utilitaires. Si vous voulez générer mes clients de démonstration sans ennui, vous apprécierez avoir réalisé ces étapes au préalable..

La DLL de marshalling CompterTempsProxyStub.dll

Pour enregistrer la DLL de marshalling nommée CompterTempsProxyStub.dll, on procède comme pour l'enregistrement de n'importe quelle DLL respectant la norme COM--en utilisant regsvr32.exe.

Il en va de même pour ce qui est de procéder à sa désinscription.

Les clients

Il ne vous restera qu'à générer chaque client et à les utiliser. Vous pourrez utiliser les sources comme bon vous semble, dans la mesure où c'est pour votre usage personnel (et non commercial).

Correction

Je corrige les programmes en appliquant des codes de correction. Vous trouverez ici la liste des codes les plus fréquents

Au sujet du MT2

Ajouté le 20 octobre 2003.

Note: l'archive MT2.zip complète (avec le projet à modifier) sera mise à votre disposition juste avant le laboratoire du 21 octobre 2003. Pour le moment, elle ne contient que les exécutables «avant» et «après».

Vous trouverez ici une archive ZIP contenant trois (3) choses:

  • un exécutable nommé MT2--Roue--Objectif.exe, qui présente que ce vous devez obtenir comme résultat;
  • un exécutable nommé MT2--Roue--Base.exe, qui présente que ce vous avez entre les mains au début;
  • une autre archive ZIP, nommée MT2--Roue--Base.zip, qui contient un projet Visual Studio .NET 2003 complet.

Ce qui est attendu de vous: dans la méthode CMainFrame::InitObjets(), une section est identifiée au début par «Début des modifications à faire» et à la fin par «Fin des modifications à faire». Dans cette section, pour l'instant, est créée une seule roue.

Votre mandat: modifier le code de cette section pour obtenir le résultat attendu (re: MT2--Roue--Objectif.exe). Ça ressemble un peu à une entrevue d'embauche.

En théorie, à part peut-être si vous désirez ajouter des constantes, des foncteurs ou autre chose de la même teneur, vous ne devriez pas avoir à modifier d'autre code que celui de cette section bien précise (en fait, de mon côté, c'est le seul endroit où j'ai enlevé du code pour passer du programme complet à celui qui vous est donné).

Vous avez 30 minutes maximum. Amusez-vous bien!

Support pour le document «cadeau» sur les IPM en Java

Ajouté le 25 novembre 2003.

Vous trouverez ici une archive ZIP contenant un tas de fichier servant de support au document sur les IPM avec Java. Ça peut vous aider à vous organiser, et ça peut vous éviter de recopier du code inutilement.

Rappel: Java n'est pas au menu officiel du cours. S'amuser avec Java est strictement volontaire; je ne mesurerai pas vos capacités avec ce langage dans le cours. Tant mieux si ça vous aide, tout simplement.

Quelques liens sur le 3D


Pour les intéressé(e)s, voici: