Model3D: new static Helpers computeNormals(),v3aToArray()
parent
d99356ef00
commit
ccf3625302
|
@ -112,44 +112,16 @@ namespace org.niclasundharald.engine.graphics {
|
|||
GL.EnableVertexAttribArray(1);
|
||||
}
|
||||
|
||||
if (normals != null){
|
||||
float[] fn = new float[ normals.Length * 3];
|
||||
|
||||
for (int n=0;n<normals.Length;n++){
|
||||
fn[(n * 3) ] = normals[n].X;
|
||||
fn[(n * 3) + 1] = normals[n].Y;
|
||||
fn[(n * 3) + 2] = normals[n].Z;
|
||||
}
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, nbo);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, 3 * fn.Length, fn, BufferUsageHint.StaticDraw);
|
||||
|
||||
GL.EnableVertexAttribArray(2);
|
||||
} else {
|
||||
float[] fn = new float[fv.Length];
|
||||
|
||||
for (int n=0;n<vertexes.Length;n+=3){
|
||||
Vector3 normal = Vector3.Cross( vertexes[n+1] - vertexes[n], vertexes[n+2] - vertexes[n] );
|
||||
normal.Normalize();
|
||||
fn[(n * 3) ] = normal.X;
|
||||
fn[(n * 3) + 1] = normal.Y;
|
||||
fn[(n * 3) + 2] = normal.Z;
|
||||
fn[(n * 3) + 3] = normal.X;
|
||||
fn[(n * 3) + 4] = normal.Y;
|
||||
fn[(n * 3) + 5] = normal.Z;
|
||||
fn[(n * 3) + 6] = normal.X;
|
||||
fn[(n * 3) + 7] = normal.Y;
|
||||
fn[(n * 3) + 8] = normal.Z;
|
||||
}
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, nbo);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, 3 * fn.Length, fn, BufferUsageHint.StaticDraw);
|
||||
|
||||
GL.EnableVertexAttribArray(2);
|
||||
if (normals == null){
|
||||
normals = computeNormals(vertexes);
|
||||
}
|
||||
|
||||
float[] fn = v3aToArray(normals);
|
||||
|
||||
GL.BindBuffer(BufferTarget.ArrayBuffer, nbo);
|
||||
GL.BufferData(BufferTarget.ArrayBuffer, 3 * fn.Length, fn, BufferUsageHint.StaticDraw);
|
||||
|
||||
GL.EnableVertexAttribArray(2);
|
||||
}
|
||||
|
||||
public virtual void draw(){
|
||||
|
@ -166,6 +138,31 @@ namespace org.niclasundharald.engine.graphics {
|
|||
vertexes[(3 * n)+2] = c;
|
||||
}
|
||||
|
||||
public static Vector3[] computeNormals(Vector3[] vertexes){
|
||||
Vector3[] normals = new Vector3[ vertexes.Length ];
|
||||
|
||||
for (int n=0;n<vertexes.Length;n+=3){
|
||||
Vector3 normal = Vector3.Cross( vertexes[n+1] - vertexes[n], vertexes[n+2] - vertexes[n] );
|
||||
normal.Normalize();
|
||||
normals[(n) ] = normal;
|
||||
normals[(n) + 1] = normal;
|
||||
normals[(n) + 2] = normal;
|
||||
}
|
||||
|
||||
return normals;
|
||||
}
|
||||
|
||||
public static float[] v3aToArray(Vector3[] v3a){
|
||||
float[] a = new float[ v3a.Length * 3];
|
||||
|
||||
for (int n=0;n<v3a.Length;n++){
|
||||
a[ (3 * n) ] = v3a[n].X;
|
||||
a[ (3 * n) + 1] = v3a[n].Y;
|
||||
a[ (3 * n) + 2] = v3a[n].Z;
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue