当前位置: 首页 > news >正文

怎样为公司做网站网站设计网站建设网站制作

怎样为公司做网站,网站设计网站建设网站制作,百度关键词排名推广,北京网站定制价格表目录 一.配置GLFW 二.配置GLAD 三.第一个OpenGL窗口 3.1 GLFW设置 3.2 GLAD设置 3.3 视口 3.4 输入 3.5渲染 在我们画出出色的效果之前#xff0c;首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而#xff0c;这些操作在每个系统上都是不一样…目录 一.配置GLFW 二.配置GLAD 三.第一个OpenGL窗口 3.1 GLFW设置 3.2 GLAD设置 3.3 视口 3.4 输入 3.5渲染 在我们画出出色的效果之前首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而这些操作在每个系统上都是不一样的OpenGL有意将这些操作抽象(Abstract)出去。这意味着我们不得不自己处理创建窗口定义OpenGL上下文以及处理用户输入。 幸运的是有一些库已经提供了我们所需的功能其中一部分是特别针对OpenGL的。这些库节省了我们书写操作系统相关代码的时间提供给我们一个窗口和一个OpenGL上下文用来渲染。最流行的几个库有GLUTSDLSFML和GLFW。在教程里我们将使用GLFW。你可以随意选用其他类似的库大多数库的配置方法和GLFW差不多 一.配置GLFW GLFW是一个专门针对OpenGL的C语言库它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入对我们来说这就够了。GLFW可以从它官方网站的下载页上获取。GLFW已提供为Visual Studio2012到2019都有预编译好的二进制版本和相应的头文件我们下载它的源码后需要进行编译编译成功后可以得到它的头文件以及相关的库文件 接下来新建我们的第一个OpenGL工程打开Visual Studio ,创建一个新的“Hellow Word”程序。并进行GLFW的配置右键工程【属性】——【C/C常规页”】选择附加包含目录引入上一步编译的GLFW库的头文件目录。操作如下图所示 接下来进行链接库目录的配置在【连接器常规】下选择附加目录库选择上一步编译的GLFW库的静态库目录进行配置如下图所示 最后进行链接库的配置选择【连接器输入】下选择附加依赖项添加编译的glfw3.lib和系统的Opengl32.lib配置如下 到此GLFW的配置完成。 二.配置GLAD GLAD是一个开源的库它能解决我们上面提到的那个繁琐的问题。GLAD的配置与大多数的开源库有些许的不同GLAD使用了一个在线服务。在这里我们能够告诉GLAD需要定义的OpenGL版本并且根据这个版本加载所有相关的OpenGL函数。 GLAD现在应该提供给你了一个zip压缩文件包含两个头文件目录和一个glad.c文件。将两个头文件目录glad和KHR复制到你的Include文件夹中或者增加一个额外的项目指向这些目录并添加glad.c文件到你的工程中。 GLFW和GLAD编译好的库可以在这里下载直接使用 GLFW    GLAD 引入GLFW和glad头文件进行编译测试 至此OpenGl环境配置完成。 三.第一个OpenGL窗口 3.1 GLFW设置 接下来我们创建main函数在这个函数中我们将会实例化GLFW窗口 首先我们进行glfw 初始化和配置实现如下 // glfw 初始化和配置// ------------------------------glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 我们在main函数中调用glfwInit函数来初始化GLFW然后我们可以使用glfwWindowHint函数来配置GLFW。glfwWindowHint函数的第一个参数代表选项的名称我们可以从很多以GLFW_开头的枚举值中选择第二个参数接受一个整型用来设置这个选项的值。该函数的所有的选项以及对应的值都可以在 GLFW’s window handling 这篇文档中找到。 接下来我们创建一个窗口对象这个窗口对象存放了所有和窗口相关的数据而且会被GLFW的其他函数频繁地用到。 // settings const unsigned int SCR_WIDTH 800; const unsigned int SCR_HEIGHT 600;// glfw 窗口创建// --------------------GLFWwindow* window glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, 【菜鸟驿站】LearnOpenGL 第一个OPenGL窗口, NULL, NULL);if (window NULL){std::cout Failed to create GLFW window std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window); glfwCreateWindow函数需要窗口的宽和高作为它的前两个参数。第三个参数表示这个窗口的名称标题这里我们使用【菜鸟驿站】LearnOpenGL  第一个OPenGL窗口当然你也可以使用你喜欢的名称。最后两个参数我们暂时忽略。这个函数将会返回一个GLFWwindow对象我们会在其它的GLFW操作中使用到。创建完窗口我们就可以通知GLFW将我们窗口的上下文设置为当前线程的主上下文了。 3.2 GLAD设置 在之前的教程中已经提到过GLAD是用来管理OpenGL的函数指针的所以在调用任何OpenGL的函数之前我们需要初始化GLAD。 // glad: load all OpenGL function pointers// ---------------------------------------//GLAD是用来管理OpenGL的函数指针的所以在调用任何OpenGL的函数之前我们需要初始化GLAD。if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout Failed to initialize GLAD std::endl;return -1;} 我们给GLAD传入了用来加载系统相关的OpenGL函数指针地址的函数。GLFW给我们的是glfwGetProcAddress它根据我们编译的系统定义了正确的函数。 3.3 视口 在我们开始渲染之前还有一件重要的事情要做我们必须告诉OpenGL渲染窗口的尺寸大小即视口(Viewport)这样OpenGL才只能知道怎样根据窗口大小显示数据和坐标。我们可以通过调用glViewport函数来设置窗口的维度(Dimension) glViewport(0, 0, 800, 600); glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度像素。 我们实际上也可以将视口的维度设置为比GLFW的维度小这样子之后所有的OpenGL渲染将会在一个更小的窗口中显示这样子的话我们也可以将一些其它元素显示在OpenGL视口之外。 OpenGL幕后使用glViewport中定义的位置和宽高进行2D坐标的转换将OpenGL中的位置坐标转换为你的屏幕坐标。例如OpenGL中的坐标(-0.5, 0.5)有可能最终被映射为屏幕中的坐标(200,450)。注意处理过的OpenGL坐标范围只为-1到1因此我们事实上将(-1到1)范围内的坐标映射到(0, 800)和(0, 600)。 然而当用户改变窗口的大小的时候视口也应该被调整。我们可以对窗口注册一个回调函数(Callback Function)它会在每次窗口大小被调整的时候被调用。这个回调函数的原型如下 void framebuffer_size_callback(GLFWwindow* window, int width, int height); 这个帧缓冲大小函数需要一个GLFWwindow作为它的第一个参数以及两个整数表示窗口的新维度。每当窗口改变大小GLFW会调用这个函数并填充相应的参数供你处理。 // glfw: whenever the window size changed (by OS or user resize) this callback function executes // --------------------------------------------------------------------------------------------- void framebuffer_size_callback(GLFWwindow* window, int width, int height) {glViewport(0, 0, width, height); //glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度像素 } 我们还需要注册这个函数告诉GLFW我们希望每当窗口调整大小的时候调用这个函数 glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); 当窗口被第一次显示的时候framebuffer_size_callback也会被调用。对于视网膜(Retina)显示屏width和height都会明显比原输入值更高一点。 我们还可以将我们的函数注册到其它很多的回调函数中。比如说我们可以创建一个回调函数来处理手柄输入变化处理错误消息等。我们会在创建窗口之后渲染循环初始化之前注册这些回调函数。 我们可不希望只绘制一个图像之后我们的应用程序就立即退出并关闭窗口。我们希望程序在我们主动关闭它之前不断绘制图像并能够接受用户输入。因此我们需要在程序中添加一个while循环我们可以把它称之为渲染循环(Render Loop)它能在我们让GLFW退出前一直保持运行。下面几行的代码就实现了一个简单的渲染循环 while(!glfwWindowShouldClose(window)) {glfwSwapBuffers(window);glfwPollEvents(); } glfwWindowShouldClose函数在我们每次循环的开始前检查一次GLFW是否被要求退出如果是的话该函数返回true然后渲染循环便结束了之后为我们就可以关闭应用程序了。glfwPollEvents函数检查有没有触发什么事件比如键盘输入、鼠标移动等、更新窗口状态并调用对应的回调函数可以通过回调方法手动设置。glfwSwapBuffers函数会交换颜色缓冲它是一个储存着GLFW窗口每一个像素颜色值的大缓冲它在这一迭代中被用来绘制并且将会作为输出显示在屏幕上。 双缓冲(Double Buffer) 应用程序使用单缓冲绘图时可能会存在图像闪烁的问题。 这是因为生成的图像不是一下子被绘制出来的而是按照从左到右由上而下逐像素地绘制而成的。最终图像不是在瞬间显示给用户而是通过一步一步生成的这会导致渲染的结果很不真实。为了规避这些问题我们应用双缓冲渲染窗口应用程序。前缓冲保存着最终输出的图像它会在屏幕上显示而所有的的渲染指令都会在后缓冲上绘制。当所有的渲染指令执行完毕后我们交换(Swap)前缓冲和后缓冲这样图像就立即呈显出来之前提到的不真实感就消除了。 当渲染循环结束后我们需要正确释放/删除之前的分配的所有资源。我们可以在main函数的最后调用glfwTerminate函数来完成。 glfwTerminate(); 3.4 输入 创建一个processInput函数来实现键盘输入响应事件 // process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly // --------------------------------------------------------------------------------------------------------- void processInput(GLFWwindow *window) {if (glfwGetKey(window, GLFW_KEY_ESCAPE) GLFW_PRESS)glfwSetWindowShouldClose(window, true); } 这里我们检查用户是否按下了返回键(Esc)如果没有按下glfwGetKey将会返回GLFW_RELEASE。如果用户的确按下了返回键我们将通过glfwSetwindowShouldClose使用把WindowShouldClose属性设置为 true的方法关闭GLFW。下一次while循环的条件检测将会失败程序将会关闭。 我们接下来在渲染循环的每一个迭代中调用processInput函数 while (!glfwWindowShouldClose(window)) {processInput(window);glfwSwapBuffers(window);glfwPollEvents(); } 3.5渲染 我们要把所有的渲染(Rendering)操作放到渲染循环中因为我们想让这些渲染指令在每次渲染循环迭代的时候都能被执行。代码将会是这样的 // 渲染循环 while(!glfwWindowShouldClose(window)) {// 输入processInput(window);// 渲染指令...// 检查并调用事件交换缓冲glfwPollEvents();glfwSwapBuffers(window); } 为了测试一切都正常工作我们使用一个自定义的颜色清空屏幕。在每个新的渲染迭代开始的时候我们总是希望清屏否则我们仍能看见上一次迭代的渲染结果这可能是你想要的效果但通常这不是。我们可以通过调用glClear函数来清空屏幕的颜色缓冲它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲可能的缓冲位有GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。由于现在我们只关心颜色值所以我们只清空颜色缓冲。 glClearColor(0.2f, 0.6f, 0.2f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); 编译运行程序渲染出第一个窗口 附完整代码如下 #include glad/glad.h #include GLFW/glfw3.h #include iostreamvoid framebuffer_size_callback(GLFWwindow* window, int width, int height); void processInput(GLFWwindow *window);// settings const unsigned int SCR_WIDTH 800; const unsigned int SCR_HEIGHT 600;int main() {// glfw 初始化和配置// ------------------------------glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// glfw 窗口创建// --------------------GLFWwindow* window glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, 【菜鸟驿站】LearnOpenGL 第一个OPenGL窗口, NULL, NULL);if (window NULL){std::cout Failed to create GLFW window std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); //注册这个函数告诉GLFW我们希望每当窗口调整大小的时候调用这个函数// glad: load all OpenGL function pointers// ---------------------------------------//GLAD是用来管理OpenGL的函数指针的所以在调用任何OpenGL的函数之前我们需要初始化GLAD。if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout Failed to initialize GLAD std::endl;return -1;}// render loop 渲染循环// -----------while (!glfwWindowShouldClose(window)){// input// -----processInput(window);// render// ------glClearColor(0.2f, 0.6f, 0.2f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)// -------------------------------------------------------------------------------glfwSwapBuffers(window);glfwPollEvents();}// glfw: terminate, clearing all previously allocated GLFW resources.// ------------------------------------------------------------------glfwTerminate();return 0; }// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly // --------------------------------------------------------------------------------------------------------- void processInput(GLFWwindow *window) {if (glfwGetKey(window, GLFW_KEY_ESCAPE) GLFW_PRESS)glfwSetWindowShouldClose(window, true); }// glfw: whenever the window size changed (by OS or user resize) this callback function executes // --------------------------------------------------------------------------------------------- void framebuffer_size_callback(GLFWwindow* window, int width, int height) {glViewport(0, 0, width, height); //glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度像素 }
http://www.tj-hxxt.cn/news/141648.html

相关文章:

  • 龙口网站制作价格管理系统admin入口
  • 警告欺骗网站模板有哪些专门做展会创意的网站
  • 专业制作网站 郑网站建站制作价格
  • cm在线设计平台网站如何做360优化
  • 网站建设公司汉狮网络滨州聊城网站建设
  • 网站推广专员面试深圳推广平台深圳网络推广
  • 做化工的外贸网站都有什么上海徐汇区网站建设公司
  • 做纺织机械的网站域名当当网网站建设
  • 网站搭建图片wordpress工具箱主题
  • 做网站服务器 自己电脑还是租手机网页布局
  • 佛山网站建设公司有哪些?快站建站
  • 宿州网站制作毕设做网站怎么样
  • 规划营销型的网站结构上海单个关键词优化
  • 湖南省建设厅李云英文seo如何优化
  • 加拿大搜索引擎seo推广平台服务
  • 网站维护费一年多少钱长春网站上排名
  • 哈尔滨建站公司模板销售平台有哪些
  • 做电影网站被告版权为企业策划一次网络营销活动
  • 高安市网站建设公司通州网站建设站开发评价
  • 深圳网站建设设计公司厦门模板网站建设
  • 网站建设制作设计开发关键词排名优化系统
  • 网站可不可以做自己的专利网络推广合同
  • 网站建设现在市场大不大网站做推广 建设哪种类型合适
  • 建站公司杭州做羞羞的专门网站
  • 哪一个网站可以做任务拿佣金网站建设维护费合同
  • 青海省教育厅门户网站官网新乡网站优化公司推荐
  • seo站长优化工具在线是免费生成器
  • dedecms导航网站做网站能设置关键词在百度中搜索到
  • 企业网站模板下载网站模板下载word 发布 wordpress
  • 加上强机关网站建设管理的通知建湖人才网官网登录