Getting started
阅读信息
约 565 个字 2 分钟 本页总访问量:加载中... 次
参考
可能由于官方教程是几年前编写的,下载得到的头文件在命名、使用等方面和教程以及网上的笔记有小小的出入。
学习参考:
以及 g 老师和 d 老师的倾情相助,帮我解决了大部分问题
编译
只要 tgaimage.h, tgaimage.cpp 等,编译时链接起来即可.
编译运行示例:
编译不要加-O2
的优化,会产生未知错误导致文件无法读取。我也不知道为什么
不需要用 CMake。
模块简介
vec 简介
用vec<n>
可以创建任意维度的向量,元素类型为 double。vec<2>
可简写为vec2
,vec<3>
可简写为vec3
。
用v[i]
可以访问向量 v 的第 i 个元素。特别地,可用 .x
, .y
访问vec2
,用 .x
, .y
, .z
访问vec3
。对于vec4
,.xy()
返回前两位,.xyz()
返回前三位。
运算符*
表示向量点乘,返回类型为 double。运算符+-
表示向量的加减法。向量*常数
,常数*向量
,向量/常数
均可行。
norm(v)
表示向量的模长,返回类型为 double。
normalized(v)
返回单位化的向量。
cross(a,b)
表示三维向量的叉积(仅对 vec3 定义),返回类型为vec3
。
额外定义vec2i
,元素类型为 int。
mat 简介
mat<nrows,ncols> m
用于创建 nrows*ncols 的矩阵 m,元素类型为 double。用m[i][j]
访问第 i 行第 j 列的元素。
m.n_rows()
返回矩阵的行数,m.n_cols()
返回矩阵的列数,返回类型均为 int。
transpose(m)
求矩阵 m 的转置。
invert(m)
求矩阵 m 的逆。
det(m)
求矩阵 m 的行列式。
矩阵乘法运算符为*
,支持矩阵和大小对应的向量相乘。矩阵加减法运算符为+-
。
矩阵*标量
,矩阵/标量
可行,矩阵中每个元素乘除相应值。
identity<n>()
生成 n*n 的单位矩阵。
Model 简介
Model model = new Model("name.obj");
用model
表示 name.obj 对应的模型。model->nverts()
得到点数,model->nfaces()
得到面数。所有顶点按顺序依次存在
facet_vrt
中,顶点的法向量依次存在facet_nrm
中,第 i 个面第 j 个顶点的索引为i*3+j
。但这两个 vector 是私有属性。model->vert(i,j)
得到第 i 个面第 j 个顶点的位置,返回类型为 vec3。model->normal(i,j)
得到第 i 个面第 j 个顶点的法向量,返回类型为 vec3。model->index(i,j)
得到第 i 个面第 j 个顶点的编号,返回类型为 int。model->uv(i,j)
得到第 i 个面第 j 个顶点纹理信息,即这个顶点在纹理图案中的坐标,返回类型为 vec2。model->diffuse()
得到对应贴图的图像,返回类型为 TGAImage。model->diffuse().get(x,y)
获得贴图上坐标(x,y)处的像素颜色。