Java BennyBox 3D游戏引擎网格

Java BennyBox 3D游戏引擎网格,java,opengl,3d,game-engine,Java,Opengl,3d,Game Engine,我正在使用中的3D游戏引擎作为起点来创建球形网格。稍后的目标是能够在运行时控制该网格的顶点 但是,在继续之前,我需要确保能够按程序创建网格。有两种方法可以让网格进入游戏引擎 导入OBJ文件。当你运行程序时,你会注意到一个带有纹理的搅拌机猴头 创建顶点、索引(使用这两个来创建网格)和材质的数组。你会注意到,我在猴头后面创造了一个小金字塔。至少在我看来,金字塔是深棕色的。然而,我应用了一种与我在猴子身上使用的纹理相似的纹理 我的项目在。 当前提交:77b5495 设置游戏环境的游戏文件:com.

我正在使用中的3D游戏引擎作为起点来创建球形网格。稍后的目标是能够在运行时控制该网格的顶点

但是,在继续之前,我需要确保能够按程序创建网格。有两种方法可以让网格进入游戏引擎

  • 导入OBJ文件。当你运行程序时,你会注意到一个带有纹理的搅拌机猴头
  • 创建顶点、索引(使用这两个来创建网格)和材质的数组。你会注意到,我在猴头后面创造了一个小金字塔。至少在我看来,金字塔是深棕色的。然而,我应用了一种与我在猴子身上使用的纹理相似的纹理
我的项目在。 当前提交:77b5495

设置游戏环境的游戏文件:com.base.game/TestSphere.java 我从第44行开始构建网格:

Vertex[] vertices = {   new Vertex(new Vector3f(-1,-1,0), new Vector2f(0,0)),
                            new Vertex(new Vector3f(0,1,0), new Vector2f(0.5f,0)),
                            new Vertex(new Vector3f(1,-1,0), new Vector2f(1.0f,0)),
                            new Vertex(new Vector3f(0,-1,1), new Vector2f(0.5f,1.0f))};

    int[] indices = new int[]   {3,1,0,
                                 2,1,3,
                                 0,1,2,
                                 0,2,3};

    Mesh pyramid = new Mesh(vertices, indices,true);
    Material material = new Material(new Texture("bricks2.jpg"), 1, 8,new Texture("bricks2_normal.png"), new Texture("bricks2_disp.jpg"), 0.04f, -1.0f);

    GameObject myMesh = new GameObject();
    AddObject(myMesh);
    myMesh.AddComponent(new MeshRenderer(pyramid, material)).AddComponent(new Rotate(0.005f));
    myMesh.GetTransform().GetPos().Set(5, 0, 5);
据我所知,问题可能出在网格或材质上。网格可见,但纹理不可见。材质在不同的导入网格上工作。我基本上被卡住了。你知道我可以从这里走向何方吗

先谢谢你


Tomasz Naglik

我猜您缺少从.Obj文件导入的纹理UV坐标。如果没有它们,它就不知道如何正确地将纹理包裹在周围object@CraigR8806他将它们放在
顶点中
顶点定义网格顶点的坐标,而不是纹理坐标。对于每个3D顶点,都应该有一个对应于纹理的2d坐标。索引数组只是一种压缩技术,因此不必为共享同一点的三角形多次定义同一顶点在文件编辑器中打开obj文件,我敢打赌您会看到2dcoords@CraigR8806这就是Bennybox定义网格数据结构的方式-UV和顶点数据是1对1耦合的