Exemplo n.º 1
0
Tile::Tile(int tileID, int numSides, std::vector<Vector3f> verts, std::vector<int> neigh)
: tileID(tileID)
, numSides(numSides)
, vertList(verts)
, neighbors(neigh)
{
	setType(Tile_t);
	// Set color to GREEN
	color = { 0.0, 1.0, 0.0, 1.0 };

	Vector3f normal;
	std::vector<Vector3f> upper(verts.begin(), verts.end() - numSides);
	std::vector<Vector3f> lower(verts.begin() + numSides, verts.end());
	
	// Push the top surface normal on first
	normal = calcSurfaceNormal(upper);
	normals.push_back(normal);

	// Then push the bottom surface normal
	std::reverse(lower.begin(), lower.end());
	normal = calcSurfaceNormal(lower);
	std::reverse(lower.begin(), lower.end());
	normals.push_back(normal);

	// Then push the normals of the sides in
	for (int i = 0; i < numSides; i++) {
		std::vector<Vector3f> side;

		Vector3f vec = upper[i];
		side.push_back(vec);

		vec = lower[i];
		side.push_back(vec);

		vec = lower[(i + 1) % lower.size()];
		side.push_back(vec);

		vec = upper[(i + 1) % upper.size()];
		side.push_back(vec);

		normal = calcSurfaceNormal(side);
		normals.push_back(normal);
	}

	for (int i = 0; i < neigh.size(); i++){
		//Boundary bound(verts[i], verts[(i + 1) % verts.size()], .2, neigh[i] != 0);
		addChild(new Boundary(upper[i], upper[(i + 1) % upper.size()], 0.2f, neigh[i] == 0));
	}
}
Exemplo n.º 2
0
Arquivo: a.c Projeto: mlang03/School
//Calculates surface normals for each triangle.
void calcSurfaceNormals(){
    int i,j;
    for (i = 0; i < height - 1; i++){
        for (j = 0; j < width - 1; j++){
            vec3f v1 = {i*hscale, heightmap[i][j]*scale, j*hscale};
            vec3f v2 = {i*hscale,heightmap[i][j+1]*scale,(j+1)*hscale};
            vec3f v3 = {(i+1)*hscale,heightmap[i+1][j]*scale,j*hscale};
            vec3f v4 = {(i+1)*hscale,heightmap[i+1][j+1]*scale,(j+1)*hscale};
            
            
            vec3f norm = calcSurfaceNormal(v1,v2,v3);
            upperN[i][j].x = norm.x;
            upperN[i][j].y = norm.y;
            upperN[i][j].z = norm.z;
            
            vec3f norm2 = calcSurfaceNormal(v2,v4,v3);
            lowerN[i][j].x = norm2.x;
            lowerN[i][j].y = norm2.y;
            lowerN[i][j].z = norm2.z;
        }
    }
}