rotateAroundAxis(angle:float, axis:vector3D)
Dans les applications plus complexes, il est pratiquement impossible d’effectuer une rotation autour d’un axe de rotation spécifique en utilisant uniquement la fonction rotate3D(). Pour cette raison, la fonction rotateAroundAxis() a été implémentée.
Cette fonction fera tourner le cadre actuel le long d’un axe spécifié par l’utilisateur (vecteur 3D) par un angle donné (en rad).
Elle fonctionne également en mode LOCAL ou GLOBAL en fonction du paramètre rotationMode().
axis = vector3D(x=1,y=2,z=0.5)
rotateAroundAxis(PI/4, axis)
setWorldRotation3D(rotation:rotation3D)
Pour les applications 3D plus élaborées, il est utile de pouvoir écrire et lire la rotation actuelle du monde.
Cette fonction écrit une rotation du monde précédemment lue.
rotation:rotation3D
rotation = getWorldRotation3D()
setWorldRotation3D(rotation)
getWorldRotation3D()->rotation3D
Pour les applications 3D plus élaborées, il est utile de pouvoir écrire et lire la rotation actuelle du monde.
Cette fonction renvoie un objet/classe rotation3D (par référence).
rotation:rotation3D
rotation = getWorldRotation3D()
rotationMode(mode:byte)
Il est parfois plus facile de penser dans le cadre du monde (surtout lorsqu’il s’agit de rotations consécutives).
Tu pouves définir le cadre de référence de la rotation sur LOCAL (par défaut) ou GLOBAL.
rotationMode(LOCAL)
rotationMode(GLOBAL)
translationMode(mode:byte)
Il est parfois plus facile de penser dans le cadre du monde (surtout lorsqu’il s’agit de rotations consécutives).
Tu pouves définir le cadre de référence de la translation sur LOCAL (par défaut) ou GLOBAL.
translationMode(LOCAL)
translationMode(GLOBAL)
render()
Toutes les formes 3D sont dessinées par-dessus les éléments 2D. Cela est dû à l’appel automatique de render() dans la fonction update().
Si tu souhaites dessiner des éléments 2D par-dessus des formes 3D, tu pouves appeler render() manuellement après le dessin des formes 3D.
fill(230, 204, 57)
background(162, 9, 176)
textFont(FONT_ROBOTO_BOLD_64)
drawSphere(3)
stroke(0, 0, 0)
drawText(26, 90, "Sphere") # ce texte noir sera derrière la sphère
render()
stroke(255, 255, 255)
drawText(20, 80, "Sphere") # ce texte blanc sera devant la sphère
update()
addVertex3D(x:float, y:float, z:float)
Cette fonction ajoute un point à l’emplacement x/y/z dans une définition de polygone.
Exemple: voir beingShape3D()
endShape3D()
Cette fonction permet de fermer une définition de polygone.
Lorsque endShape3D() est appelée, le polygone est dessiné dans le tampon de l’écran.
Exemple: voir beginShape3D()
beginShape3D()
Démarre une définition de polygone. Cela consiste en un beginShape3D(), plusieurs appels à addVertex3D() et une fin avec endShape3D().
Exemple:
const l = 1.06 # 0.1 ... 2.0
fill(255,255,255)
def onDraw():
clear()
rotateY(0.02)
beginShape3D() # face 1
addVertex3D(l, l, l)
addVertex3D(-l, l, -l)
addVertex3D(-l, -l, l) # face 2
addVertex3D(l, l, l)
addVertex3D(-l, -l, l)
addVertex3D(l, -l, -l) # face 3
addVertex3D(-l, -l, l)
addVertex3D(-l, l, -l)
addVertex3D(l, -l, -l) # face 4
addVertex3D(-l, l, -l)
addVertex3D(l, l, l)
addVertex3D(l,-l, -l)
endShape3D()
update()
Cet exemple dessine un simple tétraèdre à quatre faces tournant dans l’espace.
drawShape3D(vertices:float[], triangles:int[])
Tu pouves créer et rendre des formes 3D personnalisées à l’aide de la fonction drawShape3D().
Chaque forme est constituée d’une liste de sommets (emplacements dans l’espace 3D) et d’une liste de triangles/faces entre ces sommets.
Exemple:
verts:float[30] = [
-1,-1,-1,
1,-1,-1,
1,1,-1,
-1,1,-1,
-1,-1,1,
1,-1,1,
1,1,1,
-1,1,1,
0,-1,2,
0,1,2
]
tris:int[48] = [
0,1,4,
1,5,4,
1,2,5,
2,6,5,
2,3,6,
3,7,6,
3,0,7,
0,4,7,
0,3,2,
0,2,1,
4,5,8,
6,7,9,
5,6,8,
7,4,9,
4,8,9,
6,9,8
]
fill(255,255,255)
rotateX(-PI_DIV2)
scaleZ(0.8)
def onDraw():
clear()
rotateZ(0.02)
drawOrigin()
drawShape3D(verts, tris)
update()
rotateCameraZ(z:float)
Identique à rotateCamera3D(x, y, z) mais en faisant pivoter la caméra autour de l’axe Z.
fill(255,255,255)
def onDraw():
clear()
rotateCameraZ(0.1)
drawCube(2)
update()
rotateCameraY(y:float)
Identique à rotateCamera3D(x, y, z) mais en faisant pivoter la caméra autour de l’axe Y uniquement.
fill(255,255,255)
def onDraw():
clear()
rotateCameraY(0.1)
drawCube(2)
update()
rotateCameraX(x:float)
Identique à rotateCamera3D(x, y, z) mais en faisant pivoter la caméra autour de l’axe X uniquement.
fill(255,255,255)
def onDraw():
clear()
rotateCameraX(0.1)
drawCube(2)
update()
rotateCamera3D(x:float, y:float, z:float))
Outre l’utilisation de rotate3D() pour faire pivoter l’ensemble du cadre (monde), tu pouves également utiliser cette fonction pour faire pivoter la caméra.
La fonction est additive. Chaque appel supplémentaire déplace le point zéro par rapport à la position précédente. Si on ne le souhaite pas, on peut utiliser push()/pop(), qui rétablit l’état initial.
Contrairement aux objets 2D, les fonctions translate et rotate sont la seule option pour définir la position des formes 3D.
scaleZ(z:float)
Identique à scale3D(x, y, z) mais avec une mise à l’échelle uniquement sur l’axe Z.
fill(255,255,255)
rotateY(PI/2)
def onDraw():
push()
for i in 100:
clear()
scaleZ(0.99)
drawSphere(4)
update()
pop()
scaleY(y:float)
Identique à scale3D(x, y, z) mais avec une mise à l’échelle uniquement sur l’axe Y.
fill(255,255,255)
def onDraw():
push()
for i in 100:
clear()
scaleY(0.99)
drawSphere(4)
update()
pop()
scaleX(x:float)
Identique à scale3D(x, y, z) mais avec une mise à l’échelle uniquement sur l’axe X.
fill(255,255,255)
def onDraw():
push()
for i in 100:
clear()
scaleX(0.99)
drawSphere(4)
update()
pop()
scale3D(x:float, y:float, z:float)
Met à l’échelle toutes les commandes de dessin suivantes par la valeur spécifiée. Par exemple, la taille double avec la valeur 2 ou diminue de moitié avec 0,5.
Remarque: scale3D() est multiplicatif. Cela signifie que, par exemple, scale3D(2) et scale3D(1,5) produisent ensemble le même effet qu’une seule scale3D(3).
Exemple:
fill(255,255,255)
drawSphere(1)
update()
delay(1000)
scale3D(2,2,2)
drawSphere(1)
update()
delay(1000)
scale3D(1.5,1.5,1.5)
drawSphere(1)
update()
translateCameraZ(z:float)
Identique à translateCamera3D(x, y, z) mais en déplaçant uniquement l’axe Z de la caméra.
fill(255,255,255)
translateCameraZ(-5)
def onDraw():
for i in 100:
clear()
translateCameraZ(0.1)
drawCube(2)
update()
translateCameraZ(-10)
translateCameraY(y:float)
Identique à translateCamera3D(x, y, z) mais en déplaçant uniquement l’axe Y de la caméra.
fill(255,255,255)
translateCameraY(-5)
def onDraw():
for i in 100:
clear()
translateCameraY(0.1)
drawCube(2)
update()
translateCameraY(-10)
translateCameraX(x:float)
Identique à translateCamera3D(x, y, z) mais en déplaçant uniquement l’axe X de la caméra.
fill(255,255,255)
translateCameraX(-5)
def onDraw():
for i in 100:
clear()
translateCameraX(0.1)
drawCube(2)
update()
translateCameraX(-10)
translateCamera3D(x:float, y:float, z:float)
Outre l’utilisation de translate3D() pour déplacer l’ensemble du cadre (monde), tu pouves également utiliser cette fonction pour déplacer la position de la caméra.
La fonction est additive. Chaque appel supplémentaire déplace le point zéro par rapport à la position précédente. Si on ne le souhaite pas, on peut utiliser push()/pop(), qui rétablit l’état initial.
Contrairement aux objets 2D, les fonctions translate et rotate sont la seule option pour définir la position des formes 3D.
rotateZ(z:float)
Identique à rotate3D(x, y, z) mais avec une rotation uniquement autour de l’axe Z.
fill(255,255,255)
def onDraw():
clear()
rotateZ(0.1)
drawCube(2)
update()
rotateY(y:float)
Identique à rotate3D(x, y, z) mais avec une rotation uniquement autour de l’axe Y.
fill(255,255,255)
def onDraw():
clear()
rotateY(0.1)
drawCube(2)
update()
rotateX(x:float)
Identique à rotate3D(x, y, z) mais avec une rotation uniquement autour de l’axe X.
fill(255,255,255)
def onDraw():
clear()
rotateX(0.1)
drawCube(2)
update()
rotate3D(x:float, y:float, z:float)
Utilises cette fonction pour faire tourner le cadre actuel (monde) autour du point d’origine.
La fonction est additive. Chaque appel supplémentaire déplace le point zéro par rapport à la position précédente. Si on ne le souhaite pas, on peut utiliser push()/pop(), qui rétablit l’état initial.
Contrairement aux objets 2D, les fonctions translate et rotate sont la seule option pour définir la position des formes 3D.
translateZ(z:float)
Identique à translate3D(x, y, z) mais en déplaçant uniquement l’axe Z.
fill(255,255,255)
translateZ(-5)
def onDraw():
for i in 100:
clear()
translateZ(0.1)
drawCube(2)
update()
translateZ(-10)
translateY(y:float)
Identique à translate3D(x, y, z) mais avec une translation uniquement sur l’axe Y.
fill(255,255,255)
translateY(-5)
def onDraw():
for i in 100:
clear()
translateY(0.1)
drawCube(2)
update()
translateY(-10)
translateX(x:float)
Identique à translate3D(x, y, z) mais avec une translation uniquement sur l’axe X.
fill(255,255,255)
translateX(-5)
def onDraw():
for i in 100:
clear()
translateX(0.1)
drawCube(2)
update()
translateX(-10)
translate3D(x:float, y:float, z:float)
Utilises cette fonction pour déplacer le cadre actuel (monde).
La fonction est additive. Chaque appel supplémentaire déplace le point zéro par rapport à la position précédente. Si on ne le souhaite pas, on peut utiliser push()/pop(), qui rétablit l’état initial.
Contrairement aux objets 2D, les fonctions translate et rotate sont la seule option pour définir la position des formes 3D.
drawTriangularPrism(r:float, h:float)
Dessine une forme 3D: Prisme triangulaire
fill(255,255,255)
rotate3D(-PI/4, -PI/4, 0)
drawTriangularPrism(2, 3)
update()
drawCylinder(r:float, h:float)
Dessine une forme 3D: Cylindre
fill(255,255,255)
rotate3D(-PI/4, -PI/4, 0)
drawCylinder(2, 3)
update()
drawCuboid(w:float, l:float, h:float)
Dessine une forme 3D: Cuboïde
fill(255,255,255)
rotate3D(0, PI/4, 0)
drawCuboid(3, 2, 1)
update()
drawSphere(size:float)
Dessine une forme 3D: Sphère
fill(255,255,255)
drawSphere(2)
update()
drawCube(size:float)
Dessine une forme 3D: Cube
fill(255,255,255)
rotate3D(0,PI/4,0)
drawCube(2)
update()
drawOrigin()
Cette fonction dessine un cadre de coordonnées où chaque axe a une longueur de 1 mètre/unité.
Par convention, x est rouge, y est vert et z est bleu.
Utilises par exemple translate3D() ou rotate3D() pour modifier la position de l’origine.