Water surface simulation summing simple sine functions in ThreeJS using vertex shaders

Finished at April 1, 2017

A height map is calculated dynamically summing simple sine functions

This is a simple surface ocean water simulation based on a sum of sine functions approach for calculate a height map that fits as a normal extrusion coefficient in a plane mesh and that dynamically calculates water surface orientation from GPU in a vertex shader. Visualization characteristics are provided by Jeremy Bouny water projects made in ThreeJS @jbouny/ocean . This Project could be considered a basic implementation of GPU gems chapter 1, named Effective Water Simulation from Physical Models By Mark Finch and Cyan Worlds.

2D SPH Water simulation in ThreeJS from CPU

Finished at May 25, 2017

Every water particle is represented as a green box of width and heigh h

This is a basic water body simulation based on the Smoothed Particle Hydrodynamic (SPH) method with leapfrog integrator for simulate water fluids in 2D from CPU using JavaScript and ThreeJS. The code was originally written in C by the Computer Science professor David Bindel at Cornell University as a parallel computing class exercise although this is a serial implementation (no parallel computing is involved).
The port from C to JavaScript was made in collaboration with @jorovipe97.

Reports and tutorials

Computer Science studies 01

Project 01 | Building basic chips

Implementing most basic logic gates using Nand logic gates.

Project 02 | Building ALU

A basic ALU has been implemented using logic gates.

Project 03 | Building Memory

A system for memory storage has been implemented using logic gates.

Project 04, 05 | Assembly and Computer architecture

An essential introduction to assembly language for hack machines and first implementation of basic Harvard architecture computer.

Project 06 | RAssembler implemented

An Assembler for hack machines has been implemented using c++ and regular expressions for code validations.

Graphic programming studies

Learning OpenGL | What is OpenGL?

Some notes and references for understand at an introductory level what is OpenGL, what are its distinct versions and most typical source code structures of OpenGL applications.

Learning OpenGL | Creating window and its context

Tutorial explaining how to set up the development environment in order to start coding OpengL applications in / C ++ while understanding thid party dependencies for fast getting started OpenGL programming (GLFW, GLAD).

Learning OpenGL | Drawing a triangle

Drawing triangles while learning fundamental topics in OpenGL as fragment/vertex shader compilation, shader program linking/usage, index drawing (for quads), GPU memory allocation and data transfer from CPU to GPU while understanding VBO's and VAO's buffer objects.

Parallel Computing studies

CUDA | Understanding the GPU programming model

Basic explanation of the GPU chip architecture and hello world program for CUDA C/C++, here are also notes for further reference in typical CUDA program structure.

Sensor and actuator studies

Project RGB | Protocol studies

Created a protocol for transmit info to an Arduino and change color of RGB led from a cellphone app.

Project Bluetooth | Bluetooth LE Alarm

Written tutorial for create a native android app that communicates with Bluetooth low energy capable devices, in this project we develop a basic alarm system using a Simblee system.

Project ZigBee | Piratuino and XBee

Controlling Piratuino car by I+D using ZigBee capable chips (Xbee and Xbee pro in this particular case), using Arduino for configure and program the router XBee device and python with a XBee Explorer USB along whit an XBee pro configured as coordinator for send commands wireless to a Piratuino Car.

Project Kinect | Getting started with Kinect

Written reference for Understand at conceptual level what is Kinect, study how to differentiate distinct types of, and find the way of get started programming Kinect apps while discovering as much as possible guides, references and documentation sites for Kinect developers in various platforms.

Study notes and references

Math notes

Linear algebra | Vectors in three dimensional space

Essential notes for 3D vectors in space based on section “1.1 vectors in three-dimensional space” of vector calculus third edition by Jerrold E. Marsden & Anthony J. Tromba. Exercises can be found here

Physic notes

Quantum Mechanics | Review to probability

Essential notes for probability based on section “1.3 probability” of introduction to quantum mechanics second edition by David J. Griffiths. Exercises can be found here