/* ==================== BuildNormal ==================== */ void G3DMExport::BuildNormal( MESH& mesh ) { // clear the normals currently in there for(std::vector<VTNIS>::iterator it = mesh.vertexes.begin(); it != mesh.vertexes.end(); it++) { it->normal = Point3::Origin; } // build the normals for(std::vector<TRIANGLE>::iterator it = mesh.triangles.begin(); it != mesh.triangles.end(); it++) { TRIANGLE& tri = *it; Point3 v1 = mesh.vertexes[tri.index1[1]].pos - mesh.vertexes[tri.index1[0]].pos; Point3 v2 = mesh.vertexes[tri.index1[2]].pos - mesh.vertexes[tri.index1[0]].pos; Point3 normal = v1^v2; normal = Normalize(normal); v1 = mesh.vertexes[tri.index1[1]].pos - mesh.vertexes[tri.index1[0]].pos; v2 = mesh.vertexes[tri.index1[2]].pos - mesh.vertexes[tri.index1[0]].pos; AddNormal( mesh, normal * NormalAngle(v1, v2), tri.index0[0], tri.smoothing, tri.index1[0] ); v1 = mesh.vertexes[tri.index1[2]].pos - mesh.vertexes[tri.index1[1]].pos; v2 = mesh.vertexes[tri.index1[0]].pos - mesh.vertexes[tri.index1[1]].pos; AddNormal( mesh, normal * NormalAngle(v1, v2), tri.index0[1], tri.smoothing, tri.index1[1] ); v1 = mesh.vertexes[tri.index1[0]].pos - mesh.vertexes[tri.index1[2]].pos; v2 = mesh.vertexes[tri.index1[1]].pos - mesh.vertexes[tri.index1[2]].pos; AddNormal( mesh, normal * NormalAngle(v1, v2), tri.index0[2], tri.smoothing, tri.index1[2] ); } // normalize all of the vertexes for(std::vector<VTNIS>::iterator it = mesh.vertexes.begin(); it != mesh.vertexes.end(); it++) { it->normal = Normalize(it->normal); } }
int BulletCreate(char *id_str, FVector2 *pos, FVector2 *vct, float r, u_int target, sParam *param, int level, float powofs) { char id_param[ID_MAXLEN]; sParam *objParam = ObjGetSetupParam(id_str); ASSERT(objParam); int maxlevel = ParamGetReal(objParam, "maxlevel"); if(level > maxlevel) level = maxlevel; for(int i = 1; ; i += 1) { sprintf(id_param, "%d.shot_pos%d", level, i); if(!ParamIsExists(objParam, id_param)) break; FVector3 *p = ParamGetFVec3(objParam, id_param); FVector2 v; v.x = p->x; v.y = p->y; MathRotateXY(&v, r); AddV2d(&v, &v, pos); StkMakeFrame(); StkPushP(param); // 0 StkPushP(&v); // 1 StkPushP(vct); // 2 StkPushF(NormalAngle(r + ANG2RAD(p->z))); // 3 StkPushF(powofs); // 4 ObjCreate(id_str, OBJ_SHOT, objProc, level, target); StkDelFrame(); } sprintf(id_param, "%d.interval", level); return ParamGetReal(objParam, id_param); }