我正在尝试创建一个轴对齐的边界框(aabb),并希望获得所有顶点坐标的最小值和最大值。
我正在从obj文件中读取以获取顶点坐标,打印输出将是浮点数中的x,y,z坐标列表。
float xVertices;
float yVertices;
float zVertices;
private void getObjVertices(String fileName)
{
BufferedReader meshReader = null;
try
{
meshReader = new BufferedReader(new FileReader(fileName));
String line;
while((line = meshReader.readLine()) != null)
{
String[] tokens = line.split(" ");
tokens = Util.RemoveEmptyStrings(tokens);
if(tokens.length == 0 || tokens[0].equals("#") ||
tokens[0].equals("vt") || tokens[0].equals("vn") || tokens[0].equals("f"))
continue;
else if(tokens[0].equals("v"))
{
xVertices = Float.parseFloat(tokens[1]);
yVertices = Float.parseFloat(tokens[2]);
zVertices = Float.parseFloat(tokens[3]);
System.out.println("xVertices:" + xVertices);
System.out.println("yVertices:" + yVertices);
System.out.println("zVertices:" + zVertices);
// get min/max x,y,z values, calculatre width, height, depth
}
}
meshReader.close();
}
catch(Exception e)
{
e.printStackTrace();
System.exit(1);
}
}
我想要实现的是获得所有xVertices,yVertices,zVertices并找出每个轴中的哪个数字是greates,哪个是最小的。
有了这些信息,我就可以创建对撞机..有人知道如何在我的代码中计算greates和最小数字吗?
提前感谢您的帮助!
答案 0 :(得分:2)
您可以保留最大和最小数字的记录,并在程序读取顶点时更新它们。以下是一个例子。
float xMin, xMax, yMin, yMax, zMin, zMax;
xMin = yMin = zMin = Float.MAX_VALUE;
xMax = yMax = zMax = Float.MIN_VALUE;
while ((line = meshReader.readLine()) != null) {
String[] tokens = line.split(" ");
tokens = Util.RemoveEmptyStrings(tokens);
if (tokens.length == 0 || tokens[0].equals("#") ||
tokens[0].equals("vt") || tokens[0].equals("vn") || tokens[0].equals("f"))
continue;
else if (tokens[0].equals("v")) {
xVertices = Float.parseFloat(tokens[1]);
yVertices = Float.parseFloat(tokens[2]);
zVertices = Float.parseFloat(tokens[3]);
if (xMin > xVertices) xMin = xVertices;
if (yMin > yVertices) yMin = yVertices;
if (zMin > zVertices) zMin = zVertices;
if (xMax < xVertices) xMax = xVertices;
if (yMax < yVertices) yMax = yVertices;
if (zMax < zVertices) zMax = zVertices;
System.out.println("xVertices:" + xVertices);
System.out.println("yVertices:" + yVertices);
System.out.println("zVertices:" + zVertices);
// get min/max x,y,z values, calculatre width, height, depth
}