diff --git a/include/vec.h b/include/vec.h index fe8fbe3..04e768a 100755 --- a/include/vec.h +++ b/include/vec.h @@ -21,6 +21,7 @@ Vec operator+(Vec* v); Vec operator+(Vec c); void add(Vec& a); + void sub(Vec& a); Vec operator-(Vec& v); Vec operator*(float s); Vec operator*(Vec& s); diff --git a/sources/main.cpp b/sources/main.cpp index a7fa1f3..81e9249 100755 --- a/sources/main.cpp +++ b/sources/main.cpp @@ -187,6 +187,11 @@ return 1; } + Vec viewer_zmove_pos = Vec(0.0f, 0.0f, 0.1f); + Vec viewer_zmove_neg = Vec(0.0f, 0.0f, -0.1f); + Vec viewer_xmove_pos = Vec(0.1f, 0.0f, 0.0f); + Vec viewer_xmove_neg = Vec(-0.1f, 0.0f, 0.0f); + Color black (0,0,0); Color blue (0,0,1); Color red (1,0,0); @@ -207,7 +212,7 @@ Vec* p7 = new Vec(0 ,10,10); Vec cen (5,5,5); - + Model* cube = new Model(); /* @@ -227,7 +232,7 @@ std::vector pp3; std::vector pp4; std::vector pp5; - + pp0.push_back(p0); pp0.push_back(p3); pp0.push_back(p2); @@ -264,9 +269,10 @@ cube->addFace(new Poly(pp3, blue)); cube->addFace(new Poly(pp4, yellow)); cube->addFace(new Poly(pp5, white)); - + cube->setCenter(cen); + //char* modelfile = "obj/sample.obj"; char* modelfile = "obj/untitled.obj"; //char* modelfile = "obj/teapot.obj"; @@ -275,7 +281,7 @@ //myModel->setCenter(cen); myModel->vardump(""); - + // Prepare configuration: int bitsPerColor = 8; if (WINDOW_COLORDEPTH == 16) { @@ -344,9 +350,7 @@ float deltaz = 0.0f; float deltacolor = 0.0f; - float viewer_xpos = 0.0f; - float viewer_ypos = 0.0f; - float viewer_zpos = -50.0f; + Vec viewer = Vec(0.0f, 0.0f, -50.0f); while (!done) { @@ -365,7 +369,8 @@ // Place the viewer 50 units backward: glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - glTranslatef(viewer_xpos, viewer_ypos, viewer_zpos); + glTranslatef(viewer.x(), viewer.y(), viewer.z()); + viewer.vardump(" "); // Draw a rotating triangle: glRotatef(deltay, 0.0f, 1.0f, 0.0f); // Rotation around the Y axis @@ -377,8 +382,8 @@ //myModel->draw(); - light0.draw(); - light0.trace(); + //light0.draw(); + //light0.trace(); //light1.draw(); //light1.trace(); @@ -444,10 +449,10 @@ if (keystate[SDLK_DOWN]) deltaz += 2.0f; // move viewer - if (keystate[SDLK_w]) viewer_zpos -= 0.1f; - if (keystate[SDLK_s]) viewer_zpos += 0.1f; - if (keystate[SDLK_a]) viewer_xpos -= 0.1f; - if (keystate[SDLK_d]) viewer_xpos += 0.1f; + if (keystate[SDLK_w]) viewer.add(viewer_zmove_neg); + if (keystate[SDLK_s]) viewer.add(viewer_zmove_pos); + if (keystate[SDLK_a]) viewer.add(viewer_xmove_pos); + if (keystate[SDLK_d]) viewer.add(viewer_xmove_neg); if (keystate[SDLK_SPACE]) { deltacolor += 0.01f; diff --git a/sources/model.cpp b/sources/model.cpp index 5345a35..799a335 100755 --- a/sources/model.cpp +++ b/sources/model.cpp @@ -22,11 +22,11 @@ delete rotation; } -void Model::setCenter(Vec& c) { +void Model::setCenter(Vec& c) { position = c.clone(); for (std::vector::size_type i = 0 ; i < faces.size(); i++ ) { - faces.at(i)->setCenter(c); + faces.at(i)->setCenter(c); } } diff --git a/sources/vec.cpp b/sources/vec.cpp index 2874b30..b54865c 100755 --- a/sources/vec.cpp +++ b/sources/vec.cpp @@ -49,6 +49,12 @@ c[2] += a.z(); } +void Vec::sub(Vec& a) { + c[0] -= a.x(); + c[1] -= a.y(); + c[2] -= a.z(); +} + Vec Vec::operator-(Vec& v) { return Vec(x() - v.x(), y() - v.y(), z() - v.z()); }