資源簡介
3D模型obj文件導入渲染光照貼圖 opengl obj 著色器
代碼片段和文件信息
//?Copyright?2015?Tailgo
#include?“ObjLoader.h“
namespace?tg
{
????struct?vertex_index
????{
????????int?v_idx?vt_idx?vn_idx;
????????vertex_index()?{};
????????vertex_index(int?idx)?:?v_idx(idx)?vt_idx(idx)?vn_idx(idx)?{};
????????vertex_index(int?vidx?int?vtidx?int?vnidx)?:?v_idx(vidx)?vt_idx(vtidx)?vn_idx(vnidx)?{};
????};
????static?inline?bool?operator<(const?vertex_index&?a?const?vertex_index&?b)
????{
????????if?(a.v_idx?!=?b.v_idx)?return?(a.v_idx?????????if?(a.vn_idx?!=?b.vn_idx)?return?(a.vn_idx?????????if?(a.vt_idx?!=?b.vt_idx)?return?(a.vt_idx?
????????return?false;
????}
????static?inline?bool?isNewLine(const?char?c)?{
????????return?(c?==?‘\r‘)?||?(c?==?‘\n‘)?||?(c?==?‘\0‘);
????}
????//是否為空格
????static?inline?bool?isSpace(const?char?c)?{
????????return?(c?==?‘?‘)?||?(c?==?‘\t‘);
????}
????static?inline?std::string?parseString(const?char*&?token)
????{
????????std::string?s;
????????int?b?=?strspn(token?“?\t“);
????????int?e?=?strcspn(token?“?\t\r“);
????????s?=?std::string(&token[b]?&token[e]);
????????token?+=?(e?-?b);
????????return?s;
????}
????static?inline?int?parseInt(const?char*&?token)
????{
????????token?+=?strspn(token?“?\t“);
????????int?i?=?atoi(token);
????????token?+=?strcspn(token?“?\t\r“);
????????return?i;
????}
????//解析為float類型的值
????static?inline?float?parseFloat(const?char*&?token)
????{
????????token?+=?strspn(token?“?\t“);
????????float?f?=?(float)atof(token);
????????token?+=?strcspn(token?“?\t\r“);
????????return?f;
????}
????static?inline?void?parseFloat2(float&?x?float&?y?const?char*&?token)
????{
????????x?=?parseFloat(token);
????????y?=?parseFloat(token);
????}
????static?inline?void?parseFloat3(float&?x?float&?y?float&?z?const?char*&?token)
????{
????????x?=?parseFloat(token);
????????y?=?parseFloat(token);
????????z?=?parseFloat(token);
????}
????//?Make?index?zero-base?and?also?support?relative?index.
????static?inline?int?fixIndex(int?idx?int?n)
????{
????????int?i;
????????if?(idx?>?0)?{
????????????i?=?idx?-?1;
????????}
????????else?if?(idx?==?0)?{
????????????i?=?0;
????????}
????????else?{?//?negative?value?=?relative
????????????i?=?n?+?idx;
????????}
????????return?i;
????}
????//解析面信息?i?i/j/k?i//k?i/j
????static?vertex_index?parseTriple(const?char*?&token?int?vsize?int?vnsize?int?vtsize)
????{
????????vertex_index?vi(-1);
????????vi.v_idx?=?fixIndex(atoi(token)?vsize);
????????token?+=?strcspn(token?“/?\t\r“);
????????if?(token[0]?!=?‘/‘)?{
????????????return?vi;
????????}
????????token++;
????????//?i//k
????????if?(token[0]?==?‘/‘)?{
????????????token++;
????????????vi.vn_idx?=?fixIndex(atoi(token)?vnsize);
????????????token?+=?strcspn(token?“/?\t\r“);
????????????return?vi;
????????}
????????//?i/j/k?or?i/j
????????vi.vt_idx?=?fixIndex(atoi(token)?vtsize);
????????token?+=?strcspn(token?“/?\t\r“);
評論
共有 條評論