Hello Guest

Weird tiled effect with calculating Normals, TRIANGLE_STRIPS

  • 2 Replies
  • 4325 Views
I've made a height map program and i'm trying to calculate normals for each vertex. I've tried searching for a solution all morning but i can not figure out the error in my code. I am getting a weird tiled effect as you can see in the picture below.. I'm using triangle strips to render a 400 by 400 vertice plane. I have set all y values to 0 for this post. If anyone could help, and point out whats wrong, that would be awesome

http://imgur.com/ICeksXX

Code: [Select]
public void calculateNormals() {

for (int n = 0; n < 400*200; n++) {
float x1 = vBuffer.get(n + 0);
float y1 = vBuffer.get(n + 1);
float z1 = vBuffer.get(n + 2);

float x2 = vBuffer.get(n + 3);
float y2 = vBuffer.get(n + 4);
float z2 = vBuffer.get(n + 5);

float x3 = vBuffer.get(n + 6);
float y3 = vBuffer.get(n + 7);
float z3 = vBuffer.get(n + 8);

float Ux = (x2 - x1);
float Uy = (y2 - y1);
float Uz = (z2 - z1);

float Vx = (x3 - x1);
float Vy = (y3 - y1);
float Vz = (z3 - z1);

float Nx = Uy*Vz - Uz*Vy;
float Ny = Uz*Vx - Ux*Vz;
float Nz = Ux*Vy - Uy*Vx;

float normLength = (float)Math.sqrt(Math.pow(Nx,2) + Math.pow(Ny,2) + Math.pow(Nz,2));
if(normLength == 0){
Nx = 0;
Ny = 0;
Nz = 0;
}else{
Nx /= normLength;
    Ny /= normLength;
    Nz /= normLength;
}

if ((n %2)==0){

nBuffer.put(Nx).put(Ny).put(Nz);

}
else{

nBuffer.put(-Nx).put(-Ny).put(-Nz);

}


}

this.nBuffer.flip();
}

Re: Weird tiled effect with calculating Normals, TRIANGLE_STRIPS
« Reply #1 on: June 03, 2013, 17:22:19 »
the n++ in your loop looks suspicious. It looks like it should be += 3.

P.S. Math.pow(Nx,2) is a lot slower then Nx * Nx.
Programmers will, one day, rule the world... and the world won't notice until its too late.Just testing the marquee option ;D

*

Offline quew8

  • *****
  • 569
  • Because Square Eyes Look More Real
Re: Weird tiled effect with calculating Normals, TRIANGLE_STRIPS
« Reply #2 on: June 03, 2013, 21:16:05 »
For the record it is a pretty cool effect. I would just keep it as bugs influencing design style. If you want rid of it, I second @Fool Running.

For the record I would also recommend using LWJGL's vector classes or writing your own, it makes higher level maths so much easier. (I know this isn't really high level but...)