|
![](/i/fill.gif) |
I attempted a calculation of normal vectors for this mesh2 object.
--------------------------------------------
camera {location <0,0,-5> look_at 0}
light_source {<-10,20,-50>, rgb 1}
#declare GridSize = 7;
#declare PointCount = pow(GridSize,2);
#declare NumberOfFaces = 2*pow(GridSize-1,2);
#declare use_normal_vectors = 1;
#declare XCoord =
array[PointCount] {
-1.5, -1.0, -0.5, 0, 0.5, 1.0, 1.5,
-1.5, -1.0, -0.5, 0, 0.5, 1.0, 1.5,
-1.5, -1.0, -0.5, 0, 0.5, 1.0, 1.5,
-1.5, -1.0, -0.5, 0, 0.5, 1.0, 1.5,
-1.5, -1.0, -0.5, 0, 0.5, 1.0, 1.5,
-1.5, -1.0, -0.5, 0, 0.5, 1.0, 1.5,
-1.5, -1.0, -0.5, 0, 0.5, 1.0, 1.5
}
#declare YCoord =
array[PointCount] {
-1.5, -1.5, -1.5, -1.5, -1.5, -1.5, -1.5,
-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0,
-0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5,
0, 0, 0, 0, 0, 0 , 0,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5
}
#declare ZCoord =
array[PointCount] {
0.7781, 0.9975, 0.6816, 0, -0.6816, -0.9975, -0.7781,
0.9975, 0.8415, 0.4794, 0, -0.4794, -0.8415, -0.9975,
0.6816, 0.4794, 0.2474, 0, -0.2474, -0.4794, -0.6816,
0, 0, 0, 0, 0, 0, 0,
-0.6816, -0.4794, -0.2474, 0, 0.2474, 0.4794, 0.6816,
-0.9975, -0.8415, -0.4794, 0, 0.4794, 0.8415, 0.9975,
-0.7781, -0.9975, -0.6816, 0, 0.6816, 0.9975, 0.7781
}
mesh2 {
vertex_vectors {
PointCount,
#local I = 0;
#while (I < PointCount)
#if (I != PointCount-1)
<XCoord[I],YCoord[I],ZCoord[I]>,
#else
<XCoord[I],YCoord[I],ZCoord[I]>
#end
#local I = I + 1;
#end
}
#if (use_normal_vectors)
normal_vectors {
PointCount,
#local I = 0;
#while (I < GridSize)
#local I1 = ((I = 0) ? 0 : I - 1);
#local I2 = ((I = GridSize - 1) ? I : I + 1);
#local J = 0;
#while (J < GridSize)
#local J1 = ((J = 0) ? 0 : J - 1);
#local J2 = ((J = GridSize - 1) ? J : J + 1);
#local dx = XCoord[I2 + J * GridSize] - XCoord[I1 + J * GridSize];
#local dy = YCoord[I + J2 * GridSize] - YCoord[I + J1 * GridSize];
#local dzx = ZCoord[I2 + J * GridSize] - ZCoord[I1 + J * GridSize];
#local dzy = ZCoord[I + J2 * GridSize] - ZCoord[I + J1 * GridSize];
#local vnorm = vnormalize( vcross(<dx, 0, dzx>, <0, dy, dzy>) );
#if ((J < GridSize - 1) | (I < GridSize - 1))
vnorm,
#else
vnorm
#end
#local J = J + 1;
#end
#local I = I + 1;
#end
}
#end
face_indices {
NumberOfFaces
#local I = 0;
#while (I<GridSize-1)
#local J = 0;
#while (J<GridSize-1)
#local K = I*(GridSize)+J;
<K,K+1,K+GridSize>,
#if (K!=NumberOfFaces-1)
<K+1,K+GridSize+1,K+GridSize>,
#else
<K+1,K+GridSize+1,K+GridSize>
#end
#local J = J + 1;
#end
#local I = I + 1;
#end
}
pigment {rgb 1}
}
Post a reply to this message
|
![](/i/fill.gif) |