bool Grid::intersect(const Ray &r, Hit &h, float tmin) { //Prepare the Material objects Vec3f diffuseColor(1, 1, 1); Vec3f specularColor(0, 0, 0); float exponent = 1; Vec3f reflectiveColor(0, 0, 0); Vec3f transparentColor(0, 0, 0); float indexOfRefraction = 1; PhongMaterial *m = new PhongMaterial(diffuseColor, specularColor, exponent, reflectiveColor, transparentColor, indexOfRefraction); //Start to do DDA MarchingInfo mi; initializeRayMarch(mi, r, tmin); bool hitSomething = false; int i, j, k; do { mi.getIndices(i, j, k); printf("The current point is:%d,%d,%d\n", i, j, k); if (mObjects[offset(i, j, k)].getNumObjects() > 0) { h.set(mi.get_tmin(), m, mi.getNormal(), r); return true; } mi.nextCell(); } while(i < mXSize && j < mYSize && k < mZSize); return false; }
/* Parse the "Materials" token */ void scene::parseMaterials() { char token[MAX_PARSER_TOKEN_LENGTH]; char texname[MAX_PARSER_TOKEN_LENGTH]; getToken(token); assert (!strcmp(token, "{")); /* Loop over each Material */ bool working=true; while (working) { getToken(token); if (!strcmp(token, "}")) { working = false; } else if (!strcmp(token, "Material")) { getToken(token); assert (!strcmp(token, "{")); texname[0] = '\0'; Vec3f diffuseColor(1,1,1); Vec3f specularColor(0,0,0); float shininess = 1; Vec3f transparentColor(0,0,0); Vec3f reflectiveColor(0,0,0); float indexOfRefraction = 1; while (1) { getToken(token); if (!strcmp(token, "textureFilename")) { getToken(token); strcpy(texname, token); } else if (!strcmp(token, "diffuseColor")) diffuseColor = readVec3f(); else if (!strcmp(token, "specularColor")) specularColor = readVec3f(); else if (!strcmp(token, "shininess")) shininess = readFloat(); else if (!strcmp(token, "transparentColor")) transparentColor = readVec3f(); else if (!strcmp(token, "reflectiveColor")) reflectiveColor = readVec3f(); else if (!strcmp(token, "indexOfRefraction")) indexOfRefraction = readFloat(); else { assert (!strcmp(token, "}")); break; } } material temp; temp.diffuseCol=diffuseColor; temp.specularCol=specularColor; temp.shininess=shininess; temp.transparentCol=transparentColor; temp.reflectiveCol=reflectiveColor; temp.refractionIndex=indexOfRefraction; if(strcmp(texname, "NULL")) temp.texture=jpeg_read(texname, NULL); else temp.texture=NULL; myMaterials.push_back(temp); } } }