Thursday, May 19, 2005

01-prog

Introduction au C++

Imprimer le cours Envoyer à un ami


Le C++ est un langage parmi d'autres. Tous ne sont pas équivalents et peuvent avoir des utilisations différentes. Je te propose ici de te donner quelques informations qui te permettront de mieux orienter ton apprentissage. Tu sais c'est la partie chiante d'un cours quand le prof commence à raconter sa vie...


L'historique

Toutes les machines qui nous entourent fonctionnent grâce à des suites d'impulsions (des bits en base 2: "0" ou "1"). Les premiers programmeurs codaient directement leurs instructions en binaire. Afin de faciliter la communication entre le développeur et la machine, il fut nécessaire de développer une interface, un langage.

Dans un premier temps vinrent des langages bas niveau: les assembleurs. Ces langages sont spécifiques à chaque machine et s'adressent directement aux composants constituant celle-ci. C'est en fait une traduction directe du train binaire en instructions simples. (ex: charger en mémoire une valeur, lire une valeur, faire une addition,...)

Ensuite, dans un souci de simplicité, les langages devinrent de plus en plus complexes, proches de l'anglais écrit. Se succédèrent alors: BASIC, COBOL, FORTRAN. Notons que plus un langage est dit évolué plus il devient spécifique et facile d'utilisation (nous parlons ici uniquement de la syntaxe).

En 1972, Dennis Ritchie créa le C ancêtre du C++. Ce langage peut être qualifié à la fois de bas niveau car il permet de faire appel à toutes les ressources de la machine mais aussi de langage évolué. En effet, il introduit une syntaxe assez complexe par rapport aux langages précités ainsi que de nombreuses fonctions évoluées. Ces fonctions sont regroupées en librairies que tu peux considérer comme des boîtes à outils.

La mise à jour la plus marquante du C fut apportée par Bjarde Stroustup en 1982. Il y intégra la programmation objet. Le C++ est en fait une surcouche du C (C++ signifie une incrémentation du C). Il hérite donc de tous les outils du C.


Principe de la programmation objet

Trois générations de langage se sont succédés et coexistent encore aujourd'hui: les langages dits linéaires, modulaires puis objets.

Tous les premiers langages s'exécutaient de façon linéaire. Chaque ligne du programme était lue puis exécutée jusqu'à la dernière. Il était possible de faire des sauts ou des boucles mais le principe restait le même. Cette approche simpliste ne pouvait pas s'appliquer à des programmes complexes. De plus, les développeurs ne pouvaient pas réutiliser des outils déjà écrits. Le langage assembleur est un exemple de langage linéaire.

Afin, de réutiliser le code et d'éviter les redondances, les langages dits modulaires virent le jour. Le principe est de regrouper un ensemble d'instructions dans des fonctions ou procédures. En effet, chaque tâche exécutée par un programme représente un nombre variable d'instructions. Ces instructions sont réunies afin de pouvoir segmenter le code et de favoriser la réutilisation de celui-ci. Le C fait partie de ces langages.

Enfin, la méthode objet apparue. Elle est en fait une évolution de l'approche modulaire. Elle lui apporte principalement trois aspects primordiaux:

* L'encapsulation: cette technique permet de réunir des variables et des fonctions au sein d'une même entité nommée classe. Les variables sont appelées les données membres, les fonctions sont appelées les méthodes. L'accès aux données et méthodes peut-être aussi réglementé.

* L'héritage: cette technique permet de définir une hiérarchie de classe. Chaque classe fille hérite des méthodes et des données de ces "pères". En pratique, la classe de base est une classe générique, ainsi plus on descend dans la hiérarchie, plus on spécialise cette classe.

* Le polymorphisme (non ce n'est pas un gros mot!): nous verrons que les objets sont définis par leur classe (sorte de moule). Pour expliquer le polymorphisme, retenons que deux objets, héritant une même méthode d'une classe parente, peuvent réagir de façon différente à l'appel de cette méthode.
Par analogie, nous pouvons considérer l'exemple débile de l'ascenseur et de la bombe nucléaire... ben oui... Ces deux objets descendent de l'objet machine et donc héritent de la fameuse fonction "bouton rouge" que chaque machine possède. Maintenant, je te mets au défi d'appuyer sur le bouton rouge d'un ascenseur: c'est beaucoup plus violent que pour la bombe nucléaire. En effet, dans le cas de la bombe H, elle pète loin de toi sur un atol de Polynésie, alors que les coups de balais de ton gardien qui te coure dans la cage d'escalier, ça tu les sens!
L'appel de la même fonction a donc entraîné un comportement différent.

Au cas où tu n'aies pas suivi les dernières notions, ne t'inquiète pas. Premièrement, rappelle toi que tu es un (gros) nul et fier de l'être : NULL POWER, deuxièmement ces notions sont vues en détail dans la partie 2 du cours.


Quel type d'utilisation?

Saches tout d'abord que le C++ est le langage le plus utilisé par la communauté des développeurs. Ce langage est utilisé aussi bien sur UNIX que MacOS ou Windows. Entre autres, la plupart des applications graphiques comportent une partie en C++, ce qui inclut les traitements de textes, utilitaires, jeux,...
Toutefois, il ne faut pas croire que tout est possible avec le C++ ou au contraire que c'est un langage dépassé face au Java ou C#. Tu verras, si l'informatique devient ton métier, que l'on ne peut pas se limiter à un seul langage. Le choix du langage est souvent imposé par différents facteurs: portabilité, rapidité, disponibilité de composants déjà écrits, outils de développement,...

En fait, nous ne rentrerons pas dans un débat stérile afin de savoir quel langage est le plus avancé technologiquement. Le C++ est ici un choix d'apprentissage. En effet, à cause de sa conception le C++ hérite des langages modulaires et objets. Il n'est ni totalement objet ni restreint à un langage modulaire de type C. Ce conflit de génération qui rend le C++ un peu "bâtard" est un avantage pour les débutants. En fait, lorsque tu auras fini cet apprentissage tu auras la possibilité et la compétence de t'orienter tout seul vers le langage de ton choix.

Je te rappelle aussi que ce site à pour vocation de t'apprendre les bases de la programmation. Il n'a pour l'instant pas l'ambition de se spécialiser dans un sous-ensemble du C++. Il ne sera donc pas fait question d'environnement graphique ou de développement spécialisé dans une technologie donnée (Microsoft DirectX, Open GL, Linux, réseau,...)


Différence C/C++

Le C++ introduit un certain nombre d'améliorations syntaxiques, d'extensions et de nouveautés par rapport au C, dont les principales sont essentiellement liées à la programmation orientée objet. On peut décomposer le langage en C++=C+E+S+P avec:

* C désigne la norme AINSI C

* E représente les écarts à la norme

* S représente les spécificités de C++ non liées à la théorie objet

* P représente les possibililités de la programmation objet (la programmation objet n'est pas imposée)

Pour le néophyte, ces différences ne poseront aucun problème. Pour la personne qui sait déjà programmer en C, les quelques incompatibilités ou différences seront exposées tout le long du cours.


Conclusion

Une fois les connaissances de ce site acquises, il te sera facile de trouver des ouvrages permettant d'aller plus loin dans l'apprentissage du C++. Tu passeras alors du stade "gros nul" au stade "nul mais se soigne".

01-graph

.:Etape
01:.
Ouvrir votre fichier images, peu importe sa résolution.
Votre image doit déjà être préparée, j'entends par là que les petites
imperfections de peau (comme les boutons) auront déjà étaient enlevés
au tampon avec une faible opacité.


.:Etape
02:.
Dupliquer le calque image.



.:Etape
03:.
Appliquer un flou gaussien de 10 sur le calque supérieur.
Puis ajout sur le calque supérieur de bruit répartition Uniforme
variant entre 3 et 6 suivant la résolution de votre fichier et votre
goût.


.:Etape
04:.
Créer un masque de fusion sur le calque supérieur toujours,
décocher l'oeil du calque inférieur de façon à ne plus le voir et
sélectionner l'aérographe.



.:Etape
05:.
A l'aide de l'aérographe, supprimer dans le masque de fusion
toute les parties de l'image qui ne sont pas de la peau " les cheveux,
les yeux, la bouche, les sourcils etc."


.:Etape
06:.
Maintenant recocher l'oeil du calque inférieur, votre lissage
de peau est là, mais bien trop violent pour l'instant. A l'aide
de l'aérographe et du masque de fusion, vous allez pouvoir peaufiner
votre suppression des cheveux, bouche... en jouant sur les couleurs
noir ou blanc du premier plan, ce qui vous permet d'effacer ou de
récupérer certaines zones de l'image supérieure.



.:Etape
07:.
L'opération 7 finie, vous n'avez plus qu'à jouer sur l'opacité
du calque supérieur pour le mettre en transparence sur votre calque
d'origine, jouer sur des opacités de 30% à 50% suivant le degré
de lissage et votre goût, aplatir l'image et le tour est joué. Une
vrai peau de Bébé.

1-design

Principe : on construit un réseau de splines qui délimite soit des surfaces à quatre cotés, soit des surfaces à trois cotés.



Le Modifier Surface transforme ce réseau de splines en patches soit quads, soit tris suivant la forme des mailles.


Chaque noeud du réseau de splines controlant au final un grand nombre de faces, il est facile de créer des surfaces complexes lisses ou anguleuses se raccordant parfaitement entre elles.



Par rapport à une modélisation NURBS, on peut complexifier localement une surface sans que cela ne se repercute sur l'ensemble de l'objet.
De plus la topologie du réseau est libre et n'est pas obligatoirement à base de grille comme les Nurbs.

De plus on peut avoir recourt à des tangentes sur les points de contrôles des splines, ce qui permet un meilleur contrôle de la modélisation.


Le principal inconvénient est que la surface créée ne comporte pas de coordonnées de mapping comme c'est le cas avec les NURBS.

Les autres inconvénients sont qu'il est fastidieux de subdiviser les splines puis de snaper les noeuds entre eux et que des problèmes de continuités de surfaces apparaissent quand on emploit des mailles triangulaires.

Friday, December 31, 2004

bijour

Ouverture du blog sur les tutoriaux de l'équipe Mespheria.
Les tutos et les grandes infos seront donnés ici.
Voici des tutos introductifs à la matière que nous allons voir!