This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
Tamito Kajiyama 3c09bd41fc Clipping of imported meshes by the near and far view planes.
A straightforward clipping algorithm was implemented to
eliminate vertices that are out of the interval from the
near to far clipping distance defined by the active camera.
Previously, objects that come behind the camera could lead
to a crash.  The changes in this commit is intended to
address this issue.  When meshes are partially clipped, new
edges are added.  These edges can result in visible strokes
if they are within the camera view.
2010-01-24 23:12:57 +00:00

85 lines
2.0 KiB
C++

#ifndef BLENDER_FILE_LOADER_H
# define BLENDER_FILE_LOADER_H
# include <string.h>
# include <float.h>
# include "../system/FreestyleConfig.h"
# include "../scene_graph/NodeGroup.h"
# include "../scene_graph/NodeTransform.h"
# include "../scene_graph/NodeShape.h"
# include "../scene_graph/IndexedFaceSet.h"
# include "../geometry/BBox.h"
# include "../geometry/Geom.h"
# include "../geometry/GeomCleaner.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "DNA_material_types.h"
#include "DNA_scene_types.h"
#include "render_types.h"
#include "renderdatabase.h"
#include "BKE_mesh.h"
#include "BKE_scene.h"
#include "BLI_math.h"
#ifdef __cplusplus
}
#endif
class NodeGroup;
struct LoaderState {
float *pv;
float *pn;
unsigned *pvi;
unsigned *pni;
unsigned *pmi;
unsigned currentIndex;
unsigned currentMIndex;
float minBBox[3];
float maxBBox[3];
};
class LIB_SCENE_GRAPH_EXPORT BlenderFileLoader
{
public:
/*! Builds a MaxFileLoader */
BlenderFileLoader(Render *re, SceneRenderLayer* srl);
virtual ~BlenderFileLoader();
/*! Loads the 3D scene and returns a pointer to the scene root node */
NodeGroup * Load();
/*! Gets the number of read faces */
inline unsigned int numFacesRead() {return _numFacesRead;}
/*! Gets the smallest edge size read */
inline real minEdgeSize() {return _minEdgeSize;}
protected:
void insertShapeNode(ObjectRen *obr, int id);
int countClippedFaces(VertRen *v1, VertRen *v2, VertRen *v3, int clipped[3]);
void clipLine(VertRen *v1, VertRen *v2, float c[3], float z);
void clipTriangle(int numTris, float triCoords[][3], VertRen *v1, VertRen *v2, VertRen *v3, int clip[3]);
void addTriangle(struct LoaderState *state, float v1[3], float v2[3], float v3[3]);
protected:
Render* _re;
SceneRenderLayer* _srl;
NodeGroup* _Scene;
unsigned _numFacesRead;
real _minEdgeSize;
float _viewplane_left;
float _viewplane_right;
float _viewplane_bottom;
float _viewplane_top;
float _z_near, _z_far;
};
#endif // BLENDER_FILE_LOADER_H