JeuWeb - Crée ton jeu par navigateur
Modèle en 3D sketchup => 2D iso - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Art, graphisme, audio (https://jeuweb.org/forumdisplay.php?fid=50)
+--- Sujet : Modèle en 3D sketchup => 2D iso (/showthread.php?tid=3362)



Modèle en 3D sketchup => 2D iso - keke - 17-12-2013

Coucou,

Pour ceux qui (comme moi) n'ont pas de talent particulier dans le graphisme, voici une solution simple qui vous permettra de transformer un modèle sketchup (donc en 3D) en image orienté 2D ISO, selon les conventionnelles 8 orientations.
J'ai développé ce bout de code en m'inspirant largement du site :

http://sketchucation.com/forums/viewtopic.php?f=323&t=29018&sid=672fe298605d2c9185df8edc69393245&p=503981#p503981

Pour ceux qui n'ont pas l'habitude de sketchup, il faut pour copier mon plug in, se placer dans leur répertoire plugin :
C:\Program Files (x86)\Google\Google SketchUp 8\Plugins
et copier le code ci-dessous dans un fichier texte sous le nom de :
magdales_isometric_view.rb

ensuite, vous trouvez un modèle 3D (sur le net ou de votre création).
Vous le sélectionnez
vous allez dans le menu Windows > ruby console
et là vous tappez :
middle (ça centre votre modèle 3D au milieu des axes
aff (ca vous affiche toutes les 8 directions de manière à calculer la plus grande vue)
puis vous tapez i1, i2, i3 etc ... i8 pour avoir les directions. Il vous suffit alors de copier coller les images et de redimensionnez celle-ci à votre convenance.

Bon, très clairement, y'a moyen de faire mieux (genre mettre des boutons pour afficher l'orientation, eviter les affreux PAUSE entre chaque image, extraire les images directement dans un fichier au lieu de faire "imprimer écran" ...) mais c'est un début, et honnètement, ça me fait gagner du temps pour Magdales... alors autant vous en faire profiter.

@ pluche !

Kéké
Exemple :
[Image: Capture_gem.PNG]
[Image: Capture_bonhomme_de_neige.PNG]
[Image: Capture_loup.PNG]
[Image: Capture_chevalier.PNG]


Code :
=begin

The idea of this script is to get 8 view of a single objet, so as to snapshoot the image for a vidéo game in 2D isométric view.

In order to get my code functionnal :
1°/ first import one single modèle and select it.
2°/ then open ruby console. (menu > windows > ruby console)
3°/ write "middle" (to center the objet to the axis origin)
4°/ then write "aff" to get all view done with correct distance & angle
5-6-7..°/ then write i1, or i2, or i3 ... or i8 and snapshot the image, to get all 8 classical isometric direction for video game.

This was quickly done for Magdales.com game ... hope you'll enjoy. Please tell kéké at magdales@free.fr if you improve this script ^^.

=end
###
require 'sketchup.rb'
$distance_iso = 0
$calcul_ok = 0
###
def reset()
    $distance_iso=0
    $calcul_ok = 0
end
###
def distance()

  Sketchup.send_action("viewZoomExtents:")
  model=Sketchup.active_model
  model.shadow_info["ShadowTime_time_t"]=model.shadow_info["ShadowTime_time_t"]+(60*60*24)
  model.active_view.refresh
  UI.refresh_inspectors()

  UI.messagebox("pause !")

  eye=model.active_view.camera.eye
  ss=model.selection[0]
  distance=eye.distance(ss.bounds.center)
  puts "la distance au centre du modèle est de : #{distance}"
  puts "#{distance} vs #$distance_iso Xeye = #{eye.x} Yeye = #{eye.y} Zeye = #{eye.z}"
end  
###
def middle()
  model=Sketchup.active_model
  ss=model.selection[0]
  point= Geom::Point3d.new((-ss.bounds.center.x),(-ss.bounds.center.y),(-ss.bounds.center.z))
  t = Geom::Transformation.new point
  selected = Sketchup.active_model.selection.to_a
  Sketchup.active_model.entities.transform_entities(t, selected)
  
end
###
def aff()
  model=Sketchup.active_model
  middle()
#  Sketchup.send_action(10624)
  i1()
  distance()

  eye=model.active_view.camera.eye
  ss=model.selection[0]
  distance=eye.distance(ss.bounds.center)
#  puts "#{distance} vs #$distance_iso Xeye = #{eye.x} Yeye = #{eye.y} Zeye = #{eye.z}"
  if distance > $distance_iso
      $distance_iso = distance
  end

  i2()
  distance()

  eye=model.active_view.camera.eye
  ss=model.selection[0]
  distance=eye.distance(ss.bounds.center)
#  puts "#{distance} vs #$distance_iso"
  if distance > $distance_iso
      $distance_iso = distance
  end

  i3()
  distance()

  eye=model.active_view.camera.eye
  ss=model.selection[0]
  distance=eye.distance(ss.bounds.center)
#  puts "#{distance} vs #$distance_iso"
  if distance > $distance_iso
      $distance_iso = distance
  end

  i4()
  distance()

  eye=model.active_view.camera.eye
  ss=model.selection[0]
  distance=eye.distance(ss.bounds.center)
#  puts "#{distance} vs #$distance_iso"
  if distance > $distance_iso
      $distance_iso = distance
  end

  i5()
  distance()

  eye=model.active_view.camera.eye
  ss=model.selection[0]
  model.commit_operation
  distance=eye.distance(ss.bounds.center)
#  puts "#{distance} vs #$distance_iso"
  if distance > $distance_iso
      $distance_iso = distance
  end

  i6()
  distance()

  eye=model.active_view.camera.eye
  ss=model.selection[0]
  distance=eye.distance(ss.bounds.center)
#  puts "#{distance} vs #$distance_iso"
  if distance > $distance_iso
      $distance_iso = distance
  end

  i7()
  distance()

  eye=model.active_view.camera.eye
  ss=model.selection[0]
  distance=eye.distance(ss.bounds.center)
#  puts "#{distance} vs #$distance_iso"
  if distance > $distance_iso
      $distance_iso = distance
  end

  i8()
  distance()

  eye=model.active_view.camera.eye
  ss=model.selection[0]
  model.commit_operation
  distance=eye.distance(ss.bounds.center)
#  puts "#{distance} vs #$distance_iso"
  if distance > $distance_iso
      $distance_iso = distance
  end

  $calcul_ok = 1    
end
#
def i1()
  model=Sketchup.active_model
  model.start_operation("i1")
  view=model.active_view
  camera=view.camera
  if $calcul_ok == 0
    eye=Geom::Point3d.new(70.7,70.7,70.7)
  else
    eye=Geom::Point3d.new(Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3))
  end      

  
  target=Geom::Point3d.new(0,0,0)
  up=Geom::Vector3d.new(0.398992, 0.398701, 0.825738)
  perspective=false
  newcamera=Sketchup::Camera.new(eye,target,up,perspective)
  view.camera=newcamera
  if $calcul_ok == 0
      Sketchup.send_action("viewZoomExtents:")
  end      
  puts "iso south-west"
  model.commit_operation
end
###
def i2()
  model=Sketchup.active_model
  model.start_operation("i2")
  view=model.active_view
  camera=view.camera
  if $calcul_ok == 0
    eye=Geom::Point3d.new(0,100,70.7)
  else
    eye=Geom::Point3d.new(0,Math.sqrt($distance_iso*$distance_iso*2/3),Math.sqrt($distance_iso*$distance_iso/3))
  end    
  target=Geom::Point3d.new(0,0,0)
  up=Geom::Vector3d.new(0, 0.5640, 0.825738)
  perspective=false
  newcamera=Sketchup::Camera.new(eye,target,up,perspective)
  view.camera=newcamera
  if $calcul_ok == 0
      Sketchup.send_action("viewZoomExtents:")
  end    
  puts "iso west"
  model.commit_operation
end
###
def i3()
  model=Sketchup.active_model
  model.start_operation("i3")
  view=model.active_view
  camera=view.camera
  if $calcul_ok == 0
    eye=Geom::Point3d.new(-70.7,70.7,70.7)
  else
    eye=Geom::Point3d.new(-Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3))
  end  
  target=Geom::Point3d.new(0,0,0)
  up=Geom::Vector3d.new(-0.398992, 0.398701, 0.825738)
  perspective=false
  newcamera=Sketchup::Camera.new(eye,target,up,perspective)
  view.camera=newcamera
  if $calcul_ok == 0
      Sketchup.send_action("viewZoomExtents:")
  end    
  puts "iso north-west"
  model.commit_operation
end
###
def i4()
  model=Sketchup.active_model
  model.start_operation("i4")
  view=model.active_view
  camera=view.camera
  if $calcul_ok == 0
    eye=Geom::Point3d.new(-100,0,70.7)
  else
    eye=Geom::Point3d.new(-Math.sqrt($distance_iso*$distance_iso*2/3),0,Math.sqrt($distance_iso*$distance_iso/3))
  end  
  
  target=Geom::Point3d.new(0,0,0)
  up=Geom::Vector3d.new(0.5640, 0, 0.825738)
  perspective=false
  newcamera=Sketchup::Camera.new(eye,target,up,perspective)
  view.camera=newcamera
  if $calcul_ok == 0
      Sketchup.send_action("viewZoomExtents:")
  end    
  puts "iso north"
  model.commit_operation
end
###    
def i5()
  model=Sketchup.active_model
  model.start_operation("i5")
  view=model.active_view
  camera=view.camera
  if $calcul_ok == 0
    eye=Geom::Point3d.new(-70.7,-70.7,70.7)
  else
    eye=Geom::Point3d.new(-Math.sqrt($distance_iso*$distance_iso/3),-Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3))
  end    
  target=Geom::Point3d.new(0,0,0)
  up=Geom::Vector3d.new(0.398992, 0.398701, 0.825738)
  perspective=false
  newcamera=Sketchup::Camera.new(eye,target,up,perspective)
  view.camera=newcamera
  if $calcul_ok == 0
      Sketchup.send_action("viewZoomExtents:")
  end    
  puts "iso north-east"
  model.commit_operation
end
###
def i6()
  model=Sketchup.active_model
  model.start_operation("i6")
  view=model.active_view
  camera=view.camera
  if $calcul_ok == 0
    eye=Geom::Point3d.new(0,-100,70.7)
  else
    eye=Geom::Point3d.new(0,-Math.sqrt($distance_iso*$distance_iso*2/3),Math.sqrt($distance_iso*$distance_iso/3))
  end  
  target=Geom::Point3d.new(0,0,0)
  up=Geom::Vector3d.new(0, -0.5640, 0.825738)
  perspective=false
  newcamera=Sketchup::Camera.new(eye,target,up,perspective)
  view.camera=newcamera
  if $calcul_ok == 0
      Sketchup.send_action("viewZoomExtents:")
  end    
  puts "iso east"
  model.commit_operation
end
###
def i7()
  model=Sketchup.active_model
  model.start_operation("i7")
  view=model.active_view
  camera=view.camera
  if $calcul_ok == 0
    eye=Geom::Point3d.new(70.7,-70.7,70.7)
  else
    eye=Geom::Point3d.new(Math.sqrt($distance_iso*$distance_iso/3),-Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3))
  end    
  target=Geom::Point3d.new(0,0,0)
  up=Geom::Vector3d.new(0.398992, -0.398701, 0.825738)
  perspective=false
  newcamera=Sketchup::Camera.new(eye,target,up,perspective)
  view.camera=newcamera
  if $calcul_ok == 0
      Sketchup.send_action("viewZoomExtents:")
  end    
  puts "iso south-east"
  model.commit_operation
end
###
def i8()
  model=Sketchup.active_model
  model.start_operation("i8")
  view=model.active_view
  camera=view.camera
  if $calcul_ok == 0
    eye=Geom::Point3d.new(100,0,70.7)
  else
    eye=Geom::Point3d.new(Math.sqrt($distance_iso*$distance_iso*2/3),0,Math.sqrt($distance_iso*$distance_iso/3))
  end
  target=Geom::Point3d.new(0,0,0)
  up=Geom::Vector3d.new(0.5640, 0, 0.825738)
  perspective=false
  newcamera=Sketchup::Camera.new(eye,target,up,perspective)
  view.camera=newcamera
  if $calcul_ok == 0
      Sketchup.send_action("viewZoomExtents:")
  end    
  puts "iso south"
  model.commit_operation
end
###



RE: Modèle en 3D sketchup => 2D iso - niahoo - 17-12-2013

C'est bon ça Smile


RE: Modèle en 3D sketchup => 2D iso - @lucard - 18-12-2013

Y'a un autre pluggin qui permet de faire des captures à 360°
en choississant 5,15,20,45 ° ça permet de faire 72,24,18 et 8 images.

vous pouvez changer les propriétés du pluggin en modifiant le fichier .html
vous retrouverez les images dans le dossier que vous spécifierez.

http://www.sketchup.com/content/sketchup-web-exporter-beta

sketchup6webexporterwen.exe (official link)
____________________________________________
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Pour éviter les "transitions" entre 2 "scènes" il faut modifier les paramètres, et décocher "activer les transitions entre les scènes"

[Image: 884841snap.png]


RE: Modèle en 3D sketchup => 2D iso - keke - 19-12-2013

coucou @Lucard !

C'est super efficace ton système ! (bien meilleur que mon bidule mal codé ^^)
Je viens d'essayer, et c'est adopté.

J'ai bien fait d'en parler ici !

kéké


RE: Modèle en 3D sketchup => 2D iso - @lucard - 19-12-2013

Y'a pas de quoi, j'avais eu du mal à trouver ce pluggin, et après le nouveau design du site de Sketch'up, c'était encore pire !

Je ne suis pas programmeur, mais pour ce qui est de l'utilisation de Sketchup "pur" y'a pas de soucis, si vous avez besoin de coup de main j'suis pas loin. =)

A+