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/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.

Learning OpenGL | Shaders

Studyng the Shader input/output system (vertex attributes, vertex outputs and shader uniforms) while creating a helper class for load fragment and vertex shader files from file system, then compile and link them into a Shader program. This entry also includes an intuitive reference in VAO, VBO and EBO buffers.

Learning OpenGL | Textures

Studying how to configure texture parameters (wrap/filtering) and generation of mipmaps for minifying texture operations. This post also includes a step-by-step tutorial for load a texture image data from file system into your cpp application for later usage in OpenGL texture object generation and draw operations.

Learning OpenGL | Transformations

Animating quad vertex positions passing basic transformation matrices from CPU to shader program in GPU across uniforms while studying basic usage of GLM header-only library. This post introduces the idea behind vertex spaces for more advanced scene compositions.

Learning OpenGL | Coordinate Systems

Post explaining distinct coordinate systems involved in most common 3D applications, this is, local space, world space, view space, clip space, viewport space, along with its respective transformation matrices with special emphasis in projection and model matrices.

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.

CUDA | Color to Blac&White conversion

Was written a program for convert a color image to black and white using the GPU with CUDA, this post also includes sliders from Samuel S. Cho lectures explaining the process of write parallel kernel programs using threads ids, along with a tutorial for getting started with C++ OpenCV applications.

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

Vector calculus Notes

Essential notes while reading the third edition of vector calculus by Jerrold E. Marsden & Anthony J. Tromba.

Quantum Mechanics Notes

Essential notes while reading the second edition of introduction to quantum mechanics by David J. Griffiths.

-