OpenGL渲染网格数组

时间:2013-11-06 15:55:48

标签: java arrays object opengl for-loop

首先,我的问题是我不能得到一个奇怪的结果,可能会呈现的东西,但不是3D空间。

首先,我创建了Mesh_Cube的数组,它只是一个包含Vector3的类,然后我将for循环值传递给它们,如下所示:

cubes = new Mesh_Cube[10];
for(int x = 0; x < cubes.length; x++) {
    for(int z = 0; z < cubes.length; z++) {
        cubes[x] = new Mesh_Cube(new Vector3(x,0,z), new Vector3(1,0,1));
        System.out.println(cubes[x].position.x + ", " + cubes[x].position.z);
        //Prints out the right coordinates, in both X and Z.
    }
}

然后我在glBegin方法的foreach循环中渲染它们: (mc.Render()方法,只包含要渲染的顶点,在glBegin()中)

for(Mesh_Cube mc : cubes) {
    mc.Render();
}

我得到的最终结果是:

enter image description here 实际结果应该是一个网格,因为我有两个for循环。

1 个答案:

答案 0 :(得分:1)

数组cubes只有10个元素。渲染算法工作得很好,它渲染出所有10个存储的网格。

问题是你的循环。第一个for循环迭代所有10个元素,很好。嵌套的for循环也迭代超过10个元素,但其值永远不会用于计算数组中的索引。您只使用x索引将地址作为数组中的元素。这意味着你不断重建前10个元素。

我不太熟悉您正在使用的语言,但您应该拥有10 * 10元素的2维数组或100个元素的1维数组。这个可能是伪代码应该给你一个想法:

// As you can see I use a 1 dimensional array of 100 elements
cubes = new Mesh_Cube[100];

for(int x = 0; x < 10; x++)
    for(int z = 0; z < 10; z++)
    {
        // Now I'm properly calculating the index of the new object,
        // Taking into account both x and z
        cubes[x * 10 + z] = new Mesh_Cube(new Vector3(x,0,z), new Vector3(1,0,1));
    }

你的print语句确实有效,因为它确实创建了所有100个网格,但是当你继续使用前10个索引时,它取代了先前在数组中创建的网格。

由于它是一维数组,渲染算法应该可以正常工作。如果您打算使用二维数组,可能需要进行一些更改,具体取决于语言如何定义二维数组。

此外,还有什么东西可以帮助人们呢?