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

企业网站建设方案教程好姑娘在线观看完整视频高清

企业网站建设方案教程,好姑娘在线观看完整视频高清,南通做网站的,知名网站设计服务商题目 光栅化一个三角形 1. 创建三角形的 2 维 bounding box。 2. 遍历此 bounding box 内的所有像素#xff08;使用其整数索引#xff09;。然后#xff0c;使用像素中心的屏幕空间坐标来检查中心点是否在三角形内。 3. 如果在内部#xff0c;则将其位置处的插值深度值 (…题目 光栅化一个三角形 1. 创建三角形的 2 维 bounding box。 2. 遍历此 bounding box 内的所有像素使用其整数索引。然后使用像素中心的屏幕空间坐标来检查中心点是否在三角形内。 3. 如果在内部则将其位置处的插值深度值 (interpolated depth value) 与深度缓冲区 (depth buffer) 中的相应值进行比较。 4. 如果当前点更靠近相机请设置像素颜色并更新深度缓冲区 (depth buffer)。题解 本次作业需要实现代码框架中的两个接口 void rst::rasterizer::rasterize_triangle(const Triangle t); static bool insideTriangle(int x, int y, const Vector3f* _v);1. 在2D空间中计算一个三角形的轴对称boundbox 只需要计算出三角形的三个顶点坐标中,x最大最小值y最大最小值。即 ( x m i n , y m i n ) , ( x m a x , y m a x ) (x_{min},y_{min}),(x_{max},y_{max}) (xmin​,ymin​),(xmax​,ymax​) 使用math.h库实现如下 int xMin, yMin, xMax, yMax;xMin std::floor(std::min(std::min(v[0].x(),v[1].x()),v[2].x()));yMin std::floor(std::min(std::min(v[0].y(), v[1].y()), v[2].y()));xMax std::ceil(std::max(std::max(v[0].x(), v[1].x()), v[2].x()));yMax std::ceil(std::max(std::max(v[0].y(), v[1].y()), v[2].y()));注意顶点坐标都是浮点数但是我们计算出的包围盒必须是整型。左上角下取整右下角上去整。 2. 判断像素的中心点是否在三角形内部 其实方法有很多种具体可以参考这个博客。 最常用最高效的有两种重心坐标法和向量叉积。 本次作业选用向量叉积法 代码如下 static bool insideTriangle(int x, int y, const Vector3f* _v) { // TODO : Implement this function to check if the point (x, y) is inside the triangle represented by _v[0], _v[1], _v[2]auto v0_v1 _v[1] - _v[0];auto v1_v2 _v[2] - _v[1];auto v2_v0 _v[0] - _v[2];auto v0_P Vector3f(x, y, _v[0].z()) - _v[0];auto v1_P Vector3f(x, y, _v[1].z()) - _v[1];auto v2_P Vector3f(x, y, _v[2].z()) - _v[2];auto v0pCross v0_v1.cross(v0_P);auto v1pCross v1_v2.cross(v1_P);auto v2pCross v2_v0.cross(v2_P);if (v0pCross.dot(v1pCross) 0 v0pCross.dot(v2pCross) 0)return true;return false; }因为我们判断的是一个像素的中心点是否在三角形内部所以需要给x,y 分别加0.5,即insideTriangle(x0.5,y0.5,t.v) 注意Vector3f Triangle::v[3] 中存放的就是三角形的三个顶点。 3.根据插值得到的深度值和深度缓冲的深度值比较。 插值运算使用代码框架所以这块比较简单。 代码如下 for (int i xMin; i xMax; i){for (int j yMin; j yMax; j){if (insideTriangle(i0.5f, j0.5f,t.v)){auto[alpha, beta, gamma] computeBarycentric2D(i, j, t.v);float w_reciprocal 1.0/(alpha / v[0].w() beta / v[1].w() gamma / v[2].w());float z_interpolated alpha * v[0].z() / v[0].w() beta * v[1].z() / v[1].w() gamma * v[2].z() / v[2].w();z_interpolated * w_reciprocal;int index get_index(i, j);if (depth_buf[index] z_interpolated){depth_buf[index] z_interpolated; // 更新深度缓冲区set_pixel(Vector3f(i,j,z_interpolated),t.getColor());}}}}注意如果当前z值小于深度缓冲区的深度值一定要更新深度缓冲区。 结果 代码 static bool insideTriangle(int x, int y, const Vector3f* _v) { // TODO : Implement this function to check if the point (x, y) is inside the triangle represented by _v[0], _v[1], _v[2]auto v0_v1 _v[1] - _v[0];auto v1_v2 _v[2] - _v[1];auto v2_v0 _v[0] - _v[2];auto v0_P Vector3f(x, y, _v[0].z()) - _v[0];auto v1_P Vector3f(x, y, _v[1].z()) - _v[1];auto v2_P Vector3f(x, y, _v[2].z()) - _v[2];auto v0pCross v0_v1.cross(v0_P);auto v1pCross v1_v2.cross(v1_P);auto v2pCross v2_v0.cross(v2_P);if (v0pCross.dot(v1pCross) 0 v0pCross.dot(v2pCross) 0)return true;return false; }void rst::rasterizer::rasterize_triangle(const Triangle t) {auto v t.toVector4();int xMin, yMin, xMax, yMax;xMin std::floor(std::min(std::min(v[0].x(),v[1].x()),v[2].x()));yMin std::floor(std::min(std::min(v[0].y(), v[1].y()), v[2].y()));xMax std::ceil(std::max(std::max(v[0].x(), v[1].x()), v[2].x()));yMax std::ceil(std::max(std::max(v[0].y(), v[1].y()), v[2].y()));for (int i xMin; i xMax; i){for (int j yMin; j yMax; j){if (insideTriangle(i0.5f, j0.5f,t.v)){auto[alpha, beta, gamma] computeBarycentric2D(i, j, t.v);float w_reciprocal 1.0/(alpha / v[0].w() beta / v[1].w() gamma / v[2].w());float z_interpolated alpha * v[0].z() / v[0].w() beta * v[1].z() / v[1].w() gamma * v[2].z() / v[2].w();z_interpolated * w_reciprocal;int index get_index(i, j);if (depth_buf[index] z_interpolated){depth_buf[index] z_interpolated;set_pixel(Vector3f(i,j, z_interpolated),t.getColor());}}}} } 参考文献 判断点是否在三角形内
http://www.zqtcl.cn/news/15336/

相关文章:

  • 网站建设是怎么挣钱手机网站价格
  • 网站图标怎么下载张家港网站建设培训学校
  • 网站是由什么组成的南昌网站建设制作与维护
  • 企梦云网站建设开发板是单片机吗
  • 网站建设后端技术电脑显示无法运行wordpress
  • 高清设计网站推荐安居客房产官方网站
  • 门户网站建设投资秦皇岛网站推广报价
  • 360怎么做网站排名wordpress替换google字体
  • 建e网站官网案例延安网站建设公司
  • 富阳网站手机商城手机网站建设多少钱
  • 宁波做网站费用武进网站制作公司
  • 太空为什么要建站汕头制作网站推荐
  • 合肥瑶海区网站建设费用兰州官网seo诊断
  • 手机网站拒绝访问怎么解决深圳营销型网站建设多少钱
  • 上海人才网最新招聘信息官方网站杭州 做网站
  • 如何登录ftp网站什么可以用手机做网站
  • 龙岩市城乡建设局网站进不去北京高端网站建设服务
  • 优秀flash网站欣赏全国企业注册官方网
  • 免费wap网站建设办营业执照要多少钱
  • 桓台建设局网站网站续费查询
  • 网站标题在哪里修改公司网站在哪备案
  • 网站开发流程电话免费空间访问
  • 珠海新盈科技网站建设红色为主的网站
  • 云南网站建设公司有官网建手机网站吗
  • 钢笔工具网站旅游后台网站
  • 响应式网站开发报价最新资讯热点
  • 东莞常平建网站公司泉州网站开发建设
  • 帮人做网站收费合法吗wordpress影视模板
  • 内乡微网站建设怎么样建设网站网站
  • 网站建设 目的 意义 政策青岛开发区建网站公司