-1

首先,我的问题是我不能得到一个奇怪的结果,可能应该渲染的东西,但不在 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();
}

我得到的最终结果是:

在此处输入图像描述 实际结果应该是一个网格,因为我有两个 for 循环。

4

1 回答 1

1

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

问题是你的 for 循环。第一个 for 循环遍历所有 10 个元素,很好。嵌套的 for 循环也迭代了 10 个元素,但它的值从不用于计算数组中的索引。您只使用 x 索引来寻址数组中的一个元素。这意味着您不断地重新创建前 10 个元素。

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

// 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));
    }

您的打印语句确实有效,因为它确实创建了所有 100 个网格,但是当您继续使用前 10 个索引时,它替换了阵列中先前创建的网格。

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

另外,投反对票的人怎么了?

于 2013-11-06T17:45:25.883 回答