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

群艺馆网站建设方案官方网站aspcms

群艺馆网站建设方案,官方网站aspcms,品牌的三大核心价值,做网贷网站多少钱将光源视角的深度贴图应用于摄像机视角的渲染是阴影映射#xff08;Shadow Mapping#xff09;技术的核心步骤之一。这个过程涉及到将摄像机视角下的片段坐标转换到光源视角下#xff0c;并使用深度贴图来判断这些片段是否处于阴影中。 1. 生成光源视角的深度贴图 首先Shadow Mapping技术的核心步骤之一。这个过程涉及到将摄像机视角下的片段坐标转换到光源视角下并使用深度贴图来判断这些片段是否处于阴影中。 1. 生成光源视角的深度贴图 首先我们需要从光源的视角渲染场景生成一个深度贴图。这个深度贴图记录了从光源到场景中每个可见点的距离即深度值。具体步骤如下 设置光源视角我们将摄像机位置设置为光源的位置并将摄像机的方向指向场景。这样我们可以从光源的视角渲染场景。 创建帧缓冲对象FBO为了存储深度信息我们需要创建一个帧缓冲对象Framebuffer Object, FBO并将一个深度纹理附加到该 FBO 上。 渲染深度贴图在这个视角下我们只渲染场景的深度信息而不是颜色信息。每个像素的深度值表示从光源到该像素对应场景点的距离。这些深度值被存储在一个纹理中这就是所谓的“深度贴图”或“阴影贴图”。 GLuint depthMapFBO; glGenFramebuffers(1, depthMapFBO); const GLuint SHADOW_WIDTH 1024, SHADOW_HEIGHT 1024; // 深度贴图的分辨率 GLuint depthMap; glGenTextures(1, depthMap); glBindTexture(GL_TEXTURE_2D, depthMap); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, SHADOW_WIDTH, SHADOW_HEIGHT, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthMap, 0); glDrawBuffer(GL_NONE); // 禁用颜色输出 glReadBuffer(GL_NONE); // 禁用颜色读取 glBindFramebuffer(GL_FRAMEBUFFER, 0); 2. 计算光源的视图和投影矩阵 为了将摄像机视角下的片段转换到光源视角下我们需要计算光源的视图矩阵和投影矩阵。这些矩阵用于将世界坐标转换为光源视角下的裁剪空间坐标。 视图矩阵使用 glm::lookAt 函数来计算光源的视图矩阵。这个函数需要三个参数光源的位置、目标点通常是场景的中心和上方向向量通常是 (0, 1, 0)。 投影矩阵根据光源的类型选择合适的投影矩阵。对于平行光如定向光通常使用正交投影矩阵glm::ortho对于点光源或聚光灯通常使用透视投影矩阵glm::perspective。 glm::mat4 lightView glm::lookAt(lightPos, glm::vec3(0.0f), glm::vec3(0.0, 1.0, 0.0)); glm::mat4 lightProjection glm::ortho(-10.0f, 10.0f, -10.0f, 10.0f, near_plane, far_plane); glm::mat4 lightSpaceMatrix lightProjection * lightView; 3. 将摄像机视角下的片段转换到光源视角下 在摄像机视角下渲染场景时我们需要将每个片段的坐标从摄像机视角转换到光源视角。具体步骤如下 将片段从屏幕空间转换到世界空间使用摄像机的逆投影矩阵和逆视图矩阵将片段从屏幕空间转换到世界空间。 将片段从世界空间转换到光源视角下的裁剪空间使用光源的视图矩阵和投影矩阵将世界空间中的坐标转换到光源视角下的裁剪空间。 将片段从裁剪空间转换到归一化设备坐标NDC通过透视除法即将 x, y, z 分量除以 w 分量将裁剪空间中的坐标转换为 NDC。 将 NDC 转换到纹理坐标系将 NDC 中的坐标从 [-1, 1] 映射到 [0, 1]以便可以在深度贴图中进行采样。   // 在片元着色器中 void main() {// 将片段位置从世界空间转换到光源视角下的裁剪空间vec4 fragPosLightSpace lightSpaceMatrix * vec4(WorldPos, 1.0);// 执行透视除法将裁剪空间坐标转换为 NDCvec3 projCoords fragPosLightSpace.xyz / fragPosLightSpace.w;// 将 NDC 坐标从 [-1, 1] 映射到 [0, 1]projCoords projCoords * 0.5 0.5;// 从深度贴图中采样深度值float closestDepth texture(shadowMap, projCoords.xy).r;float currentDepth projCoords.z;// 计算阴影因子float shadow currentDepth closestDepth ? 1.0 : 0.0;// 应用阴影因子到最终颜色FragColor mix(color, shadowColor, shadow); } 处理自阴影问题 当物体自身遮挡自己时可能会出现自阴影问题。为了避免这种情况可以在计算阴影时引入一个小偏移量Bias以防止物体表面的深度值与深度贴图中的深度值过于接近。偏移量的大小可以根据物体表面的法线方向和光源方向之间的夹角进行调整。 float bias max(0.05 * (1.0 - dot(normal, lightDir)), 0.005); float shadow currentDepth - bias closestDepth ? 1.0 : 0.0;
http://www.hkea.cn/news/14588717/

相关文章:

  • 免费的企业网站建设流程上海免费关键词排名优化
  • 巴音郭楞蒙古自治州建设局网站嘉兴平湖网站建设
  • 网站建设 大纲如何建设自己的公司网站
  • 网站推广引流软件学校建设网站目标
  • 下载软件的appseo网络推广优化教程
  • 网站建设扌金手指六六在招聘网站做电话销售怎么样
  • .net 网站开发框架牡丹江seo
  • 郑州网站开发公江门网站建设推广策划
  • 衡阳网站seo优化百度推广授权代理商
  • 搞笑视频网站建设策划书网页制作与网站建设实战大全 pdf下载
  • 海外网站搭建芜湖做网站优化
  • 上海电子商城网站制作海丰建设局网站
  • 网站取消301后久久建筑网施工方案好用吗
  • 成都设计公司工资多少云南seo简单整站优化
  • 现在有没有免费的网站空间绍兴公司企业名单
  • 牛网站建设想做网站的公司好
  • 建站公司 知乎 discuz商务网站内容维护范围
  • 做软件的叫什么职业网站标题具体怎样优化
  • 安平县护栏网站建设桌面百度
  • 宝华路桥建设集团网站wordpress 如何汉化主题
  • 网站制作 公司资质wordpress分类下文章置顶
  • python做的网站如何部署做淘宝内部优惠券网站要钱么
  • 网站值不值得做seo2023年楼市将迎来抛售潮
  • 网址导航网站可信软件开发工程师
  • 网站备案在哪查八面通网站建设
  • 青岛网站建设排名微信微网站开发报价单
  • 各大网站搜索引擎入口互联网保险产品
  • 网站ip被屏蔽怎么办淮南市网站开发的方式
  • 建设局是干嘛的单位想学做网站seo 在哪学 电话多少
  • 得到做网站公司品牌网站建设帮你大蝌蚪