Subversion Repositories gelsvn

Rev

Rev 656 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
594 jab 1
/* ----------------------------------------------------------------------- *
2
 * This file is part of GEL, http://www.imm.dtu.dk/GEL
3
 * Copyright (C) the authors and DTU Informatics
4
 * For license and list of authors, see ../../doc/intro.pdf
5
 * ----------------------------------------------------------------------- */
6
 
7
/**
8
 * @file draw.h
9
 * @brief Draw various GEL entities.
10
 */
11
 
167 jab 12
#ifndef __GLGRAPHICS_DRAW_H_
13
#define __GLGRAPHICS_DRAW_H_
14
 
601 jab 15
#include "../Geometry/TriMesh.h"
16
#include "../Geometry/AABox.h"
17
#include "../Geometry/OBox.h"
18
#include "../Geometry/BoundingINode.h"
19
#include "../Geometry/BoundingLNode.h"
20
#include "../Geometry/BoundingTree.h"
167 jab 21
 
594 jab 22
namespace HMesh
23
{
24
    class Manifold;
25
}
26
 
299 jrf 27
namespace GLGraphics
28
{
657 janba 29
    /// Simply draw a tessellated ball.
30
    void draw_ball();
31
 
432 jab 32
	/// Draw an indexed face set (just a triangle list) with normals computed on the fly.
33
	void draw(const Geometry::IndexedFaceSet& geometry);
34
 
396 jab 35
	/// Draw a triangles mesh. Inefficient function that should be compiled into a display list.
36
	void draw(const Geometry::TriMesh& tm, bool per_vertex_norms=true);
37
 
441 jab 38
	/// Load textures if available
39
	void load_textures(Geometry::TriMesh& tm);	
40
 
396 jab 41
	/// Draw a HMesh Manifold. Inefficient and should be compiled into display list
594 jab 42
	void draw(const HMesh::Manifold& m, bool per_vertex_norms=true);
368 jrf 43
 
396 jab 44
 
45
	/// Draw an axis aligned bounding box
46
	void draw(const Geometry::AABox& box);
47
 
48
	/// Draw an oriented bounding box
49
	void draw(const Geometry::OBox& box);
50
 
400 jab 51
	/// Draw an object of type T which contains only triangles as wireframe. In practice T = Manifold or TriMesh.
396 jab 52
	template<typename T>
492 jrf 53
	inline void draw_triangles_in_wireframe(T& m, bool per_vertex_norms, const CGLA::Vec3f& line_color);
54
 
55
  /// Draw an object of type T as wireframe.  In practice T = Manifold or TriMesh.
396 jab 56
	template<class T>
594 jab 57
	void draw_wireframe_oldfashioned(const T& m, bool per_vertex_norms, const CGLA::Vec3f& line_color);
396 jab 58
 
59
 
60
	template<class BoxType>
299 jrf 61
	void draw(const Geometry::BoundingINode<BoxType>& node, int level, int max_level);
396 jab 62
	template<class BoxType>
299 jrf 63
    void draw(const Geometry::BoundingLNode<BoxType>& node, int level, int max_level);
396 jab 64
	template<class BoxType>
299 jrf 65
    void draw(const Geometry::BoundingTree<BoxType>& tree, int max_level = 1e6);
656 janba 66
 
67
    /// Read depth buffer and extract the depth of a pixel
68
    bool depth_pick(int x, int y, float& depth);
69
 
70
    /** Convert depth value to 3D point. Supposes that the modelview and projection matrices
71
     are set in the same way as when rendering. */
72
    CGLA::Vec3d screen2world(int x, int y, float depth);
657 janba 73
 
74
    /** Project the point given as argument using modelview and projection matrices */
75
    CGLA::Vec3d world2screen(const CGLA::Vec3d& p);
656 janba 76
 
77
 
299 jrf 78
}
167 jab 79
#endif