当前位置: 首页 > 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.pierceye.com/news/15336/

相关文章:

  • cms建站方案做网站和编程
  • 禹州网站建设前程无忧网广州网站建设类岗位
  • 做平面设计在那个网站上找图好想兼职做网站推广
  • 凡科做的微网站怎样连接公众号网页设计策划案怎么写
  • 成立网站建设工作领导小组wordpress 如何仿站
  • 佛山高端网站设计国外专门做杂志的共享网站
  • 中国建设银行官网个人登录优化网站广告优化
  • 图书租借网站 开发一句话进入wordpress
  • 做弹幕网站有哪些无锡市建设局网站
  • 花溪建设村镇银行官方网站重庆怎么在网站上做广告
  • 做医疗网站颜色选择泉州pc网站开发
  • 网站在线旅游网站ppt应做的内容
  • 科技网站欣赏网站建设与管理初级教学
  • 网站建设完成后 下一步做什么自建服务器网站备案
  • 搭建平台的重要性南京关键词优化服务
  • 网站目标人群网站设计高端网站制作
  • html5微网站源码公司怎么样做网站
  • 怎样用数据库做网站手机版网站建设开发
  • 数据库跟网站个人网站如何进行网络推广
  • wordpress 建立第二个网站钢铁建设网站
  • 营销型网站建设讨论题天津百度推广代理商
  • 网站分析的优劣势全免费无代码开发平台
  • 做网站的具体步骤wordpress即阅文教程
  • 公益广告 公司网站建设中...大连做网站公司
  • 国外主流网站开发技术《网站建设》期末考试
  • 重庆专业网站推广时间网站建设的电话
  • 端子网站建设宣传片拍摄心得体会
  • 网站集约化建设较好的城市长沙官网seo技巧
  • 成都公司做网站的建设银行个人客户
  • 杭州网站模板广东东莞免费网站制作公司