obj格式有4种数据,分别以一下字母开头:

v 顶点

vt 纹理坐标

vn 顶点法向量

f 面

一、顶点

格式:v x y z 或者 v x y z r g b

意义:每个顶点的坐标和颜色(可选,颜色可以0~255整数或者浮点数表示皆可)

二、纹理坐标

格式:vt u v w

意义:绘制模型的三角面片时,每个顶点取像素点时对应的纹理图片上的坐标。纹理图片的坐标指的是,纹理图片如果被放在屏幕上显示时,

以屏幕左下角为原点的坐标。

注意:w一般用于形容三维纹理,大部分是用不到的,基本都为0。

三、顶点法向量

格式:vn x y z

意义:绘制模型三角面片时,需要确定三角面片的朝向,整个面的朝向,是由构成每个面的顶点对应的顶点法向量的做矢量和决定的

(xyz的坐标分别相加再除以3得到的)。

四、面

格式 :f v/vt/vn v/vt/vn v/vt/vn(f 顶点索引 / 纹理坐标索引 / 顶点法向量索引)

意义:绘制三角面片的依据,每个三角面片由三个f构成,由f可以确定顶点、顶点的对应的纹理坐标(提取纹理图片对应该坐标的像素点)、

通过三个顶点对应的顶点法向量可以确定三角面的方向。

补充:有些模型可能会出现四边形的绘制方式,那样的模型关于面的数据描述是这样的 f v/vt/vn v/vt/vn v/vt/vn v/vt/vn ,

比三角面绘制方式多一项数据。

补充说明:

顶点的个数与顶点法向量的个数一样多。

顶点的个数不一定与纹理坐标的个数一样多,因为有可能很多顶点公用一个纹理坐标的像素。

面索引的个数也与其余数据数量无关。

最终每个三角面的颜色,是由构成这个三角面的三个顶点进行插值计算(有例如:一个三角面其中两个顶点对应的纹理坐标是黑色的,

另外一个是白色,那整个面呈现的颜色是由黑变白渐变,而不是三个颜色值的平均值。这就是插值的作用)来确定。

所以面的颜色有可能不与每个点的颜色一致。

手工制作创建立方体

// cube1.obj

g cube

v  0.0  0.0  0.0  124  110  120
v  0.0  0.0  0.2  24  0  121
v  0.0  0.2  0.0  4  0  44
v  0.0  0.2  0.2  224  0  10
v  0.2  0.0  0.0  24  200  25
v  0.2  0.0  0.2  124  10  56
v  0.2  0.2  0.0  78  10  50
v  0.2  0.2  0.2  23  0  200

vn 0.0 0.0 1.0
vn 0.0 0.0 -1.0
vn 0.0 1.0 0.0
vn 0.0 -1.0 0.0
vn 1.0 0.0 0.0
vn -1.0 0.0 0.0

f 1//2 7//2 5//2
f 1//2 3//2 7//2
f 1//6 4//6 3//6
f 1//6 2//6 4//6
f 3//3 8//3 7//3
f 3//3 4//3 8//3
f 5//5 7//5 8//5
f 5//5 8//5 6//5
f 1//4 5//4 6//4
f 1//4 6//4 2//4
f 2//1 6//1 8//1
f 2//1 8//1 4//1

或者 // cube2.obj

g cube

v  0.0  0.0  0.0  0.0  0.0  0.0
v  0.0  0.0  0.2  1.0  0.6  0.3
v  0.0  0.2  0.0  0.0  0.0  0.0
v  0.0  0.2  0.2  0.3  0.6  1.0
v  0.2  0.0  0.0  0.0  0.0  0.0
v  0.2  0.0  0.2  1.0  0.6  0.3
v  0.2  0.2  0.0  0.0  0.0  0.0
v  0.2  0.2  0.2  0.3  0.6  1.0

vn 0.0 0.0 1.0
vn 0.0 0.0 -1.0
vn 0.0 1.0 0.0
vn 0.0 -1.0 0.0
vn 1.0 0.0 0.0
vn -1.0 0.0 0.0

f 1//2 7//2 5//2
f 1//2 3//2 7//2
f 1//6 4//6 3//6
f 1//6 2//6 4//6
f 3//3 8//3 7//3
f 3//3 4//3 8//3
f 5//5 7//5 8//5
f 5//5 8//5 6//5
f 1//4 5//4 6//4
f 1//4 6//4 2//4
f 2//1 6//1 8//1
f 2//1 8//1 4//1

使用 OBJViewer 打开该cube2.obj

OBJViewer

或者 https://threejs.org/examples/

或者 https://github.com/udhos/gwob

或者 https://github.com/sheenobu/go-obj/