Bonjour,

Vous vous souvenez peut-être d' un de mes premiers articles concernant le developpement d' un Ray-Tracer? Et bien, voila que le travaille de notre groupe (colon_a, crouzi_b, horner_v, van-ko_g, cochoy_j) progresse. La transparence avec changement de milieu est terminer, et nous commençons a avoir une jolie collection d' objet hétéroclite. Plus que des mots, quelques images :

Ray-tracing

Ray-tracing

Ray-Tracing

Ray-Tracing

 

Bonsoir,

Alors oui ca ne sert pas a grand chose, mais on peut asser facilement afficher des particules de manière fluide et portable.

Pour divers raison les sources de la lib ne sont pas disponible, mais vous pouvez librement l' utiliser pour vous faire plaisir ou développer un quelconque projet. Je n' offre toute fois aucune garanties.

Plus que des mots, un exemple basique d' utilisation : http://zenol.fr/trac/dev/browser/termcap_lib

Particles with termcap_lib

Particles with termcap_lib

Les sources sont maintenant disponible a http://zenol.fr/trac/dev/browser/termcap_lib/lib/src

 

Bonjour,

Depuis hier, KoS dispose enfin d' une gestion precaire des interuptions. Dans cette article je vais donc... parler des interuptions! Et histoire de ne perdre personne, je decrirais d' abord le fonctionement de la GDT.

1 : Physique ou Virtuelle

Si vous avez deja fait un peu d' assembleur, vous devriez savoir qu' un programme, une fois en memoire, est diviser en plusieures segments :

  • Segment de code
  • Segment de donne
  • Stack

Pour acceder a ces diferents segment, on dispose des Selecteurs de Segment. Ce sont des registre qui indiquent ou se situent les donnes.

Ainsi, pour acceder a l' octet numero 0x3 du segment de code, on peut ecrire cs::0x03.
Quand le processeur demare, il est en mode reele. C' est a dire que les sélecteurs de segment représentent une adresse physique.
(0x73 représente l' adresse mémoire 0x730)

Ce n' est pas vraiment super, tout le monde a accer a tout et n' importe quoi, et en plus les registres sont limiter a 16bits...

Pour regler ce problemme, il existe le mode protege, ou le processeur est en 32Bits et ou les selecteurs corespondent a un maillon de la GDT(J' y viendrais dans quelques lignes).

Dans le mode proteger, la valeur des selecteurs corespond a l' offset(Decalage par raport a l'origine) de l' element dans la GDT(Global Descriptor Table). Pour acedder au premier selecteur de la GDT, on place donc 0x0 dans un selecteur de segment. Pour le second, 0x8 (Chaque maillon est sur 64bits), et ainsi de suite.

2: Les interuptions

Une interuption, c' est (dixit wikipedia) "un arrêt temporaire de l'exécution normale d'un programme informatique par le microprocesseur".

Les interuptions sont de deux type : materiel ou logiciel.

Une interuption materiel est typiquement l' apuis sur une touche du clavier.
Une interruption logiciel peut être l' apelle a un syscall (un apelle a write sous unix)

Pour associer une fonction(le sens informatique du terme) a chaque interuption, il existe l' IDT(Interrupt Descriptor Table).

Chaque element de l' IDT contien :

  • Un selecteur, qui corespond aux elements de la GDT
  • Un offset (pointeur sur fonction)
  • Des bits qui specifi le TYPE du maillon

3 : IRQs

Et non, ce n' est pas terminer. C' est bien beau de configurer la GDT et l' IDT, mais encore faut'il configurer le chipset qui s' ocupe de prevenir le processeur quand une interuption materiel a lieu.
Pour resumer, ce composent envoi une requette (IRQ=Interuption ReQuest) au processeur quand un evenement a lieu.
En plus, il n' est pas un, mais ils sont deux, en cascade (Un esclave et un maitre).

Une fois le tout configurer, on reactive les interuptions et... On cherche pourquoi ca n' a pas fonctioner :)

 

Sur un coup de tête, je me suis motivé a faire du C#, du directX, et d’implémenter deux forces, l’une similaire au magnétisme (1/r^2) et l’autre aux forces atomiques (r^2). Un coefficient est associé à chaque objet et peut être positif (attraction) ou négatif (répulsion). Toutefois les objets dotés d’une force sont fixes et ne sont pas affectés par les autres forces. (Cela fera bientôt un an que je n’ais pas fait de physique alors je voulais quelque chose de simple).

En plus, petit avantage, la masse des objets déplaçables n’intervient pas dans les calculs (a*m_obj = Sigma(m_obj * m_magnet * u) -> simplification)

Le fonctionnement est trivial :

Pour chaque objet simple, on somme tout les vecteurs accélérations générés par les objets dotés d’une force, et on le somme a la vitesse pour en déduire le nouveau vecteur vitesse.

Quelques images :

Magnet Engine 3Magnet Engine 1Magnet Engine 2

Les sources (Oui je n'ai pas activer les Stencil, mais on ne vas pas en mourir) :

http://zenol.fr/trac/dev/ -> MagnetMotor.

 

En projet de Tek1, on doit réaliser un raytracer. Le projet demande une partie obligatoire a réaliser et propose une partie bonus. Pourtant il est possible d'aller chercher plus loin que les cours en matière de raytracing.  Afin de donner quelques ides aux personnes actuellement penchées sur le sujet, voici un petit conseil en matière de lumière :

Dans une salle, vous mettez une lampe :  On voit un peu
Vous en mettez deux :  On voit mieux

Dans votre RT, vous mettez un spot :  on y voit un peu
Vous en mettez un deuxième : on voit ailleurs, mais la luminosité de la scène diminue.

Cela est du au fait que vous divisez la luminosité par le nombre de spot. On ne peux effectivement pas se passer d' un système qui permette de limiter l'exposition a la lumière, sinon la jonction es deux spot serais sur eclaire. La solution, c'est de ne pas utiliser une fonction de la forme y = x(avec x la somme des sources de lumière, de 0 a +infini et y la luminosité résultat, qui doit être comprise entre 0 et 1) mais de la forme y = 1 - exp(-kx). Ainsi, un nombre compris entre 0 et +infini se retrouve entre 0 et 1 (sachant que 1 ne sera jamais atteint, mais plus la lumière est accrue et plus on tend vers 1 (principe d'une limite)).

Pour k, choisissez une valeur entre 0 et 1 qui vous convienne (j'ai prit -0.66). Cela correspond a la "pente" de la courbe.

Avec de bons réglages, on peux cumuler réflexion, source de lumière, spot, etc, et ça peut donner des effets pas trop moche.

© 2012 Zenol's Blog Suffusion theme by Sayontan Sinha