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

学而思网校官网北京网站优化推广收集

学而思网校官网,北京网站优化推广收集,甘肃省建设厅网站官网,检测网站的seo效果1.实现Renderer.cpp 中的 Render()#xff1a;为每个像素生成光线 这里你需要为每个像素生成一条对应的光 线#xff0c;然后调用函数 castRay() 来得到颜色#xff0c;最后将颜色存储在帧缓冲区的相 应像素中。 我们要做的就是将屏幕空间下的坐标最后转换到世界空间的坐标…1.实现Renderer.cpp 中的 Render()为每个像素生成光线 这里你需要为每个像素生成一条对应的光 线然后调用函数 castRay() 来得到颜色最后将颜色存储在帧缓冲区的相 应像素中。 我们要做的就是将屏幕空间下的坐标最后转换到世界空间的坐标 这里一开始是处于屏幕空间坐标下的如下图这里假设原点在左上角opengl原点在左下角dx原点在左上角那么首先想到的是将ij分别加0.5取得像素中心坐标 接着将坐标变换到NDC空间NDC空间是一个长宽高取值范围为[-1,1]的立方体超过这个范围的顶点会被GPU剪裁。注在DirectX里面NDC的z方向取值范围是[0,1] DX下的NDC空间如下图要转换到NDC空间下首先要用xy分别除以屏幕的宽度贺高度。然后NDC空间需要将坐标轴原点变回到屏幕中间位置。 i方向即宽方向[0,1]-[-1,1]因为变化是线性的很容易得到 i 2*i-1。 j方向即高方向[0,1]-[1,-1]因为变化是线性的很容易得到 i -2*i1 最后要将坐标转换到世界空间要解决两个问题 ①横纵方向的长度并不是1:1的 ②物体本身并不是在[-1,1]的[-1,1]是缩放后的范围。 解决办法 ①imageAspectRatio即宽高比是原本scene的宽高比所以要想恢复原始的比例需要用 宽 * 宽高比即 x * imageAspectRatio。 ②scale为一半可看角度fov/2的tan值即下图tan(α/2)它代表了原本图像屏幕高度与图像到X-Y平面距离的比值又由代码已给出的 Vector3f dir Vector3f(x, y, -1) 可以知道原本的图像屏幕距离X-Y平面为1所以scale即为原本的图像高度而现在的图像高度为1所以令x,y同时乘以scale即可得到原始世界坐标下的坐标。 综上所述最后直接给出代码计算 void Renderer::Render(const Scene scene) {std::vectorVector3f framebuffer(scene.width * scene.height);//float scale std::tan(deg2rad(scene.fov * 0.5f));//宽高比float imageAspectRatio (float)scene.width / (float)scene.height;// Use this variable as the eye position to start your rays.Vector3f eye_pos(0);int m 0;for (int j 0; j scene.height; j){for (int i 0; i scene.width; i){// generate primary ray directionfloat x (2 * (((float)i 0.5) / scene.width) - 1)* imageAspectRatio * scale;float y (1.0 - 2 * ((float)j 0.5) / scene.height) * scale;// TODO: Find the x and y positions of the current pixel to get the direction// vector that passes through it.// Also, dont forget to multiply both of them with the variable *scale*, and// x (horizontal) variable with the *imageAspectRatio* //vector op,说明scene在z-1故znear距离人眼距离1 Vector3f dir normalize(Vector3f(x, y, -1)); // Dont forget to normalize this direction!framebuffer[m] castRay(eye_pos, dir, scene, 0);}UpdateProgress(j / (float)scene.height);}// save framebuffer to fileFILE* fp fopen(binary.ppm, wb);(void)fprintf(fp, P6\n%d %d\n255\n, scene.width, scene.height);for (auto i 0; i scene.height * scene.width; i) {static unsigned char color[3];color[0] (char)(255 * clamp(0, 1, framebuffer[i].x));color[1] (char)(255 * clamp(0, 1, framebuffer[i].y));color[2] (char)(255 * clamp(0, 1, framebuffer[i].z));fwrite(color, 1, 3, fp);}fclose(fp); } 到这一步输出的结果 window下查看ppm图片貌似需要用到第三方软件这里给出我用的一个网站 在线查看 PPM 文件的免费在线工具 - ImageToStl 2.Triangle.hpp 中的 rayTriangleIntersect()实现视射线与三角形相交 主要就是根据这个公式分别带入不同的参数就可以 origin是相机的位置dir是射出的方向 bool rayTriangleIntersect(const Vector3f v0, const Vector3f v1, const Vector3f v2, const Vector3f orig,const Vector3f dir, float tnear, float u, float v) {// TODO: Implement this function that tests whether the triangle// thats specified bt v0, v1 and v2 intersects with the ray (whose// origin is *orig* and direction is *dir*)// Also dont forget to update tnear, u and v.Vector3f E1 v1 - v0, E2 v2 - v0 ;Vector3f S orig - v0,S1 crossProduct(dir, E2), S2 crossProduct(S, E1);if (dotProduct(S1, E1) 0) return false;tnear dotProduct(S2, E2) / dotProduct(S1, E1);u dotProduct(S1, S) / dotProduct(S1, E1);v dotProduct(S2, dir) / dotProduct(S1, E1);if (tnear 0 u 0 v 0 (1 - u - v) 0) return true;return false; } 最后的结果
http://www.laogonggong.com/news/130685.html

相关文章:

  • 互联网站长名人成都私人网站制作
  • 关于建设信息网站的请示郑州市网络设计
  • 网站开发修改端口2022近期时事热点素材摘抄
  • 建立的网站百度搜索不到网站被百度收录吗
  • 网站建设综合东营市垦利区胜坨填建设站的网站
  • 手工艺品网站建设侧胡顺调研报告万能模板
  • 昆明网站建设服务至上北航网站建设
  • 织梦网站可以微信登录吗展厅设计制作
  • 用手机可以做网站建立网站准备工作
  • 自己做键盘的网站模板网站怎么做
  • 南通高端网站建设手机网站开发html
  • 企业网站建设的一般要素注册网站乱填邮箱
  • 企业网站建设流程与方法 论文企业网站系统源码
  • 电影网站如何做seo网站建设订流量什么意思
  • 网站备案注销 万网行业关键词搜索排名
  • 建站之星使用教程管理系统网站
  • 企飞互联网站建设网络公司合肥推广优化公司
  • 网站开发公司长春长春师范大学
  • 天津实用网站建设平台做网站赚钱不
  • 最新手机网站推荐公司支付网站建设费进什么费用
  • 漯河网站优化自己做网站步骤 域名
  • 中小企业网站建设维护内容广州网页设计机
  • 购买网站设计制作wordpress怎么修改登录地址
  • 装饰公司为什么做网站达州网站开发qinsanw
  • 境外网站 备案网站推广广告词
  • 网站建设网页制作软件有哪些泰安企业网站建设
  • 网站开发部门工资入什么科目无锡app制作
  • 网站代码是什么意思石家庄网站建设布局
  • 如何做系统集成公司网站制作相册软件
  • 做网站软件图标是一个箭头的汕头市澄海区