OpenGL["noël"]

OpenGL["noël"]

  • Intro et SDK
  • Bronze
  • Silver
  • Gold
  • Blog
  • OpenGL Documentation
  • OpenGL Wiki
  • GitHub
  • My glTF Viewer Tutorial

›Put the lights on !

3D - La théorie

  • Introduction
  • La Normal Matrix
  • Un exemple de Vertex Shader pour la 3D
  • La bibliothèque glm

3D - La pratique

  • Introduction
  • Les classes Sphere et Cone
  • Dessiner une sphere
  • Dessiner une lune
  • Dessiner la terre
  • Multi-texturing
  • Utiliser plusieurs shaders

Gestion de la caméra

  • Introduction
  • Trackball Camera
  • Freefly Camera

Put the lights on !

  • Introduction
  • Directional Light
  • Point Light
  • Aller plus loin

Projet(s)

  • Projet: IM(A)ineCraft

Introduction

Ce dernier TP sera l'occasion d'implanter un modèle d'éclairage simple permettant de gérer des lumières de type ponctuelle ou directionelle, sans ombres.

Le modèle que nous allons mettre en place est le modèle de Blinn-Phong. C'est le fragment shader qui se chargera de faire le calcul d'éclairage.

Blinn Phong

Le modèle de Blinn-Phong est définit par l'équation suivante:

$$ Couleur=Li(Kd(wi \cdot{} N)+Ks(halfVector \cdot{} N)^{shininess}) $$

où:

  • \(wi\) est la direction incidente depuis laquelle provient la lumière. On la calcule par rapport à la position de cette dernière.
  • \(Li\) est la lumière (une couleur) incidente dans la direction wi. On la calcule par rapport à l'intensité et la distance à la lumière.
  • \(N\) est la normale.
  • \(Kd\) est le coefficient de reflection diffuse de l'objet. C'est une couleur qui dépend du materiau de l'objet.
  • \(Ks\) est le coefficient de reflection glossy de l'objet. C'est une couleur qui dépend du materiau de l'objet.
  • \(shininess\) est un exposant de brillance permettant de controller la taille de la "tache" de brillance glossy. C'est un float qui dépend du materiau de l'objet.
  • \(halfVector\) est le vecteur \(\frac{wo+wi}{2}\), wo étant le vecteur pointant vers la caméra.

Dans la formule, tous les produits ˙ entre vecteurs sont des produits scalaire. Les vecteurs doivent tous être normalisés.

La notion de matériau est très importante en synthèse d'image. Nous allons utiliser des variables uniformes pour passer les coefficients \(Kd\), \(Ks\) et \(shininess\) au shader avant de dessiner. Cela aura pour effet de dessiner des objets dont le matériau est le même en chaque point. Dans une application plus complexe on utiliserait le multi-texturing pour binder une texture diffuse, une texture glossy et une texture de brillance. De cette manière on peut avoir des coefficients différents pour chaque point d'un objet.

← Freefly CameraDirectional Light →
OpenGL["noël"]
About Me
Personal websiteGithub
About This Website
BlogopenglnoelPowered by Docusaurus
About OpenGL
Documentation (docs.gl)Wiki
Copyright © 2021 Laurent NOEL