java - 这两种不同的数组填充方式的最终内容有什么区别吗?

标签 java opengl

假设两个示例中的变量和数字具有相同的数字...这两种不同的数组填充方式的最终内容有什么区别吗?我假设是相同的吗?

基本上,我尝试使用 OpenGL 渲染图形,第一个示例不起作用,但第二个示例可以。

示例 1...

全局声明是.. public static final float camObjCoord[] = new float[8000];

          public void addcube(float highx, float lowx, float highz, float lowz){
    //Constructing new cube...
    Global.cubes = Global.cubes + 1;
    float highy = 4.5f;
    float lowy = 2.5f;

    System.out.println("ADDING A CUBE!!");

    //FRONT
    Global.camObjCoord[Global.i] = highx;
    Global.camObjCoord[Global.i+1] = lowy;
    Global.camObjCoord[Global.i+2] = lowz;

    Global.camObjCoord[Global.i+3] = highx;
    Global.camObjCoord[Global.i+4] = lowy;
    Global.camObjCoord[Global.i+5] = lowz;

    Global.camObjCoord[Global.i+6] = highx;
    Global.camObjCoord[Global.i+7] = highy;
    Global.camObjCoord[Global.i+8] = lowz;

    Global.camObjCoord[Global.i+9] = highx;
    Global.camObjCoord[Global.i+10] = highy;
    Global.camObjCoord[Global.i+11] = lowz;

    //BACK
    Global.camObjCoord[Global.i+12] = highx;
    Global.camObjCoord[Global.i+13] = lowy;
    Global.camObjCoord[Global.i+14] = highz;

    Global.camObjCoord[Global.i+15] = highx;
    Global.camObjCoord[Global.i+16] = highy;
    Global.camObjCoord[Global.i+17] = highz;

    Global.camObjCoord[Global.i+18] = highx;
    Global.camObjCoord[Global.i+19] = lowy;
    Global.camObjCoord[Global.i+20] = highz;

    Global.camObjCoord[Global.i+21] = highx;
    Global.camObjCoord[Global.i+22] = highy;
    Global.camObjCoord[Global.i+23] = highz;

    //LEFT
    Global.camObjCoord[Global.i+24] = highx;
    Global.camObjCoord[Global.i+25] = lowy;
    Global.camObjCoord[Global.i+26] = lowz;

    Global.camObjCoord[Global.i+27] = highx;
    Global.camObjCoord[Global.i+28] = highy;
    Global.camObjCoord[Global.i+29] = lowz;

    Global.camObjCoord[Global.i+30] = highx;
    Global.camObjCoord[Global.i+31] = lowy;
    Global.camObjCoord[Global.i+32] = highz;

    Global.camObjCoord[Global.i+33] = highx;
    Global.camObjCoord[Global.i+34] = highy;
    Global.camObjCoord[Global.i+35] = highz;

    //RIGHT
    Global.camObjCoord[Global.i+36] = highx;
    Global.camObjCoord[Global.i+37] = lowy;
    Global.camObjCoord[Global.i+38] = highz;

    Global.camObjCoord[Global.i+39] = highx;
    Global.camObjCoord[Global.i+40] = highy;
    Global.camObjCoord[Global.i+41] = highz;

    Global.camObjCoord[Global.i+42] = highx;
    Global.camObjCoord[Global.i+43] = lowy;
    Global.camObjCoord[Global.i+44] = lowz;

    Global.camObjCoord[Global.i+45] = highx;
    Global.camObjCoord[Global.i+46] = highy;
    Global.camObjCoord[Global.i+47] = lowz;

    //TOP
    Global.camObjCoord[Global.i+48] = highx;
    Global.camObjCoord[Global.i+49] = highy;
    Global.camObjCoord[Global.i+50] = lowz;

    Global.camObjCoord[Global.i+51] = highx;
    Global.camObjCoord[Global.i+52] = highy;
    Global.camObjCoord[Global.i+53] = lowz;

    Global.camObjCoord[Global.i+54] = highx;
    Global.camObjCoord[Global.i+55] = highy;
    Global.camObjCoord[Global.i+56] = lowz;

    Global.camObjCoord[Global.i+57] = highx;
    Global.camObjCoord[Global.i+58] = highy;
    Global.camObjCoord[Global.i+59] = highz;

    //BOTTOM
    Global.camObjCoord[Global.i+60] = highx;
    Global.camObjCoord[Global.i+61] = lowy;
    Global.camObjCoord[Global.i+62] = lowz;

    Global.camObjCoord[Global.i+63] = highx;
    Global.camObjCoord[Global.i+64] = lowy;
    Global.camObjCoord[Global.i+65] = highz;

    Global.camObjCoord[Global.i+66] = highx;
    Global.camObjCoord[Global.i+67] = lowy;
    Global.camObjCoord[Global.i+68] = lowz;

    Global.camObjCoord[Global.i+69] = highx;
    Global.camObjCoord[Global.i+70] = lowy;
    Global.camObjCoord[Global.i+71] = highz;
}

示例 2...

        final static float camObjCoord[] = new float[] {
            // FRONT
             -2.0f, -1.5f,  2.0f,
              2.0f, -1.5f,  2.0f,
             -2.0f,  1.5f,  2.0f,
              2.0f,  1.5f,  2.0f,
             // BACK
             -2.0f, -1.5f, -2.0f,
             -2.0f,  1.5f, -2.0f,
              2.0f, -1.5f, -2.0f,
              2.0f,  1.5f, -2.0f,
             // LEFT
             -2.0f, -1.5f,  2.0f,
             -2.0f,  1.5f,  2.0f,
             -2.0f, -1.5f, -2.0f,
             -2.0f,  1.5f, -2.0f,
             // RIGHT
              2.0f, -1.5f, -2.0f,
              2.0f,  1.5f, -2.0f,
              2.0f, -1.5f,  2.0f,
              2.0f,  1.5f,  2.0f,
             // TOP
             -2.0f,  1.5f,  2.0f,
              2.0f,  1.5f,  2.0f,
             -2.0f,  1.5f, -2.0f,
              2.0f,  1.5f, -2.0f,
             // BOTTOM
             -2.0f, -1.5f,  2.0f,
             -2.0f, -1.5f, -2.0f,
              2.0f, -1.5f,  2.0f,
              2.0f, -1.5f, -2.0f,
        };

//编辑我将 addcube(6, 2, 6, 2); 添加到第一个示例,并且 ARRAY 等于.. [F@4499e290 。为什么数组分配会困惑?

最佳答案

您的第一个示例假设当调用 addcube 时,Global.i 被初始化为某个合理的值。如果 Global.i 发生更改,对 addcube 的多次调用可能会初始化同一数组的不同部分。 addcube 方法还会修改 Glocal.cubes 的值,而您在第二个示例中并未执行此操作。

您的第二个示例直接创建所需大小的数组,而不使用 Global.i 的值。这使得它更简单、更健壮,但可配置性也较差。

关于java - 这两种不同的数组填充方式的最终内容有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3232764/

相关文章:

java - Eclipse开普勒启动报错 "NoClassDefFoundError: org/eclipse/swt/widgets/Display"

java - 如何在 Struts 的邮件消息中包含链接

java - Eclipse 服务器超时的 Tomcat7

opengl - 由 SDL2 旋转的纹理未正确消除锯齿

c++ - 从特定类调用函数时出现段错误

使用 OpenGL 进行 Qt 渲染

java - LWJGL 的 Assimp 教程

java - 从jsp调用java类中的main方法?

c# - WPF 中的 OpenGL 控件因 OOM 异常而崩溃

java - 为 rhino 构建 java 脚本调试器