Skip to content

Instantly share code, notes, and snippets.

View Sphere.cpp
// This code is in the public domain -- Ignacio Castaño <>
#include "Sphere.h"
#include "Vector.inl"
#include "Box.inl"
#include <float.h> // FLT_MAX
using namespace nv;
castano / gist:b05863af48138dab368b23a0ab86e735
Created Mar 30, 2017
Least Squares Vertex Quantization
View gist:b05863af48138dab368b23a0ab86e735
I didn't think there was much to gain from optimizing quantization intervals for vertex compression, but I thought it would give it a try and see it for myself.
I have a set of vertices X that I want to quantize. The trivial way to do that is to transform them to the [0,1] range and store them using an integer UNORM format.
At runtime the vertices are reconstructed as follows:
X = Q * m + a
castano / hemicube.cpp
Created Jun 20, 2014
Hemicube Integrator
View hemicube.cpp
#include "hemicube.h"
static void get_hemicube_face_normal(int index, Vector3 *forward, Vector3 *left, Vector3 *up) {
// Unwrapped hemicube with positive-Z in the middle.
switch (index) {
case 0: *forward = Vector3(+1, 0, 0); *left = Vector3( 0, 1, 0); break;
castano / scope.cpp
Created Jul 24, 2013
Various ways to emulate D's scope statements in C++. See
View scope.cpp
// For C++11 support compile with:
// clang++ -std=c++11 -stdlib=libc++ scope.cpp
#include <stdio.h>
#include <stdlib.h>
template <typename F>
struct ScopeExit {
ScopeExit(F f) : f(f) {}
~ScopeExit() { f(); }
castano / BSpline.cpp
Created Jun 15, 2012
Old b-spline interpolation and approximation code
View BSpline.cpp
Title: BSpline.cpp
Module: Pi/MathLib
Author: Ignacio Castaño
Date: 29/05/2000
License: Public Domain
castano / half_to_float_test.cpp
Created Mar 21, 2012
ISPC half to float conversion
View half_to_float_test.cpp
#include <intrin.h> // __rdtsc
#include <stdio.h>
typedef unsigned int uint;
typedef unsigned short uint16;
typedef unsigned long long uint64;
// ISPC functions:
extern "C" void half_to_float_test(const uint16 * vin, float * vout, int count);
extern "C" void half_to_float_test_fast(const uint16 * vin, float * vout, int count);
You can’t perform that action at this time.