void CMesh::generateSkydome(int Np) { // Ten kod wstawiamy do cmesh.cpp // // Do klasy CMesh w cmesh.h należy dodać definicję : // void generateSkydome(int Np); // // W funkcji CMesh::loadAllMeshes() należy wczytać tę siatkę : /* mesh = new CMesh; mesh->generateSkydome(36); m_meshes["skydome"] = mesh;*/ // // W funkcji TextureManager::init() należy wczytać teksturę nieba : // m_textures["skydome"] = new QOpenGLTexture(QImage("resources/skydome.png")); // // W funkcji GLWidget::paintGL() renderujemy obiekt (ten kod wstawiamy przed "m_program->release();" : /* CMesh* skydomeMesh = CMesh::m_meshes["skydome"]; m_lights[0].ambient = QVector3D(2.0f, 2.0f, 2.0f); setLights(); m_program->setUniformValue(m_materialLoc.ambient, QVector3D(1.0f, 1.0f, 1.0f)); m_program->setUniformValue(m_materialLoc.diffuse, QVector3D(0.0f, 0.0f, 0.0f)); m_program->setUniformValue(m_materialLoc.specular, QVector3D(0.0f, 0.0f, 0.0f)); m_program->setUniformValue(m_materialLoc.shininess, 0.0f); m_program->setUniformValue(m_hasTextureLoc, 1); TextureManager::getTexture("skydome")->bind(); worldMatrixStack.push(m_world); m_world.translate(m_player.position); m_world.rotate(0, 1, 0, 0); m_world.rotate(timer.elapsed() * 0.05f, 0, 1, 0); m_world.rotate(0, 0, 0, 1); m_world.scale(10.0f); setTransforms(); skydomeMesh->render(this); m_world = worldMatrixStack.pop();*/ for (int j = -1; j < Np / 2; ++j) { for (int i = 0; i <= Np; ++i) { float t1 = 3.14 * j / Np - 3.14 / 2; float t2 = 3.14 * (j + 1) / Np - 3.14 / 2; float p = 3.14 * 2.0f * i / Np; float tx1 = sin(t1) * cos(p); float tx2 = sin(t2) * cos(p); float tz1 = sin(t1) * sin(p); float tz2 = sin(t2) * sin(p); float ty1 = cos(t1); float ty2 = cos(t2); float tr1 = -sin(t1); float tr2 = -sin(t2); float x1 = tx1; float x2 = tx2; float z1 = tz1; float z2 = tz2; float y1 = ty1; float y2 = ty2; add(QVector3D(x2, y2, z2), QVector3D(x2, y2, z2), QVector2D(.5f + .5f * tr2 * tx2, .5f + .5f * tr2 * tz2)); add(QVector3D(x1, y1, z1), QVector3D(x1, y1, z1), QVector2D(.5f + .5f * tr1 * tx1, .5f + .5f * tr1 * tz1)); } } m_primitive = GL_TRIANGLE_STRIP; initVboAndVao(); }