【问题标题】:OpenGL rendering Array of MeshesOpenGL渲染网格阵列
【发布时间】:2013-11-06 15:55:47
【问题描述】:

首先,我的问题是我不能得到一个奇怪的结果,即可能应该渲染但不在 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 循环。

【问题讨论】:

    标签: java arrays object opengl for-loop


    【解决方案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));
        }
    

    您的 print 语句确实有效,因为它确实创建了所有 100 个网格,但它取代了之前在您的阵列中创建的网格,因为您继续使用前 10 个索引。

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

    另外,投反对票的人是怎么回事?

    【讨论】:

    • 非常感谢。感谢您花时间和精力为我的问题写答案。此外,它适用于您的代码,这很棒。
    猜你喜欢
    • 2021-10-30
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2012-05-04
    • 2018-09-02
    • 2011-10-22
    相关资源
    最近更新 更多