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

保定 网站建设学历提升销售好做吗

保定 网站建设,学历提升销售好做吗,用word制作网页教程,成都专做婚介网站的公司本人初学者#xff0c;文中定有代码、术语等错误#xff0c;欢迎指正 文章目录 几何着色器使用几何着色器造几个房子爆破物体法向量可视化 几何着色器 简介 在顶点和片段着色器之间有一个可选的几何着色器几何着色器的输入是一个图元#xff08;如点或三角形#xff09;的一… 本人初学者文中定有代码、术语等错误欢迎指正 文章目录 几何着色器使用几何着色器造几个房子爆破物体法向量可视化 几何着色器 简介 在顶点和片段着色器之间有一个可选的几何着色器几何着色器的输入是一个图元如点或三角形的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换 代码例子 #version 330 core layout (points) in;// 输入的图元类型 layout (line_strip, max_vertices 2) out;// 几何着色器输出的图元类型void main() { gl_Position gl_in[0].gl_Position vec4(-0.1, 0.0, 0.0, 0.0); EmitVertex();gl_Position gl_in[0].gl_Position vec4( 0.1, 0.0, 0.0, 0.0);EmitVertex();EndPrimitive(); }输入的图元类型layout (points) in; points绘制GL_POINTS图元时一个图元包含最小1个顶点数。lines绘制GL_LINES或GL_LINE_STRIP时2lines_adjacencyGL_LINES_ADJACENCY或GL_LINE_STRIP_ADJACENCY4trianglesGL_TRIANGLES、GL_TRIANGLE_STRIP或GL_TRIANGLE_FAN3triangles_adjacencyGL_TRIANGLES_ADJACENCY或GL_TRIANGLE_STRIP_ADJACENCY6 几何着色器输出的图元类型layout (line_strip, max_vertices 2) out; pointsline_striptriangle_strip 说明line_strip layout (line_strip, max_vertices 5) out; 内建变量 我们需要某种方式来获取前一着色器阶段的输出 in gl_Vertex// 4.8节讲的接口块 {vec4 gl_Position;float gl_PointSize;float gl_ClipDistance[]; } gl_in[];要注意的是它被声明为一个数组因为大多数的渲染图元包含多于1个的顶点而几何着色器的输入是一个图元的所有顶点。 生成线条 void main() {gl_Position gl_in[0].gl_Position vec4(-0.1, 0.0, 0.0, 0.0); EmitVertex();// gl_Position添加到图元中gl_Position gl_in[0].gl_Position vec4( 0.1, 0.0, 0.0, 0.0);EmitVertex();EndPrimitive();// 合成 }每次我们调用EmitVertex时gl_Position中的向量会被添加到图元中来当EndPrimitive被调用时所有发射出的(Emitted)顶点都会合成为指定的输出渲染图元。 使用几何着色器 造几个房子 分析 我们可以将几何着色器的输出设置为triangle_strip并绘制三个三角形其中两个组成一个正方形另一个用作房顶。 triangle_strip说明 在第一个三角形绘制完之后每个后续顶点将会在上一个三角形边上生成另一个三角形每3个临近的顶点将会形成一个三角形 例子 顶点为123456 生成的三角形有(1, 2, 3)、(2, 3, 4)、(3, 4, 5)和(4, 5, 6)共形成4个三角形 图示 从而推出房子需要的顶点以及顺序 顶点为12345 生成的三角形有(1, 2, 3)、(2, 3, 4)和(3, 4, 5)共形成3个三角形 代码 #version 330 core layout (points) in;//输入 layout (triangle_strip, max_vertices 5) out;// 输出5个顶点in VS_OUT{// 4.8节讲的接口块vec3 color; }gs_in[];out vec3 fColor;void build_house(vec4 position){// 因为points只有一个顶点所以下标为0fColor gs_in[0].color;//1234顶点使用同一个颜色gl_Position position vec4(-0.2, -0.2, 0.0, 0.0);// 1:左下EmitVertex();gl_Position position vec4( 0.2, -0.2, 0.0, 0.0);// 2:右下EmitVertex();gl_Position position vec4(-0.2, 0.2, 0.0, 0.0);// 3:左上EmitVertex();gl_Position position vec4( 0.2, 0.2, 0.0, 0.0);// 4:右上EmitVertex();gl_Position position vec4( 0.0, 0.4, 0.0, 0.0); // 5:顶部fColor vec3(1.0, 1.0, 1.0);// 顶部颜色为白色EmitVertex();EndPrimitive(); } void main(){build_house(gl_in[0].gl_Position); }float points[] {-0.5f, 0.5f, 1.0f, 0.0f, 0.0f, // top-left0.5f, 0.5f, 0.0f, 1.0f, 0.0f, // top-right0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // bottom-right-0.5f, -0.5f, 1.0f, 1.0f, 0.0f // bottom-left };glClearColor(0.1f, 0.1f, 0.1f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST);shader.use(); glBindVertexArray(VAO); glDrawArrays(GL_POINTS, 0 ,4);效果 爆破物体 分析 我们是要将每个三角形沿着法向量的方向移动一小段时间。效果就是整个物体看起来像是沿着每个三角形的法线向量爆炸一样。 代码 vs顶点着色器 #version 330 core layout (location 0) in vec3 aPos; layout (location 2) in vec2 aTexCoords;out VS_OUT{// 4.8的接口块vec2 texCoords; }vs_out;uniform mat4 projection; uniform mat4 model; uniform mat4 view;void main() {gl_Position projection * view * model * vec4(aPos, 1.0);// 变换到裁剪空间vs_out.texCoords aTexCoords; } gs几何着色器-关键地方 #version 330 core layout (triangles) in; layout (triangle_strip, max_vertices 3) out;// 输出3个顶点// 从顶点着色器传入 in VS_OUT{vec2 texCoords; }gs_in[];// 为了传入给片段着色器 out vec2 TexCoords;uniform float time;vec4 explode(vec4 position, vec3 normal){float magnitude 2.0;// 将每个三角形沿着法向量的方向移动一小段时间vec3 direction normal * ((sin(time) 1.0) / 2.0) * magnitude;return position vec4(direction, 0.0); } // 计算法线 vec3 GetNormal(){vec3 a vec3(gl_in[0].gl_Position) - vec3(gl_in[1].gl_Position);vec3 b vec3(gl_in[2].gl_Position) - vec3(gl_in[1].gl_Position);return normalize(cross(a, b));// a、b向量的叉积第三个向量法线并垂直于a、b } void main(){vec3 normal GetNormal();gl_Position explode(gl_in[0].gl_Position, normal);TexCoords gs_in[0].texCoords;EmitVertex();gl_Position explode(gl_in[1].gl_Position, normal);TexCoords gs_in[1].texCoords;EmitVertex();gl_Position explode(gl_in[2].gl_Position, normal);TexCoords gs_in[2].texCoords;EmitVertex();EndPrimitive(); }分析 vs顶点着色器将顶点变换到裁剪空间后传给几何着色器几何着色器的顶点处于裁剪空间中那么这里计算的法线是计算裁剪空间顶点的法线 fs #version 330 core out vec4 FragColor;in vec2 TexCoords;uniform sampler2D texture_diffuse1;void main(){ FragColor texture(texture_diffuse1, TexCoords); }cpp // 渲染这个模型 model glm::translate(model, glm::vec3(0.0f, 0.0f, 0.0f)); model glm::scale(model, glm::vec3(0.1f, 0.1f, 0.1f)); shader.use(); shader.setMat4(model, model); shader.setMat4(view, view); shader.setMat4(projection, projection);shader.setFloat(time, static_castfloat(glfwGetTime()));效果 法向量可视化 引出 检测法向量是否正确的一个很好的方式就是对它们进行可视化几何着色器正是实现这一目的非常有用的工具。 实现思路 我们首先不使用几何着色器正常绘制场景 然后再次绘制场景但这次只显示通过几何着色器生成法向量。 几何着色器接收一个三角形图元并沿着法向量生成三条线——每个顶点一个法向量 代码 法线可视化的着色器 vs #version 330 core layout (location 0) in vec3 aPos; layout (location 1) in vec3 aNormal;out VS_OUT{vec3 normal; }vs_out;uniform mat4 model; uniform mat4 view;void main() {gl_Position view * model * vec4(aPos, 1.0);// 顶点变换到观察空间// 注意将法线变换到观察空间mat3 normalMatrix mat3(transpose(inverse(view * model)));vs_out.normal normalize(vec3(vec4(normalMatrix * aNormal, 0.0))); }gs #version 330 core layout (triangles) in; // 输入一个三角形3个顶点 layout (line_strip, max_vertices 6) out;// 输出3条线每条线2个顶点共6个顶点// 从顶点着色器传入 in VS_OUT{vec3 normal; }gs_in[];const float MAGNITUDE 0.02;uniform mat4 projection;// 投影矩阵 // 从点变成线 void GenerateLine(int index){gl_Position projection * gl_in[index].gl_Position;// 起始点变换到裁剪空间EmitVertex();// 1.在观察空间中线的终顶点沿着法线增长 2.顶点再变换到裁剪空间gl_Position projection * (gl_in[index].gl_Position vec4(gs_in[index].normal, 0.0) * MAGNITUDE);EmitVertex();EndPrimitive(); }void main(){GenerateLine(0);GenerateLine(1);GenerateLine(2); }分析 vs顶点着色器将顶点变换到观察空间后传给几何着色器 所以法线也要变换到观察空间再传给几何着色器 几何着色器的顶点 在观察空间沿着法线增长 (gl_in[index].gl_Position vec4(gs_in[index].normal, 0.0) * MAGNITUDE)增长后的顶点与projection投影矩阵相乘在裁剪空间 然后传给片段着色器之前经过透视除法到标准化设备坐标系再经过视口变换到屏幕坐标opengl自动执行 fs #version 330 core out vec4 FragColor;void main(){ FragColor vec4(1.0, 1.0, 0.0, 1.0); }cpp Shader shader(assest/shader/3模型/3.1.模型加载.vs, assest/shader/3模型/3.1.模型加载.fs); Shader normalshader(assest/shader/4高级OpenGL/6.9.3.几何着色器-模型法向量可视化.vs, assest/shader/4高级OpenGL/6.9.3.几何着色器-模型法向量可视化.fs, assest/shader/4高级OpenGL/6.9.3.几何着色器-模型法向量可视化.gs); while (!glfwWindowShouldClose(window)) {glm::mat4 model glm::mat4(1.0f);glm::mat4 view camera.GetViewMatrix();glm::mat4 projection glm::perspective(glm::radians(camera.Zoom), (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 100.0f);// 渲染这个模型model glm::translate(model, glm::vec3(0.0f, 0.0f, 0.0f));model glm::scale(model, glm::vec3(0.1f, 0.1f, 0.1f));shader.use();shader.setMat4(model, model);shader.setMat4(view, view);shader.setMat4(projection, projection);ourModel.Draw(shader);// 由几何着色器的设置顶点的位置渲染为法线normalshader.use();normalshader.setMat4(model, model);normalshader.setMat4(view, view);normalshader.setMat4(projection, projection);ourModel.Draw(normalshader);效果 疑问点 为什么要在观察空间中顶点沿着法线增长变成线。 几何着色器不可以直接在裁剪空间下对顶点增长吗 测试代码 void main() { // 顶点变换到裁剪空间gl_Position projection * view * model * vec4(aPos, 1.0);// 将法线变换到裁剪空间mat3 normalMatrix mat3(transpose(inverse(projection * view * model)));vs_out.normal normalize(vec3(vec4(normalMatrix * aNormal, 0.0))); }void GenerateLine(int index){// 已经在裁剪空间下不需要乘以投影矩阵了gl_Position gl_in[index].gl_Position;EmitVertex();gl_Position (gl_in[index].gl_Position vec4(gs_in[index].normal, 0.0) * MAGNITUDE);EmitVertex();EndPrimitive(); }会发现绘制出来的线很奇怪 个人猜测 前置知识 由1.8所讲的坐标系统中提到的一旦顶点进入到裁剪空间那么OpenGL会自动执行 透视除法到标准化设备坐标系 再经过视口变换到屏幕坐标 所以 在几何着色器的时候顶点此时不在裁剪空间而是在屏幕坐标系从而绘制出来的法线不正确
http://www.hkea.cn/news/14357093/

相关文章:

  • 网站建设 排名下拉软件开发联系电话
  • 网站制作公司哪个好ui作品集展示模板
  • 网站排名seo培训建设网站资质查询
  • 昆明专业网站建设长沙做网站的公司有哪些
  • 专做外贸的网站有哪些资料网页设计成片
  • 学校网站模板大全wordpress 双语插件
  • 工业和信息化部网站备案吉林公司做网站
  • 网站目标规划英语教育网站建设
  • 龙华个人网站建设手机网站模板带后台
  • 申请建设银行官方网站广州网站建设 易点
  • 外贸网站商城网站建设哪家便宜
  • 佛山网站建设专家评价2022近期时事热点素材
  • flash怎么做电子书下载网站阿里云 发布网站 教程
  • 网站开发的前后端是什么cmseasy模板
  • 什么地方可以做网站河北住房和城乡建设局网站首页
  • vs 2008网站做安装包如何推广新产品的方法
  • 福州网站搜索引擎优化太原网页设计招聘
  • 网站模版建设教程免费网站源码下载
  • 简述网站建设及维护全过程没备案可以做网站么
  • 公司网站优点产品推广
  • 建设网站的好处有哪些王也平
  • 西部数码网站核验单下载网站开发的经验技巧
  • 网页设计与网站建设完全教程哪家广告平面设计学校好
  • 建搜索引擎网站网站后台文本编辑器
  • 网站反链怎么做在线技能培训平台
  • 网站备案地址不是我的地址怎么办建设银行网站 购买外汇
  • 网站开发有哪些方式网站建设企业 熊掌号
  • 重庆做网站优化怎么建设免费小说网站
  • 做网站怎么修改网址励志网站源码
  • 化妆品网站建设计划书广州网站设计十年乐云seo