# draw grid of nxn cubes

Hi all,

This is a very simple question, and yet I have been the last 3 days trying to figure it out.
How do I construct a n x n grid of cubes? I have seen several Processing examples but I did not get results.

Here is my attempt

``````

//testApp.cpp

class cubeClass::cubeClass cubo[_ARRAYSIZE];

void testApp::drawCubes(void){
//cube positions

for (int i=0; i<_ARRAYSIZE; i++) //_ARRAYSIZE: NR ROWS
{
for(int j=0; j<_ARRAYSIZE; j++) //_ARRAYSIZE: NR COLUMNS
{
cubo[i].size = 100.0f;
cubo[i].xPos = (i*cubo[i].size+cubo[i].size/2)+((_ARRAYSIZE/2)*cubo[i].size);
cubo[i].yPos = (j*cubo[i].size + cubo[i].size/2)+((_ARRAYSIZE/2)*cubo[i].size);;

cout << i <<"," <<j << "\n";

}
}
}

``````

Where xPos and yPos will be used as positions in glTranslatef() (I want the grid to appear centered in the window):

``````

//cubeClass.cpp

void cubeClass::draw() {

glPushMatrix();
glTranslatef(xPos, yPos, 0);
myCube();
glPopMatrix();

}

``````

Any clues?

Hi,

What happens if you dont translate? are you using a camera?

Here is how I did it, whit no camera:

``````
// Setup Boxes
mBoxSize = 80.0f;
float numBoxesInX = ofGetWidth() / mBoxSize;
float numBoxesInY = ofGetHeight() / mBoxSize;
mNumBoxes = numBoxesInX * numBoxesInY;

for ( int i = 0; i < numBoxesInX; i++ ) {
for (int j = 0; j < numBoxesInY; j++ ) {
float x = i * mBoxSize + mBoxSize * 0.5f;
float y = j * mBoxSize + mBoxSize * 0.5f;
float z = -mBoxSize * 0.5f;
Box box;
box.mSize = mBoxSize;
box.mPosition = ofVec3f( x, y, z ); // set position for this box
mBoxes.push_back( box );
}
}

``````

This will fill the screen with boxes like a m x n matrix, this can be change by adjusting numBoxes(X/Y), hope that make sense.

Cheers

• rS

I am trying your coude but still don´t get any results. I am not using cameras, but I want this n x n cube grid to appear in the middle of my screen, instead of occupying the whole screen. Cubes have a pre-defined size.

I will keep you posted about my results soon.

Beatriz :mrgreen:

I got it working. I realized that the “problem” was that OF windows are set up in such a way that the coordinate 0,0 is situated at the top left corner of the window, while in OpenGL the 0,0 coordinate is right in the center of the window. I will open a separate post about this.

Here the code:

``````
#include "testApp.h"

#define numBoxesInX 5
#define numBoxesInY 5
#define numBoxes numBoxesInX * numBoxesInY

float cubeSize = 30.0f;
float offset = 10.0f;

struct coords {
float x,y,z;
float s; //size
int r,g,b;
};

struct coords p [numBoxesInX] [numBoxesInY]; //ARRAY OF STRUCTS

//--------------------------------------------------------------
void testApp::setup(){
ofBackground(256, 256, 256);
ofSeedRandom();

//setup cube positions
for(int i=0; i<numBoxesInX; i++){
for (int j=0; j<numBoxesInY; j++)
{
p[i][j].r = ofRandom(0,255);
p[i][j].g = ofRandom(0,255);
p[i][j].b = ofRandom(0,255);

p[i][j].x = i*(cubeSize+offset)+(ofGetWidth()/2-cubeSize*(numBoxesInX*0.5));
p[i][j].y = j*(cubeSize+offset)+(ofGetHeight()/2-cubeSize*(numBoxesInY*0.5));
p[i][j].z = 0.0f;
}
}

}

//--------------------------------------------------------------
void testApp::update(){
}

//--------------------------------------------------------------
void testApp::draw(){

for(int i=0; i<numBoxesInX; i++){
for (int j=0; j<numBoxesInY; j++)
{
ofSetColor(p[i][j].r, p[i][j].g, p[i][j].b);
glPushMatrix();
glTranslatef(p[i][j].x,p[i][j].y,p[i][j].z);
glutSolidCube(cubeSize);
glPopMatrix();
}
};

}

``````

Thanks again to nardove for the help!
Beatriz :mrgreen: