void Scene::parseLight(char * buffer){ LITE *pl; char *pamb, *pdiff, *pspec, *ppos, *pdir, *pang; my_assert ((num_lights < MAX_LIGHTS), "too many lights"); pl = &my_lights[++num_lights]; strtok(buffer, "()"); pamb = strtok(NULL, "()"); strtok(NULL, "()"); pdiff = strtok(NULL, "()"); strtok(NULL, "()"); pspec = strtok(NULL, "()"); strtok(NULL, "()"); ppos = strtok(NULL, "()"); strtok(NULL, "()"); pdir = strtok(NULL, "()"); strtok(NULL, "()"); pang = strtok(NULL, "()"); parseFloats(pamb, pl->amb); parseFloats(pdiff, pl->diff); parseFloats(pspec, pl->spec); parseFloats(ppos, pl->pos); if (pdir) { parseFloats(pdir, pl->dir); pl->angle = atof(pang); //printf("angle %f\n", pl->angle); } else pl->dir[0]= pl->dir[1]= pl->dir[2] =0; printf("read light\n"); }
void Scene::parseCamera(char * buffer){ GLfloat pos[4]; GLfloat at[4]; GLfloat up[4]; char *ppos, *plook, *pup; strtok(buffer, "()"); ppos = strtok(NULL, "()"); strtok(NULL, "()"); plook = strtok(NULL, "()"); strtok(NULL, "()"); pup = strtok(NULL, "()"); strtok(NULL, "()"); parseFloats(ppos, pos); parseFloats(plook, at); parseFloats(pup, up); cam = new Camera(pos, at, up); }
void Scene::parseObject(char * buffer){ Shape * curr; char *pshape, *pshine, *pemi, *pamb, *pdiff, *pspec, *ptranslate, *pscale, *protate; pshape = strtok(buffer, " "); int shapeNum = atoi(pshape); //printf("pshape is %s\n",pshape); switch (shapeNum){ case 1: //cube curr = new Cube(GL_POLYGON, 1); break; case 2: curr = new House(GL_POLYGON); break; case 3: curr = new Sphere(1, 2, 3, GL_POLYGON); break; case 4: curr = new Cylinder(1,1,40,40, GL_POLYGON); break; case 5: curr = new Cone(1,1,40,40, GL_POLYGON); break; case 6: curr = new Torus(.2,1.2,40,40, GL_POLYGON); break; default: // curr = new Cube(GL_POLYGON, .5); break; } ptranslate = strtok(NULL, "()"); strtok(NULL, "()"); pscale = strtok(NULL, "()"); strtok(NULL, "()"); protate = strtok(NULL, "()"); strtok(NULL, "()"); pshine = strtok(NULL, "()");strtok(NULL, "()"); //printf("pshine is %s\n",pshine); pemi = strtok(NULL, "()"); strtok(NULL, "()"); pamb = strtok(NULL, "()"); strtok(NULL, "()"); pdiff = strtok(NULL, "()"); strtok(NULL, "()"); pspec = strtok(NULL, "()"); strtok(NULL, "()"); curr->shine = atof(pshine); parseFloats(ptranslate, curr->trans); parseFloats(pscale, curr->scal); parseFloats(protate, curr->rot); parseFloats(pemi, curr->emi); parseFloats(pamb, curr->amb); parseFloats(pdiff, curr->diff); parseFloats(pspec, curr->spec); curr->scale(curr->scal[0], curr->scal[1], curr->scal[2]); curr->rotate(curr->rot[0], 1, 0 , 0); curr->rotate(curr->rot[1], 0, 1 , 0); curr->rotate(curr->rot[2], 0, 0 , 1); curr->translate(curr->trans[0], curr->trans[1],curr->trans[2]); // use switch to create your objects, cube given as example printf("read object\n"); shapes.push_back(curr); }
bool CMD_set_translate( u32 n_args, char **args ) { Transformable *t; f32 f[3]; if (!Command::checkArgCount(4, n_args, args)) return false; if (!(t = fetchTransformable(args[0]))) return false; if (!parseFloats(3, f, &args[1])) return false; t->setTranslate(f[0], f[1], f[2]); return true; }