polygon.h
来自「最新osg包」· C头文件 代码 · 共 119 行
H
119 行
/******************************************************* Lightwave Object Loader for OSG Copyright (C) 2004 Marco Jez <marco.jez@poste.it> OpenSceneGraph is (C) 2004 Robert Osfield********************************************************/#ifndef LWOSG_POLYGON_#define LWOSG_POLYGON_#include "lwo2chunks.h"#include "Surface.h"#include "VertexMap.h"#include <osg/Vec3>#include <osg/Array>#include <string>#include <map>namespace lwosg{ class Polygon { public: typedef std::vector<int> Index_list; typedef std::map<int, int> Duplication_map; Polygon(); inline void set_invert_normal(bool v = true) { invert_normal_ = v; } inline const Index_list &indices() const { return indices_; } inline Index_list &indices() { dirty_normal(); return indices_; } inline const Duplication_map &dup_vertices() const { return dup_vertices_; } inline Duplication_map &dup_vertices() { return dup_vertices_; } inline const VertexMap *local_normals() const { return local_normals_.get(); } inline VertexMap *local_normals() { return local_normals_.get(); } inline const VertexMap_map *weight_maps() const { return weight_maps_.get(); } inline VertexMap_map *weight_maps() { return weight_maps_.get(); } inline const VertexMap_map *texture_maps() const { return texture_maps_.get(); } inline VertexMap_map *texture_maps() { return texture_maps_.get(); } inline const VertexMap_map *rgb_maps() const { return rgb_maps_.get(); } inline VertexMap_map *rgb_maps() { return rgb_maps_.get(); } inline const VertexMap_map *rgba_maps() const { return rgba_maps_.get(); } inline VertexMap_map *rgba_maps() { return rgba_maps_.get(); } inline bool has_surface() const { return surf_ != 0; } inline const Surface *get_surface() const { return surf_; } inline void set_surface(const Surface *s) { surf_ = s; } inline bool has_part() const { return !part_.empty(); } inline const std::string &get_part_name() const { return part_; } inline void set_part_name(const std::string &n) { part_ = n; } inline bool has_smoothing_group() const { return !smoothing_group_.empty(); } inline const std::string &get_smoothing_group() const { return smoothing_group_; } inline void set_smoothing_group(const std::string &n) { smoothing_group_ = n; } inline const osg::Vec3 &face_normal(const osg::Vec3Array *points) const; protected: inline void dirty_normal() { last_used_points_ = 0; } private: Index_list indices_; Duplication_map dup_vertices_; const Surface *surf_; std::string part_; std::string smoothing_group_; osg::ref_ptr<VertexMap> local_normals_; osg::ref_ptr<VertexMap_map> weight_maps_; osg::ref_ptr<VertexMap_map> texture_maps_; osg::ref_ptr<VertexMap_map> rgb_maps_; osg::ref_ptr<VertexMap_map> rgba_maps_; bool invert_normal_; mutable const osg::Vec3Array *last_used_points_; mutable osg::Vec3 normal_; }; // INLINE METHODS inline const osg::Vec3 &Polygon::face_normal(const osg::Vec3Array *points) const { if (last_used_points_ != points) { normal_.set(0, 0, 0); if (indices_.size() >= 3) { const osg::Vec3 &A = points->at(indices_.front()); const osg::Vec3 &B = points->at(indices_[1]); const osg::Vec3 &C = points->at(indices_.back()); if (invert_normal_) { normal_ = (C - A) ^ (B - A); } else { normal_ = (B - A) ^ (C - A); } float len = normal_.length(); if (len != 0) { normal_ /= len; } } last_used_points_ = points; } return normal_; }}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?