我一直在阅读David Brackeen撰写的开发Java游戏。到目前为止,我已经理解了书中的所有内容。在Wavefront Object文件中,我了解v
命令的作用,但我不理解f
命令。例如:
# OBJ - Wavefront object file
# The javagamebook loader only understands these commands:
# mtllib <filename> - Load materials from an external .mtl
# file.
# v <x> <y> <z> - Define a vertex with floating-point
# coords (x,y,z).
# f <v1> <v2> <v3> ... - Define a new face. a face is a flat,
# convex polygon with vertices in
# counter-clockwise order. Positive
# numbers indicate the index of the
# vertex that is defined in the file.
# Negative numbers indicate the vertex
# defined relative to last vertex read.
# For example, 1 indicates the first
# vertex in the file, -1 means the last
# vertex read, and -2 is the vertex
# before that.
# g <name> - Define a new group by name. The faces
# following are added to this group.
# usemtl <name> - Use the named material (loaded from a
# .mtl file) for the faces in this group.
# load materials
mtllib textures.mtl
# define vertices
v 16 32 16
v 16 32 -16
v 16 0 16
v 16 0 -16
v -16 32 16
v -16 32 -16
v -16 0 16
v -16 0 -16
g myCube
usemtl wall1
f 1 3 4 2
f 6 8 7 5
f 2 6 5 1
f 3 7 8 4
f 1 5 7 3
f 4 8 6 2
f
命令在这里做什么?
答案 0 :(得分:4)
一个立方体有八个角(用顶点或点表示),由v(v代表顶点)定义。面(f)是由角的坐标(v)定义的表面,为了举例说明,见{{ 3}}
v1+-----------+ v2
/ /
/ f1 /
/ /
v4+------------+v3
| |
| |
| f2 |
| |
| |
v6+------------+v5
这意味着面部f1由v1,v2,v3和v4定义; f2 by v4,v3,v5,v6。
答案 1 :(得分:4)
f
表示模型的面(例如,三角形或四边形)。数字是顶点列表中的索引,表示您应该将其连接以形成面部的方式。
在发布的obj文件中,您找到的第一个f
表示该面由四边形(因为有4个顶点)形成,顶点为#1,#3,#4和#2。 / p>
重要提示:您应该按照指定的顺序连接顶点,以避免在法线计算和/或非多边形(自相交)形状出现问题后出现问题。