std::ostream& MatrixNec::print(std::ostream& ostrim) const { int** temp = _data; ostrim << "MatrixNec("; if (temp == nullptr || _nCol == 0 || _nRow == 0) { ostrim << "null)"; return ostrim; } for (ptrdiff_t i = 0; i < _nRow; i++) { if (i > 0) { ostrim << " "; } ostrim << getIndexArray(i, 0); for (ptrdiff_t j = 1; j < _nCol; j++) { ostrim << ", " << getIndexArray(i, j); } if (i != _nRow - 1) { ostrim << "\n"; } } ostrim << ")"; return ostrim; }
void Scene3D::initializeGL() { // цвет для очистки буфера изображения - фон окна qglClearColor(Qt::white); glEnable(GL_DEPTH_TEST); // устанавливает режим проверки глубины пикселей glShadeModel(GL_FLAT); // отключает режим сглаживания цветов getVertexArray(); getColorArray(); getIndexArray(); glEnableClientState(GL_VERTEX_ARRAY); // активизация массива вершин glEnableClientState(GL_COLOR_ARRAY); // активизация массива цветов вершин }
void Scene3D::set_figure(figure* f) { if (f->get_base_type_to_QStr() != INCORECT && f->get_base_type_to_QStr() != UNCONVEX && (f->get_figure_type_to_QStr() == PIRAMID || f->get_figure_type_to_QStr() ==PRISME) && f->get_hight_to_int() && f->get_base_size() > 2) cur_figure = f; else return; qglClearColor(back_grount_color); getVertexArray(); getColorArray(); getIndexArray(); updateGL(); }
static int echoDeclareVtab( echo_vtab *pVtab, sqlite3 *db ){ int rc = SQLITE_OK; if( pVtab->zTableName ){ sqlite3_stmt *pStmt = 0; rc = sqlite3_prepare(db, "SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?", -1, &pStmt, 0); if( rc==SQLITE_OK ){ sqlite3_bind_text(pStmt, 1, pVtab->zTableName, -1, 0); if( sqlite3_step(pStmt)==SQLITE_ROW ){ int rc2; const char *zCreateTable = (const char *)sqlite3_column_text(pStmt, 0); rc = sqlite3_declare_vtab(db, zCreateTable); rc2 = sqlite3_finalize(pStmt); if( rc==SQLITE_OK ){ rc = rc2; } } else { rc = sqlite3_finalize(pStmt); if( rc==SQLITE_OK ){ rc = SQLITE_ERROR; } } if( rc==SQLITE_OK ){ rc = getColumnNames(db, pVtab->zTableName, &pVtab->aCol, &pVtab->nCol); } if( rc==SQLITE_OK ){ rc = getIndexArray(db, pVtab->zTableName, pVtab->nCol, &pVtab->aIndex); } } } return rc; }
int& MatrixNec::at(const ptrdiff_t nRow, const ptrdiff_t nCol) { return getIndexArray(nRow, nCol); }
void veTerrainRenderer::render(veNode *node, veRenderableObject *renderableObj, veCamera *camera, unsigned int contextID) { auto vao = _vaoBuffer->getData(contextID); if (!vao) { vao = _vaoBuffer->createData(contextID); _needRefresh = true; } auto terrainGrid = static_cast<veTerrainGrid *>(renderableObj); if (_needRefresh) { glBindVertexArray(vao); auto vbo = _vboBuffer->getData(contextID); if (!vbo){ vbo = _vboBuffer->createData(contextID); } glBindBuffer(GL_ARRAY_BUFFER, vbo); if (!terrainGrid->getVertexArray()->empty()) glBufferData(GL_ARRAY_BUFFER, terrainGrid->getVertexArray()->size() * sizeof((*terrainGrid->getVertexArray())[0]), terrainGrid->getVertexArray()->buffer(), GL_DYNAMIC_DRAW); unsigned int stride = terrainGrid->getVertexStride(); unsigned int offsets = 0; for (unsigned int i = 0; i < terrainGrid->getVertexAtrributeNum(); ++i) { glVertexAttribPointer(i, terrainGrid->getVertexAtrributeSize(i), GL_FLOAT, GL_FALSE, stride, (GLvoid *)(sizeof(GLfloat) * offsets)); glEnableVertexAttribArray(i); offsets += terrainGrid->getVertexAtrributeSize(i); } auto ibo = _iboBuffer->getData(contextID); if (!ibo){ ibo = _iboBuffer->createData(contextID); } glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo); if (!terrainGrid->getIndexArray()->empty()) glBufferData(GL_ELEMENT_ARRAY_BUFFER, terrainGrid->getIndexArray()->size() * sizeof((*terrainGrid->getIndexArray())[0]), terrainGrid->getIndexArray()->buffer(), GL_STATIC_DRAW); _indicesCount = (GLsizei)terrainGrid->getIndexArray()->size(); _needRefresh = false; } veRenderCommand rc; rc.mask = node->getMask(); rc.worldMatrix = new veMat4Ptr(node->getNodeToWorldMatrix()); rc.camera = camera; rc.sceneManager = camera->getSceneManager(); rc.depthInCamera = (camera->viewMatrix() * rc.worldMatrix->value())[2][3]; rc.renderer = this; rc.contextID = contextID; auto material = renderableObj->getMaterial(); for (unsigned int i = 0; i < material->activeTechnique()->getPassNum(); ++i) { auto pass = material->activeTechnique()->getPass(i); if (camera->getMask() & pass->drawMask()) { bool isTransparent = pass->blendFunc() != veBlendFunc::DISABLE ? true : false; rc.pass = pass; pass->visit(rc); if (isTransparent) camera->getRenderQueue()->pushCommand(i, veRenderQueue::RENDER_QUEUE_TRANSPARENT, rc); else camera->getRenderQueue()->pushCommand(i, veRenderQueue::RENDER_QUEUE_ENTITY, rc); } } }