int main(int argc, const char * argv[]) { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Init glfw, create a window, and init glew // Init the GLFW Window window = initWindow(); // Init the glew api initGlew(); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Create some models // coordinate system CoordSystem* cs = new CoordSystem(40.0); // create an apperance object. GLAppearance* apperance_0 = new GLAppearance("../../data/shaders/hw4_p1.vs", "../../data/shaders/hw4_p1.fs"); GLDirectLightSource light_source; light_source._lightPos = glm::vec4(00.0,20.0,20.0, 0.0); light_source._ambient_intensity = 0.2; light_source._specular_intensity = 4.5; light_source._diffuse_intensity = 1.0; light_source._attenuation_coeff = 0.0; // add the light to this apperance object apperance_0->addLightSource(light_source); GLSpotLightSource spotlight_source; spotlight_source._lightPos = glm::vec4(0.0,00.0,50.0, 1.0); spotlight_source._ambient_intensity = 0.2; spotlight_source._specular_intensity = 30.5; spotlight_source._diffuse_intensity = 8.0; spotlight_source._attenuation_coeff = 0.0002; spotlight_source._cone_direction = glm::vec3(-1.0, -1.0,-1.0); spotlight_source._cone_angle = 20.0; apperance_0->addLightSource(spotlight_source); // Create a material object GLMaterial material_0; material_0._diffuse_material = glm::vec3(0.8, 0.8, 0.0); material_0._ambient_material = glm::vec3(0.8, 0.8, 0.0); material_0._specular_material = glm::vec3(1.0, 1.0, 1.0); material_0._shininess = 12.0; material_0._transparency = 1.0; // Add the material to the apperance object apperance_0->setMaterial(material_0); //************************************************************************************************ // Add a texture GLMultiTexture* texture = new GLMultiTexture(); int texid = texture->loadAndCreateTextures("../../data/textures/texture_deathstar.bmp", "../../data/textures/texture_wolf.bmp", "../../data/textures/gradient.bmp"); //int texid = texture->loadAndCreateTexture("../../data/textures/texture_earth_128x128_a.bmp"); apperance_0->setTexture(texture); //************************************************************************************************ // Finalize the appearance object apperance_0->finalize(); // create the sphere geometry GLPlane3D* plane_0 = new GLPlane3D(0.0, 0.0, 0.0, 50.0, 50.0); plane_0->setApperance(*apperance_0); plane_0->init(); // If you want to change appearance parameters after you init the object, call the update function apperance_0->updateLightSources(); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Main render loop // Set up our green background color static const GLfloat clear_color[] = { 0.0f, 0.0f, 0.0f, 1.0f }; static const GLfloat clear_depth[] = { 1.0f, 1.0f, 1.0f, 1.0f }; // This sets the camera to a new location // the first parameter is the eye position, the second the center location, and the third the up vector. SetViewAsLookAt(glm::vec3(12.0f, 12.0f, 65.5f), glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f)); // Enable depth test // ignore this line, it allows us to keep the distance value after we proejct each object to a 2d canvas. glEnable(GL_DEPTH_TEST); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Blending // Enable blending glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // sphere->enableNormalVectorRenderer(); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Main render loop // This is our render loop. As long as our window remains open (ESC is not pressed), we'll continue to render things. while(!glfwWindowShouldClose(window)) { // Clear the entire buffer with our green color (sets the background to be green). glClearBufferfv(GL_COLOR , 0, clear_color); glClearBufferfv(GL_DEPTH , 0, clear_depth); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// This renders the objects // Set the trackball locatiom SetTrackballLocation(trackball.getRotationMatrix()); // draw the objects cs->draw(); plane_0->draw(); // change the texture appearance blend mode bool ret = texture->setTextureBlendMode(g_change_texture_blend); if(ret)apperance_0->updateTextures(); //// This renders the objects /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Swap the buffers so that what we drew will appear on the screen. glfwSwapBuffers(window); glfwPollEvents(); } delete cs; }
int main(int argc, const char * argv[]) { /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Init glfw, create a window, and init glew // Init the GLFW Window window = initWindow(); // Init the glew api initGlew(); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Create some models // coordinate system CoordSystem* cs = new CoordSystem(40.0); GLSphereSpot* sphere = new GLSphereSpot(0.0, 0.0, 0.0, 10.0, 90, 50); //GLSphereDirect* sphere = new GLSphereDirect(0.0, 0.0, 0.0, 10.0, 40, 20); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Main render loop // Set up our green background color static const GLfloat clear_color[] = { 0.0f, 0.0f, 0.0f, 1.0f }; static const GLfloat clear_depth[] = { 1.0f, 1.0f, 1.0f, 1.0f }; // This sets the camera to a new location // the first parameter is the eye position, the second the center location, and the third the up vector. SetViewAsLookAt(glm::vec3(12.0f, 12.0f, 15.5f), glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f)); // Enable depth test // ignore this line, it allows us to keep the distance value after we proejct each object to a 2d canvas. glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHT1); //sphere->enableNormalVectorRenderer(); // This is our render loop. As long as our window remains open (ESC is not pressed), we'll continue to render things. while(!glfwWindowShouldClose(window)) { // Clear the entire buffer with our green color (sets the background to be green). glClearBufferfv(GL_COLOR , 0, clear_color); glClearBufferfv(GL_DEPTH , 0, clear_depth); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// This renders the objects // Set the trackball locatiom SetTrackballLocation(trackball.getRotationMatrix()); // draw the objects cs->draw(); sphere->draw(); //// This renders the objects /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Swap the buffers so that what we drew will appear on the screen. glfwSwapBuffers(window); glfwPollEvents(); } delete cs; }