# Texture a grid

A new turn to an older post. I wish to achieve the same thing in Processing with OpenGL as here: http://processing.org/learning/3d/texturedsphere.html

Only instead of an sphere, I wish to texture a plane (XY, a grid of 800 times 800). It shouldn’t be too difficult, but I’ve spend some hours today staring at the code… I intend to use an image as a heightmap to move vertices along the z-axis later. But first the grid and the texturing should be right.

Please take a look at the code and tell me what to do. I just get a gray screen. How should I change to code to get a textured grid?

import processing.opengl.*;

PImage texmap;

float rotationX = 0;
float rotationY = 0;
float velocityX = 0;
float velocityY = 0;
float sizeSquare = 800;
float pushBack = 0;
float verX;
float verY;

float[] positionX,positionY,positionZ;
float vertexX[];
float vertexY[];

void setup()
{
size(1280, 800, OPENGL);
}

void draw()
{
background(100);
renderGrid();
}

void renderGrid()
{
pushMatrix();
translate((width/2.0 - 100), height/2.0, pushBack);
pushMatrix();
noFill();
stroke(255,200);
strokeWeight(2);
smooth();
popMatrix();
lights();
pushMatrix();
fill(200);
noStroke();
textureMode(IMAGE);
texturedGrid(texmap);
popMatrix();
popMatrix();
rotationX += velocityX;
rotationY += velocityY;
velocityX *= 0.95;
velocityY *= 0.95;

// Implements mouse control (interaction will be inverse when sphere is upside down)
if(mousePressed){
velocityX += (mouseY-pmouseY) * 0.01;
velocityY -= (mouseX-pmouseX) * 0.01;
}
}

{
// Computing vertexlist; vertexlist starts at south pole
//int currVert = 0;

// Re-init arrays to store vertices
positionX = new float[vertCount];
positionY = new float[vertCount];
positionZ = new float[vertCount];

for (int i = 1; i < QUAD_LENGTH; i++) {
for (int j = 0; j < QUAD_LENGTH; j++) {
ellipse(verX, verY, 5, 5);
vertex(positionX[currVert], positionY[currVert], 0);
positionZ[currVert++] = 0;
}
}
}

void texturedGrid(PImage t)
{
int v1,v11,v2;
float u=0,v=iv;

int voff = 0;
for(int i = 2; i < QUAD_LENGTH; i++) {
v1=v11=voff;
v2=voff;
u=0;
beginShape(TRIANGLE_STRIP);
texture(t);
for (int j = 0; j < QUAD_LENGTH; j++) {
vertex(positionX[v1], positionY[v1], positionZ[v1], u, v);
vertex(positionX[v2], positionY[v2], positionZ[v2], u, v+iv);
u+=iu;
}
// Close
v1=v11;
v2=voff;
vertex(positionX[v1], positionY[v1], positionZ[v1], u, v);
vertex(positionX[v2], positionY[v2], positionZ[v2], u, v+iv);
endShape();
v+=iv;
}
u=0;
}