资源简介
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 < b.v_idx);
if (a.vn_idx != b.vn_idx) return (a.vn_idx < b.vn_idx);
if (a.vt_idx != b.vt_idx) return (a.vt_idx < b.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“);
相关资源
- OpenGL配置库与教程实现一个.
- AVOD论文讲解PPT
- 基于特征点匹配的三维重建OpenCV+Ope
-
ob
jective-C高级编程-高清PDF - OpenGL编程指南原书第8版 中文PDF 高清
-
基于ob
jectARX的AUTOCAD二次开发文档 - glui批生成文件
- 利用opengl 读取建筑物模型 obj文件并加
- 学OpenGL编3D游戏含源代码
- openGL正方体贴图
- 用opengl写的一个保龄球游戏
- OpenGL完成对OFF文件的读取和使三维模
- OpenGL实验八犹他茶壶光照、阴影、纹
- D3D三层Texture纹理经像素着色器实现渲
- opengl绘制花瓶演示
- 自己写的读取任意格式点云并读取的
- opengl加载off文件
- OPENGL 水波效果 源代码
- OpenGL光照测试Revision演示程序
- 基于OpenGL的3D旋转魔方
- OpenGL ES 3.x游戏开发 下卷
- OpenGL太阳系
- OpenGL实现小车模型的导入和渲染
- D3D11_LoadOBJ
- opengl绘制简单场景,实现平移旋转缩
-
Nonlinear Multiob
jective Optimization高清 - OpenGL读取显示obj文件并渲染
- OpenGL ES应用开发实践 指南 iOS卷pdf
- 计算机图形学OpenGL第三版.pdf
- Open GL编程指南原书第7版
评论
共有 条评论