Задача динамического рисования куба - PullRequest
3 голосов
/ 14 июля 2010

У меня есть массив с плавающей точкой camObjCoord, объявленный как ..

public static float camObjCoord[] = new float[8000];

Затем я заполняю его индексы в классе, который делает что-то вроде следующего ...

                      public void addcube(float highx, float lowx, float highz, float lowz){
    //Constructing new cube...
    System.out.println("f = " + f);
    Global.cubes++;
    float y = 1.5f;
    System.out.println("highx = " + highx + "lowx = " + lowx + "highz = " + highz + "lowz = " + lowz);
    //FRONT
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = highz;
    //BACK
     i++;
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    //LEFT
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    //RIGHT
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = highz;
     i++;
    //TOP
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = y; 
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    //BOTTOM
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = lowx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = lowz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = highz;
     i++;
    camObjCoord[i] = highx;
     i++;
    camObjCoord[i] = -y;
     i++;
    camObjCoord[i] = lowz;

    i++;
    int p = 0;
    System.out.println("FULL ARRAY");
    while(p < 72){
        System.out.println(camObjCoord[p]);
        p++;
    }
}

Я тогда звоню makeview()

    public void makeview() {
     Intent myIntent = new Intent(this, GLCamTest.class);

        Bundle b = new Bundle();
        b.putFloatArray("tweets", camObjCoord);
        myIntent.putExtras(b);
    this.startActivity(myIntent);
}

и затем в новом классе он делает ...

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle b = this.getIntent().getExtras();
    float original[] = b.getFloatArray("tweets");
    camObjCoord = original;
    counter++;
}   

Затем у меня есть другой класс class GLLayer, и он выглядит следующим образом .. http://pastebin.org/394884 внутри этого класса я рисую куб (ы) из массива с плавающей точкой, я проверил и значения для куб действительно есть, и когда я кодирую массив, он работает, но когда я динамически строю массив, то, передавая его, куб не рисует. Я звоню в класс так ...

           glView=new GLLayer(this);
           mPreview = new CamLayer(this, glView); 

Кто-нибудь знает, почему? Как бы я исправить мою проблему? Просто добавлю, я даю одинаковые значения точно таким же индексам при динамическом рисовании

          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,
        };

Тогда он будет рендерить этот куб. Кажется, мне не нравится, что я делаю массив, а затем динамически добавляю индексы. Зачем? Как это исправить? Для награды я бы также принял соответствующий обходной путь, который будет работать в Android.

Спасибо.

edit1: я пробовал разные вещи, это не пропуск массива, вызывающий проблемы, если я должен был объявить массив следующим образом ...

edit2: я также попытался распечатать массив, поскольку он входит в GLLayer (класс, который отображает кубы), и все так, как вы ожидаете. Я понятия не имею, почему эти кубики не появляются: (

edit3: я добавил, как я строю массивы с плавающей точкой.

edit4: я также попытался установить размер массива равным количеству вводимых значений. Не работает.

Ответы [ 2 ]

2 голосов
/ 17 июля 2010

Я бы немного решил проблему. Если бы вы сделали массив достаточно большим, чтобы вместить только один куб, и заполнили его таким же образом (но только один раз), сработал бы он? Что если вы сделаете его достаточно большим, чтобы вместить два куба, и предоставили ему данные на два куба?

1 голос
/ 16 июля 2010

Это в основном не ответ, а несколько вещей, которые нужно проверить:

  • Находятся ли данные в правильном порядке обмотки? Включите двусторонний рендеринг и посмотрите, работает ли он тогда.
  • Вы уверены, что сгенерированные данные находятся в области просмотра?
  • Вы уверены, что сгенерированные данные являются даже правильными кубами?
  • Может быть, кубики имеют размер 0?
  • Как вы визуализируете массив? 8000, кажется, немного много.

Здесь может быть полезен весь код и примеры данных, поскольку снайперы, вероятно, не содержат ошибку.

...