目前我有一个非常可爱的小OBJ加载器,我正在使用LWJGL创建我的游戏,到目前为止它已经很好用了,但是我试图使用我在上面找到的.obj文件。 NASA网站或其他东西,它不会加载。我在文本编辑器中查看了文件本身,并注意到我当前的OBJ加载器似乎没有考虑的两件事。首先,这个模型有一个与之关联的.mtl文件,其次,文件的“v”,“vt”,“vn”和“f”部分似乎散布在这个地方,而不是所有组合在一起并且在我习惯处理的文件中相继出现。
在我要遵循的教程中,为了为我的游戏奠定基础,很明显我只希望使用格式为这样的OBJ,以便有一堆以'v'开头的行,然后用'vt',等等等等。因此,我很难在网上找到与我的OBJ加载器兼容的模型。
我试图在Blender中创建我自己的模型,一个简单的地球模型,只是一个具有地球纹理的球体,但是当我导出它时,我最终得到了一个MTL文件(再一次,我的OBJ加载器没有'当我尝试加载它时出现错误,并且因为看起来文件中没有'vn'行,所以基本上没有与模型相关的法线。我对Blender几乎没有经验,我发现我看过的教程没有任何帮助,因为对于像我这样的新用户来说,这一切都非常复杂。任何快速步骤只是“添加法线”到我试图导出的模型上?
这是我的OBJ装载机的主要内容:
BufferedReader reader = new BufferedReader(fileReader);
String line;
List<Vector3f> vertices = new ArrayList<Vector3f>();
List<Vector2f> textureCoords = new ArrayList<Vector2f>();
List<Vector3f> normals = new ArrayList<Vector3f>();
List<Integer> indices = new ArrayList<Integer>();
float[] verticesArray = null;
float[] normalsArray = null;
float[] textureCoordsArray = null;
int[] indicesArray = null;
try {
while (true)
{
line = reader.readLine();
String[] currentLine = line.split(" ");
if (currentLine[0].equals("v"))
{
Vector3f vertex = new Vector3f(Float.parseFloat(currentLine[1]), Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3]));
vertices.add(vertex);
}
else if (currentLine[0].equals("vt"))
{
Vector2f textureCoord = new Vector2f(Float.parseFloat(currentLine[1]), Float.parseFloat(currentLine[2]));
textureCoords.add(textureCoord);
}
else if (currentLine[0].equals("vn"))
{
Vector3f normal = new Vector3f(Float.parseFloat(currentLine[1]), Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3]));
normals.add(normal);
}
else if (currentLine[0].equals("f"))
{
textureCoordsArray = new float[vertices.size() * 2];
normalsArray = new float[vertices.size() * 3];
break;
}
}
while (line != null)
{
if (!line.startsWith("f "))
{
line = reader.readLine();
continue;
}
String[] currentLine = line.split(" ");
String[] vertex1 = currentLine[1].split("/");
String[] vertex2 = currentLine[2].split("/");
String[] vertex3 = currentLine[3].split("/");
processVertex(vertex1, indices, textureCoords, normals, textureCoordsArray, normalsArray);
processVertex(vertex2, indices, textureCoords, normals, textureCoordsArray, normalsArray);
processVertex(vertex3, indices, textureCoords, normals, textureCoordsArray, normalsArray);
line = reader.readLine();
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
如何让我的OBJ加载程序处理更复杂的.obj文件?
关于LWJGL相关的任何提示或建议,可以帮助我开发3D月球着陆器游戏吗?