Skip to content

Transformations

Rendering function

from fdray import *


def render(*args):
    return Scene(
        Camera(10, 30, view_scale=3, look_at=(0, 3, 0)),
        LightSource((1, 30, 40), "white"),
        Cylinder((0, 0, 0), (2, 0, 0), 0.02, Color("red")),
        Cylinder((0, 0, 0), (0, 6, 0), 0.02, Color("green")),
        Cylinder((0, 0, 0), (0, 0, 2), 0.02, Color("blue")),
        *args,
    ).render(width=600, height=300)


cone = Cone(0, 0.4, "1.4*x", 0, Color("silver", 0.8), Finish(specular=0.5))

Translate

render(
    cone,
    cone.pigment(Color("red")).translate(0, 1, 0),
    cone.pigment(Color("green")).translate("2*y"),
    cone.pigment(Color("blue")).translate("3*y").translate(1, 0, 0),
    cone.pigment(Color("yellow")).translate(-1, 4, 1),
)

Rotate

render(
    cone,
    cone.pigment(Color("red")).rotate(0, 90, 0).translate("y"),
    cone.pigment(Color("green")).rotate(0, -90, 0).translate("2*y"),
    cone.pigment(Color("blue")).rotate(0, 0, 90).translate("3*y"),
    cone.pigment(Color("yellow")).rotate(0, 0, -90).translate("6*y"),
)

Scale

render(
    cone,
    cone.pigment(Color("red")).scale(1.2).translate("y"),
    cone.pigment(Color("green")).scale(1.2, 0.8, 1.6).translate("2*y"),
    cone.pigment(Color("blue")).scale("0.5*x").translate("3*y"),
    cone.pigment(Color("yellow")).scale("2*y").translate("4.5*y"),
)

Align

render(
    cone,
    cone.pigment(Color("red")).align([1, 0, 0]).translate("y"),
    cone.pigment(Color("green")).align([0, 1, 0]).translate("2*y"),
    cone.pigment(Color("blue")).align([0, 0, 1]).translate("4*y"),
    cone.pigment(Color("yellow")).align([1, 1, 1]).translate("5*y"),
)