void ImageFunction::initialSetup() { #ifdef LIBMESH_HAVE_VTK // Initialize the image data (i.e, set origin, ...) initImageData(); // Create a list of files to extract data from getFiles(); // Read the image stack if (_file_type == "png") readImages<vtkPNGReader>(); else if (_file_type == "tiff" || _file_type == "tif") readImages<vtkTIFFReader>(); else mooseError("Un-supported file type '" << _file_type << "'"); // Set the component parameter /* If the parameter is not set then vtkMagnitude() will applied */ if (isParamValid("component")) { unsigned int n = _data->GetNumberOfScalarComponents(); _component = getParam<unsigned int>("component"); if (_component >= n) mooseError("'component' parameter must be empty or have a value of 0 to " << n-1); } else _component = 0; // Apply filters, the toggling on and off of each filter is handled internally vtkMagnitude(); vtkShiftAndScale(); vtkThreshold(); vtkFlip(); #endif }
int main(int argc, char** argv) { if (!glfwInit()) // 初始化glfw库 { std::cout << "Error::GLFW could not initialize GLFW!" << std::endl; return -1; } // 开启OpenGL 3.3 core profile std::cout << "Start OpenGL core profile version 3.3" << std::endl; glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); // 创建窗口 GLFWwindow* window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Demo of PBO(unpack stream texture)", NULL, NULL); if (!window) { std::cout << "Error::GLFW could not create winddow!" << std::endl; glfwTerminate(); return -1; } glfwSetWindowPos(window, 300, 100); // 创建的窗口的context指定为当前context glfwMakeContextCurrent(window); // 注册窗口键盘事件回调函数 glfwSetKeyCallback(window, key_callback); // 注册鼠标事件回调函数 glfwSetCursorPosCallback(window, mouse_move_callback); // 注册鼠标滚轮事件回调函数 glfwSetScrollCallback(window, mouse_scroll_callback); // 鼠标捕获 停留在程序内 glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); // 初始化GLEW 获取OpenGL函数 glewExperimental = GL_TRUE; // 让glew获取所有拓展函数 GLenum status = glewInit(); if (status != GLEW_OK) { std::cout << "Error::GLEW glew version:" << glewGetString(GLEW_VERSION) << " error string:" << glewGetErrorString(status) << std::endl; glfwTerminate(); return -1; } // 设置视口参数 glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); // Section1 准备顶点数据 setupQuadVAO(); preparePBO(); initImageData(); initTexture(); // Section2 加载字体 FontResourceManager::getInstance().loadFont("arial", "../../resources/fonts/arial.ttf"); FontResourceManager::getInstance().loadASCIIChar("arial", 38, unicodeCharacters); // Section3 准备着色器程序 Shader shader("scene.vertex", "scene.frag"); Shader textShader("text.vertex", "text.frag"); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // 开始游戏主循环 while (!glfwWindowShouldClose(window)) { GLfloat currentFrame = (GLfloat)glfwGetTime(); deltaTime = currentFrame - lastFrame; lastFrame = currentFrame; glfwPollEvents(); // 处理例如鼠标 键盘等事件 do_movement(); // 根据用户操作情况 更新相机属性 // 清除颜色缓冲区 重置为指定颜色 glClearColor(0.18f, 0.04f, 0.14f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glm::mat4 projection; glm::mat4 view; glm::mat4 model; // 这里填写场景绘制代码 // 先绘制纹理图片 shader.use(); glUniformMatrix4fv(glGetUniformLocation(shader.programId, "projection"), 1, GL_FALSE, glm::value_ptr(projection)); glUniformMatrix4fv(glGetUniformLocation(shader.programId, "view"), 1, GL_FALSE, glm::value_ptr(view)); model = glm::mat4(); glUniformMatrix4fv(glGetUniformLocation(shader.programId, "model"), 1, GL_FALSE, glm::value_ptr(model)); renderScene(shader); // 在绘制信息文字 textShader.use(); projection = glm::ortho(0.0f, (GLfloat)(WINDOW_WIDTH), 0.0f, (GLfloat)WINDOW_HEIGHT); view = glm::mat4(); glUniformMatrix4fv(glGetUniformLocation(textShader.programId, "projection"), 1, GL_FALSE, glm::value_ptr(projection)); glUniformMatrix4fv(glGetUniformLocation(textShader.programId, "view"), 1, GL_FALSE, glm::value_ptr(view)); model = glm::mat4(); glUniformMatrix4fv(glGetUniformLocation(textShader.programId, "model"), 1, GL_FALSE, glm::value_ptr(model)); renderInfo(textShader); printTransferRate(); glBindVertexArray(0); glUseProgram(0); glfwSwapBuffers(window); // 交换缓存 } // 释放资源 glDeleteVertexArrays(1, &quadVAOId); glDeleteBuffers(1, &quadVBOId); glDeleteVertexArrays(1, &textVAOId); glDeleteBuffers(1, &textVBOId); glDeleteBuffers(2, PBOIds); // 注意释放PBO releaseImageData(); glfwTerminate(); return 0; }