Blame c++/perspective/src/perspective.h

Ivan Mahonin 4dc49c
#ifndef PERSPECTIVE_H
Ivan Mahonin 4dc49c
#define PERSPECTIVE_H
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
#include <vector>
Ivan Mahonin 3a6f9b
#include <string>
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
#include "vector.h"
Ivan Mahonin 4dc49c
#include "matrix.h"
Ivan Mahonin 4dc49c
#include "surface.h"
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
class Perspective {
Ivan Mahonin 4dc49c
public:
Ivan Mahonin 4dc49c
	class Layer {
Ivan Mahonin 4dc49c
	public:
Ivan Mahonin 4dc49c
		IntPair2   dst_bounds;
Ivan Mahonin 4dc49c
		Pair2      src_bounds;
Ivan Mahonin 4dc49c
		IntVector2 src_size;
Ivan Mahonin 4dc49c
		Matrix3    back_matrix;
Ivan Mahonin 4dc49c
		Matrix3    back_alpha_matrix;
Ivan Mahonin 43cb04
		Vector2    center;
Ivan Mahonin 4dc49c
	};
Ivan Mahonin 4dc49c
	
Ivan Mahonin 4dc49c
	typedef std::vector<Layer> LayerList;
Ivan Mahonin 4dc49c
	
Ivan Mahonin 4dc49c
	
Ivan Mahonin 3a6f9b
	static Matrix3 make_matrix(
Ivan Mahonin 3a6f9b
		const Vector2 &p0,
Ivan Mahonin 3a6f9b
		const Vector2 &px,
Ivan Mahonin 3a6f9b
		const Vector2 &py,
Ivan Mahonin 3a6f9b
		const Vector2 &p1 );
Ivan Mahonin 3a6f9b
	
Ivan Mahonin db8a1f
	static Matrix3 matrix_mult(
Ivan Mahonin db8a1f
		const Matrix3 &matrix,
Ivan Mahonin db8a1f
		Real value );
Ivan Mahonin db8a1f
	static Matrix3 normalize_matrix_by_det(
Ivan Mahonin 5f2fc2
		const Matrix3 &matrix );
Ivan Mahonin 43cb04
Ivan Mahonin 4dc49c
	static int truncate_line(
Ivan Mahonin 4dc49c
		Vector2 *out_points,
Ivan Mahonin 4dc49c
		const Pair2 &bounds,
Ivan Mahonin 4dc49c
		Real a,
Ivan Mahonin 4dc49c
		Real b,
Ivan Mahonin 4dc49c
		Real c );
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
	static Vector2 calc_optimal_resolution(
Ivan Mahonin 4dc49c
		const Vector2 &ox,
Ivan Mahonin 4dc49c
		const Vector2 &oy );
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
	static Vector3 make_alpha_matrix_col(
Ivan Mahonin 4dc49c
		Real w0,
Ivan Mahonin 4dc49c
		Real w1,
Ivan Mahonin 4dc49c
		const Vector3 &w_col );
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
	static Matrix3 make_alpha_matrix(
Ivan Mahonin 4dc49c
		Real aw0, Real aw1,
Ivan Mahonin 4dc49c
		Real bw0, Real bw1,
Ivan Mahonin 4dc49c
		const Vector3 &w_col );
Ivan Mahonin 4dc49c
	
Ivan Mahonin 4dc49c
	static void calc_raster_size(
Ivan Mahonin 4dc49c
		Pair2 &out_bounds,
Ivan Mahonin 4dc49c
		IntVector2 &out_raster_size,
Ivan Mahonin 4dc49c
		Matrix3 &out_raster_matrix,
Ivan Mahonin 4dc49c
		const Vector2 &resolution,
Ivan Mahonin 5f2fc2
		const Pair2 &bounds,
Ivan Mahonin 5f2fc2
		const Vector2 &dst_size );
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
	static void create_layers(
Ivan Mahonin 4dc49c
		LayerList &out_layers,
Ivan Mahonin 4dc49c
		const Matrix3 &matrix,
Ivan Mahonin 4dc49c
		const IntPair2 &dst_bounds,
Ivan Mahonin 4dc49c
		const Real step = 4.0 );
Ivan Mahonin 4dc49c
	
Ivan Mahonin 57974f
	static Real find_optimal_step(
Ivan Mahonin 57974f
		const Matrix3 &matrix,
Ivan Mahonin 57974f
		const IntPair2 &dst_bounds );
Ivan Mahonin 57974f
	
Ivan Mahonin 4dc49c
	static void add_premulted(
Ivan Mahonin 4dc49c
		const Layer &layer,
Ivan Mahonin 3a6f9b
		Surface &src_surface,
Ivan Mahonin 3a6f9b
		Surface &dst_surface );
Ivan Mahonin 43cb04
Ivan Mahonin 43cb04
	static void paint_cross(
Ivan Mahonin 43cb04
		Surface &dst_surface,
Ivan Mahonin 43cb04
		const Vector2 &point );
Ivan Mahonin 3a6f9b
	
Ivan Mahonin 3a6f9b
	
Ivan Mahonin 3a6f9b
	static void print_layer(const Layer &layer, const std::string &prefix = std::string());
Ivan Mahonin 3a6f9b
	static void print_layers(const LayerList &layers, const std::string &prefix = std::string());
Ivan Mahonin 4dc49c
};
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
Ivan Mahonin 4dc49c
#endif