void Rubik::DrawRubik(GLfloat rot, Cube::Layer primary,int iterr,vector<Cube::Layer> alllayers,vector<int> allrotlayers){ int injuraxei = -1; if(primary == Cube::L_L1 || primary == Cube::L_L2 || primary == Cube::L_L3){ injuraxei = 1; } else if(primary == Cube::L_D1 || primary == Cube::L_D2 || primary == Cube::L_D3){ injuraxei = 2; } else if(primary == Cube::L_F1 || primary == Cube::L_F2 || primary == Cube::L_F3){ injuraxei = 3; } vector<Cube*> primare ; int k = 0; for(list<Cube*>::iterator it = cuburi.begin(); it!= cuburi.end(); it++){ Cube * c = (*it); glPushMatrix(); if(c->layer1 == primary || c->layer2 == primary || c->layer3 == primary){ primare.push_back(c); }else glTranslatef(c->trax + size*0.1,c->tray + size*0.1,c->traz+ size*0.1); c->Draw(size,0); glPopMatrix(); } if(injuraxei == 1) glRotatef(rot,1.0f,0.0f,0.0f); else if(injuraxei == 2) glRotatef(rot,0.0f,1.0f,0.0f); else if(injuraxei == 3) glRotatef(rot,0.0f,0.0f,1.0f); for(vector<Cube*>::iterator it = primare.begin(); it!= primare.end(); it++){ Cube * c = (*it); glPushMatrix(); glTranslatef(c->trax,c->tray,c->traz); c->Draw(size,1); glPopMatrix(); } }
void DisplayCube() { Window * window = Window::FindCurrentWindow(windows); if (window->handle == BAD_GL_VALUE) return; glViewport(0, 0, window->size.x, window->size.y); vec4 crimson(0.6f, 0.0f, 0.0f, 1.0f); vec3 ambient = vec3(0.0f, 0.0f, 0.0f); vec3 specular = vec3(0.6f, 0.0f, 0.0f); vec3 diffuse = vec3(0.0f, 0.0f, 0.8f); glClearColor(crimson.r, crimson.g, crimson.b, crimson.a); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glEnable(GL_DEPTH_TEST); mat4 model_matrix = rotate(mat4(), radians(window->LocalTime() * 30.0f), vec3(0.1f, 1.0f, 0.1f)); model_matrix = rotate(model_matrix, radians(5.0f), vec3(1.0f, 1.0f, 1.0f)); model_matrix = scale(model_matrix, vec3(0.7f, 0.7f, 0.7f)); mat4 view_matrix = lookAt(vec3(0.0f, 0.0f, 5.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 1.0f, 0.0f)); mat4 projection_matrix = perspective(radians(window->fovy), window->aspect, window->near_distance, window->far_distance); phong_shader.Use(model_matrix, view_matrix, projection_matrix); phong_shader.SetMaterial(diffuse, specular, 64.0f, ambient); phong_shader.SetLightPosition(vec3(0.0f, 0.0f, 1000.0f)); phong_shader.SelectSubroutine(PhongShader::SHADER_TOY_1); phong_shader.SetGlobalTime(Window::CurrentTime()); phong_shader.EnableTexture(textures[3] , 0); cube.Draw(false); phong_shader.UnUse(); if (window->draw_normals) { constant_shader.Use(model_matrix , view_matrix , projection_matrix); constant_shader.SetMaterial(diffuse , specular , 64.0f , vec3(1.0f , 1.0f , 1.0f)); cube.Draw(true); constant_shader.UnUse(); } glutSwapBuffers(); cube.UpdateValues(TestUpdateCube, window->LocalTime(), nullptr); }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR, int ) { HANDLE ghInstance; WNDCLASS wcex; HWND hwnd; TCHAR WindowTitle[] = _T("Cube"); TCHAR WindowClassName[] = _T("AppClass"); if (!hPrevInstance) { wcex.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW; wcex.lpfnWndProc = WndProc; wcex.lpszClassName = WindowClassName; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = 0; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; if (!RegisterClass(&wcex)) return 0; } ghInstance = hInstance; if (NULL==(hwnd = CreateWindow(WindowClassName, WindowTitle, WS_CAPTION | WS_SYSMENU, CW_USEDEFAULT, 0, WIDTH, HEIGHT, NULL, NULL, hInstance, NULL))) { return 0; } if (SUCCEEDED(cube.device.InitialDirect3D(hwnd))) { if (SUCCEEDED(cube.InitialObject())) { if (SUCCEEDED(cube.device.shader.InitialShader())) { ShowWindow(hwnd, SW_SHOWDEFAULT); UpdateWindow(hwnd); MSG msg; ZeroMemory(&msg, sizeof(msg)); while (WM_QUIT!=msg.message) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { cube.Draw(); } } } } } return 0; }
void World::Draw(void) { //std::cout << "Drawing Terrain at " << posx << " / " << posy << " / " << posz << " / "; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer glLoadIdentity (); // Reset The Modelview Matrix // --- Go to Cam Pos --- glRotatef (angle.x, 1.0f, 0.0f, 0.0f); // Rotate On The X-Axis By angle glRotatef (angle.y, 0.0f, 1.0f, 0.0f); // Rotate On The Y-Axis By angle glRotatef (angle.z, 0.0f, 0.0f, 1.0f); // Rotate On The Z-Axis By angle glTranslatef (-this->pos.x, -this->pos.y, -this->pos.z); // Translate to Cam Pos static const float max = 100.0f; static const float min = 100.0f; static Cube mycube; static float speed = 0.10f; static float pos[4] = {(float)terrain[0]->GetWidth()*2, max, (float)terrain[0]->GetHeight()*2, 1.0f}; static float amb[4] = {0.01f, 0.01f, 0.01f, 1.0f}; static float dif[4] = {0.5f, 0.5f, 0.5f, 1.0f}; static float spec[4]= {1.0f, 1.0f, 1.0f, 1.0f}; GL_SetLight(pos, amb, dif, spec); mycube.Create(pos[0],pos[1],pos[2],1.0f); pos[1]+=speed; if(pos[1] >= max){ speed = -speed; pos[1]=max; } else if(pos[1] <= min){ speed = -speed; pos[1]=min; } mycube.Draw(); DrawChildren(); if(drawright) { glPushMatrix(); glTranslatef(terrain[0]->GetWidth(), 0.0f, 0.0f); DrawChildren(); glPopMatrix(); } if(drawleft) { glPushMatrix(); glTranslatef(-(terrain[0]->GetWidth()), 0.0f, 0.0f); DrawChildren(); glPopMatrix(); } if(drawtop) { glPushMatrix(); glTranslatef(0.0f, 0.0f, -terrain[0]->GetHeight()); DrawChildren(); if(drawright) { glTranslatef(terrain[0]->GetWidth(), 0.0f, 0.0f); DrawChildren(); glTranslatef(-terrain[0]->GetWidth(), 0.0f, 0.0f); } if(drawleft) { glTranslatef(-(terrain[0]->GetWidth()), 0.0f, 0.0f); DrawChildren(); } glPopMatrix(); } if(drawbuttom) { glPushMatrix(); glTranslatef(0.0f, 0.0f, terrain[0]->GetHeight()); DrawChildren(); if(drawright) { glTranslatef(terrain[0]->GetWidth(), 0.0f, 0.0f); DrawChildren(); glTranslatef(-terrain[0]->GetWidth(), 0.0f, 0.0f); } if(drawleft) { glTranslatef(-(terrain[0]->GetWidth()), 0.0f, 0.0f); DrawChildren(); } glPopMatrix(); }/**/ glFlush (); // Flush The GL Rendering Pipeline }
void DrawScene(Window * window) { phong_shader.GLReturnedError("DrawScene() - entering"); #ifdef MOVE mat4 m = rotate(mat4() , radians(window->LocalTime() * 30.0f) , vec3(0.0f , 1.0f , 0.2f)); m = translate(m, vec3(0.0f, 11.5f * cos(window->LocalTime() * 0.5f) + 2.0f, 11.5f * sin(window->LocalTime() * 0.5f) + 2.0f)); #else mat4 m; #endif // MOVE mat4 view_matrix = lookAt(vec3(m * vec4(eye, 1.0f)), cop, up); mat4 model_matrix; mat4 projection_matrix = perspective(radians(window->fovy), window->aspect, window->near_distance, window->far_distance); vec3 z_axis = vec3(0.0f, 0.0f, 1.0f); vec3 y_axis = vec3(0.0f, 1.0f, 0.0f); vec3 ambient = vec3(0.1f, 0.1f, 0.1f); vec3 specular = vec3(1.0f, 1.0f, 1.0f); float c_offset = radians(45.0f); glViewport(0, 0, window->size.x, window->size.y); const int count_of_shapes = 4; for (unsigned int i = 0; i < instances.size(); i++) { model_matrix = translate(mat4(), instances[i].position); model_matrix = rotate(model_matrix, radians(window->LocalTime() * instances[i].rate) + instances[i].offset, y_axis); if (i % count_of_shapes == 3) model_matrix = scale(model_matrix, vec3(0.25f, 0.25f, 0.25f)); phong_shader.Use(model_matrix, view_matrix, projection_matrix); phong_shader.SetMaterial(instances[i].diffuse, specular, 32.0f, ambient); phong_shader.SetLightPosition(vec3(0.0f, 0.0f, 1000.0f)); switch (i % count_of_shapes) { case 0: disc1.Draw(false); break; case 1: disc3.Draw(false); break; case 2: plane2.Draw(false); break; case 3: cube.Draw(false); break; } phong_shader.UnUse(); #ifdef SHOW_NORMALS if (i == 0) { constant_shader.Use(model_matrix, view_matrix, projection_matrix); constant_shader.SetMaterial(vec3(0.0f, 0.0f, 0.8f), specular, 128.0f, vec3(1.0f, 0.0f, 0.0f)); disc1.Draw(true); constant_shader.UnUse(); } #endif } model_matrix = mat4(); mat4 mz = model_matrix; model_matrix = scale(model_matrix, vec3(0.5f, 0.5f, 16.0f)); phong_shader.Use(model_matrix, view_matrix, projection_matrix); phong_shader.SetMaterial(vec3(0.0f, 0.0f, 0.8f), specular, 128.0f, ambient); phong_shader.SetLightPosition(vec3(0.0f, 1000.0f, 0.0f)); cylinder1.Draw(false); phong_shader.UnUse(); #ifdef SHOW_NORMALS constant_shader.Use(model_matrix, view_matrix, projection_matrix); constant_shader.SetMaterial(vec3(0.0f, 0.0f, 0.8f), specular, 128.0f, vec3(1.0f, 1.0f, 1.0f)); cylinder.Draw(true); constant_shader.UnUse(); #endif model_matrix = rotate(mz, radians(90.0f), y_axis); model_matrix = scale(model_matrix, vec3(0.5f, 0.5f, 16.0f)); phong_shader.Use(model_matrix, view_matrix, projection_matrix); phong_shader.SetMaterial(vec3(1.0f, 0.0f, 0.0f), specular, 128.0f, ambient); phong_shader.SetLightPosition(vec3(0.0f, 1000.0f, 0.0f)); cylinder1.Draw(false); phong_shader.UnUse(); model_matrix = rotate(mz, radians(-90.0f), vec3(1.0f, 0.0f, 0.0f)); model_matrix = scale(model_matrix, vec3(0.5f, 0.5f, 16.0f)); phong_shader.Use(model_matrix, view_matrix, projection_matrix); phong_shader.SetMaterial(vec3(0.0f, 1.0f, 0.0f), specular, 128.0f, ambient); phong_shader.SetLightPosition(vec3(0.0f, 1000.0f, 0.0f)); cylinder1.Draw(false); phong_shader.UnUse(); cylinder1.UpdateValues(TestUpdate, window->LocalTime(), nullptr); }