Final project of Computational Graphics course by Daniele Spidalieri, mat.266491
In 1546, three brothers of Chiericati family divided the family holdings between them. Two of the brothers became patrons of Palladio: Girolamo Chiericati commissioned Palladio to build the imposing Palazzo Chiericati, in Vicenza, today the Museo Civico, and Giovanni Chiericati commissioned Palladio to build the Villa Chiericati. The villa is located in Vancimuglio in the province of Vicenza. It was probably designed in the late 1540s, and was under construction by 1554. When Giovanni died 1558, the villa was still without a roof or colonnades. In 1574, the property was purchased by Ludovico Porto, who had the villa completed by 1584 by Domenico Groppino, a local architect. In the following years the villa has suffered various changes to make it like as it is today. Now Villa Chiericati is included in the World Heritage Site City of Vicenza and the Palladian Villas of the Veneto, by Unesco.
The project that I developed is based on the plans of the Italian architect Ottavio Bertotti Scamozzi in 1781, with few little changes at my leisure, where I found no references or documentation, like the internal stairs, corridors and some decorations. Villa Chiericati is characterized by Palladio’s usual tripartite division, but here the deep projecting loggia completely dominates the facade. This is Palladio’s first use of a true temple front proceding from the main body of the house, an element know in classical architecture as a pronaos. The rest of the villa is based on a rectangular plan with two floors built above a semi-basement.
For implement a 3D model of the villa I have decided to divide it into six hierarchical parts with an bottom-up approach:
All of these parts was then decomposed in sub-parts that assembled together through translation, rotations and duplications functions. I also decided to take advantage of the symmetry of the plan to create an half part and build the other half just reverting it.
The project was implemented using Javascript and Plasm framework.
The basement is composed by the villa base, the main stairs, the atrium base and the pavement of the first floor. The villa base has been created using SIMPLEX_GRID function while the pavement, using CUBOID function. For the atrium base I used SIMPLEX_GRID and BEZIER curves for atrium base arches. The main stairs have been implemented through a function that I have personally developed. At the end, the wall of the main stairs has been created using SIMPLICIAL_COMPLEX function.
The first floor is composed by external and internal walls that have been created using SIMPLEX_GRID function.
I have implemented also a simple internal stair using the alternative version of the above mentioned stairs function.
The second floor is composed by the superior pavement, internal superior walls and another stair.
The walls has been implemented by SIMPLEX_GRID and SIMPLICIAL_COMPLEX.
The atrium was one of the hardest parts of the project. It is composed by the atrium arch, the columns and the tympanum. The atrium arch is made by BEZIER curves while the tympanum is a mix of CUBOID and SIMPLICIAL_COMPLEX.
The columns were created using CYL_SURFACE for the shaft, CUBOID, CUBIC_HERMITE and ROTATIONAL_SURFACE functions for the base and BEZIER for the capital.
I have decide to divide the roof in three parts(front,side,rear). All the three parts were created using SIMPLICIAL_COMPLEX function.
The decorations that I have decided to implement have been various: the internal and external frames, the windows fixtures, the balcony, the banister, the doors and the statues. The internal and external frames include the low, mid and top external frames, the windows and doors frames, the internal room frames and the atrium frames. All of them have been developed with SIMPLEX_GRID function and with the CUBIC_HERMITE function for the windows and door fixtures.
The balcony, the banister and the doors were implemented by SIMPLEX_GRID and CUBOID functions.
The statues have been made by creating a very simplified model, using BEZIER, CUBIC_HERMITE and ROTATIONAL_SURFACE with CUBOID for the base.
To add more functionality, I have decided to implement some new functions that allow to interact with the project in runtime, simply by invoking them from the console:
drawHalfHouse(): shows the half section of the villa.
var drawHalfHouse = function(){
if (halfHouseIsDraw){
CANCEL(leftHouse);
DRAW(leftHouse);
fullHouseIsDraw = false;
}
else {
CANCEL(fullHouse);
fullHouseIsDraw = false;
DRAW(leftHouse);
halfHouseIsDraw = true;
modelTemp = leftHouse.clone();
}
};
drawFullHouse(): shows the full model of the villa.
var drawFullHouse = function(){
if (halfHouseIsDraw){
CANCEL(leftHouse);
halfHouseIsDraw = false;
DRAW(fullHouse);
fullHouseIsDraw = true;
modelTemp = fullHouse.clone();
}
else{
CANCEL(fullHouse);
DRAW(fullHouse);
fullHouseIsDraw = true;
}
};
viewInternal(): allows to view the internal of the villa by making the external walls transparent.
var viewInternal = function(){
main_color[3]=0.5;
if (halfHouseIsDraw){
leftHouse.structs[1].color(main_color);
leftHouse.structs[8].structs[1].color(main_color);
leftHouse.structs[8].structs[2].color(main_color);
}
if(fullHouseIsDraw){
fullHouse.structs[0].structs[1].color(main_color);
fullHouse.structs[0].structs[8].structs[1].color(main_color);
fullHouse.structs[0].structs[8].structs[2].color(main_color);
fullHouse.structs[2].structs[0].structs[1].color(main_color);
fullHouse.structs[2].structs[0].structs[8].structs[1].color(main_color);
fullHouse.structs[2].structs[0].structs[8].structs[2].color(main_color);
}
};
viewExternal(): removes the transparency of the external walls.
var viewExternal = function(){
if (halfHouseIsDraw){
CANCEL(leftHouse);
leftHouse = modelTemp.clone();
DRAW(leftHouse);
}
if(fullHouseIsDraw){
CANCEL(fullHouse);
fullHouse = modelTemp.clone();
DRAW(fullHouse);
}
};
removeExtWalls(): removes totally the external walls.
var removeExtWalls = function(){
if (halfHouseIsDraw){
leftHouse.structs[1].hide();
leftHouse.structs[8].structs[1].hide();
leftHouse.structs[8].structs[2].hide();
}
if(fullHouseIsDraw){
fullHouse.structs[0].structs[1].hide();
fullHouse.structs[0].structs[8].structs[1].hide();
fullHouse.structs[0].structs[8].structs[2].hide();
fullHouse.structs[2].structs[0].structs[1].hide();
fullHouse.structs[2].structs[0].structs[8].structs[1].hide();
fullHouse.structs[2].structs[0].structs[8].structs[2].hide();
}
};
addExtWalls(): restores the external walls.
var addExtWalls = function(){
if (halfHouseIsDraw){
leftHouse.structs[1].show();
leftHouse.structs[8].structs[1].show();
leftHouse.structs[8].structs[2].show();
}
if(fullHouseIsDraw){
fullHouse.structs[0].structs[1].show();
fullHouse.structs[0].structs[8].structs[1].show();
fullHouse.structs[0].structs[8].structs[2].show();
fullHouse.structs[2].structs[0].structs[1].show();
fullHouse.structs[2].structs[0].structs[8].structs[1].show();
fullHouse.structs[2].structs[0].structs[8].structs[2].show();
}
};
highlightsDec(): highlights all the decorations.
var highlightsDec = function(){
var highlights_color=[253/255,192/255,8/255,1];
if (halfHouseIsDraw){
leftHouse.structs[8].color(highlights_color);
}
if(fullHouseIsDraw){
fullHouse.structs[0].structs[8].color(highlights_color);
fullHouse.structs[2].structs[0].structs[8].color(highlights_color);
}
};
noHighlightsDec(): removes the highlights of the decorations.
var noHighlightsDec = function(){
viewExternal();
};