Blog Papervision3D

Blog Français sur Papervision3D

Shadow sur une texture image.

Posté par Ocelyn le 24 septembre, 2009
Publié dans Tutoriaux

Dans notre précédent tutoriel, nous avons vu comment texturer un objets 3D, pour afficher des effets d’ombres sur ces derniers.

Pour aller plus loin que ce dernier qui nous permettait seulement de faire une texture avec un dégradé entre deux couleurs, nous allons voir comment afficher une ombre sur une texture image.

Pour cela nous allons utiliser un BitmapMaterial (ligne 44) dont nous avions déjà parlé dans ce tutoriel, un PhongShader (ligne 45)qui va être le material qui affichera notre ombre, comme le PhongMaterial vu dans le tutoriel précédent, il reçoit notre objet lumière, la couleur de la lumière, la couleur de l’ombre, et le specularLevel.

Après avoir créé ces deux textures, il nous reste à créer un ShadedMaterial (ligne 47) dans lequel nous passerons les deux materials précédent, et que nous utiliserons comme texture pour notre Sphere.

  1. package  {
  2. import org.papervision3d.lights.PointLight3D;
  3. import org.papervision3d.materials.BitmapMaterial;
  4. import org.papervision3d.materials.shaders.PhongShader;
  5. import org.papervision3d.materials.shaders.ShadedMaterial;
  6. import org.papervision3d.objects.primitives.Sphere;
  7. import org.papervision3d.view.BasicView;
  8.  
  9. import flash.display.BitmapData;
  10. import flash.display.Loader;
  11. import flash.events.Event;
  12. import flash.net.URLRequest;
  13.  
  14. public class BasicScene extends BasicView {
  15.  
  16. public function BasicScene()
  17. {
  18. initMaterial();
  19. }
  20.  
  21. private function initMaterial() : void
  22. {
  23. myLoader = new Loader();
  24. myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
  25. myLoader.load(new URLRequest("URL IMAGE"));
  26. }
  27.  
  28. private function onLoadComplete(event : Event) : void
  29. {
  30. myLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoadComplete);
  31.  
  32. bmpData = new BitmapData(myLoader.width, myLoader.height);
  33.  
  34. bmpData.draw(myLoader);
  35.  
  36. buildPlane();
  37. }
  38.  
  39. private function buildPlane() : void
  40. {
  41. var light : PointLight3D = new PointLight3D();
  42. scene.addChild(light);
  43.  
  44. var material : BitmapMaterial = new BitmapMaterial(bmpData);
  45. var ps : PhongShader = new PhongShader(light, 0xffffff, 0×000000, 10);
  46.  
  47. var shadeMaterial : ShadedMaterial = new ShadedMaterial(material, ps);
  48. shadeMaterial.doubleSided = true;
  49.  
  50. sphere = new Sphere(shadeMaterial, 200, 12, 12);
  51. scene.addChild(sphere);
  52.  
  53. startRendering();
  54. }
  55.  
  56. override protected function onRenderTick(event:Event=null):void
  57. {
  58. sphere.rotationY += 3;
  59. super.onRenderTick(event);
  60. }
  61.  
  62. private var sphere : Sphere;
  63. private var myLoader : Loader;
  64. private var bmpData : BitmapData;
  65. }
  66. }
Share and Enjoy:
  • Facebook
  • Twitter
  • LinkedIn
  • del.icio.us
  • Technorati
  • Digg
  • Netvibes
  • Wikio FR
  • Live
  • Google Bookmarks
  • email
  • Print

3 commentaires dans ce post, pour l'instant.

Suivre ce post par RSS ou poser un trackback
mygif
394. bast_65 dit,
11 octobre, 2009 à 23:53

oups ^^ autant pour moi !!

mygif
449. Manu dit,
2 février, 2010 à 11:18

hum… sur les cube c’est pas encore ça :s

mygif
502. FX dit,
27 septembre, 2010 à 8:59

Est-il possible d’appliquer PointLight3D et PhongMaterial sur un objet DAE?

J’ai tenté en faisant des modifs en me référent aux différentes classes et pour le moment, sans succès. J’ai même ajouté une lampe à l’objet que j’importais mais ça n’a rien changé.
Si quelqu’un a une petite idée, je suis preneur :)

Laisser un commentaire

Currently browsing Shadow sur une texture image.

 Pseudo(*requis)

 Email (*privée)

 Site internet (*optionnel)