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

专业h5网站制作企业宣传片一分钟多少钱

专业h5网站制作,企业宣传片一分钟多少钱,食品购物网站建设,门户网站免费建站题目 光栅化一个三角形 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/21391/

相关文章:

  • 网站托管的好处推一把网络营销学院
  • 公明做企业网站一个网站可以做多个描述吗
  • 宁波网站推广渠道河北网上注册公司流程
  • 问卷调查网站怎么做如何设计一个漂亮的网站
  • 具有口碑的柳州网站建设哪家好装饰设计资质等级标准
  • 网站如何进行网络推广西安网约车
  • 专做美食的网站做电脑网站手机能显示
  • 新零售网站建设响应式网站哪里做
  • 精致网站赏析网站引导页怎么设置
  • 高新区做网站关于门户网站建设报告
  • 有哪些专门做减肥内容的网站什么叫网站建设服务
  • 网站建设合同封面模板下载百度网盘资源搜索
  • 运城做网站要多少钱门户网站建设和管理情况自查
  • w10怎么做信任网站网页游戏在线
  • 黄石企业做网站合肥网站开发招聘
  • 网站做cdn淘宝客网站WordPress
  • 如何用服务器建设网站石家庄招投标公共服务平台官网
  • 网站建设案例ppt招聘类网站该怎么做
  • 企业推广类网站北京vi设计公司有哪些
  • 兰溪市建设局网站怎么做自己的电影网站
  • 精美网站模板下载小满crm外贸系统
  • 旅游网站首页设计模板icp备案系统
  • asp开发网站详细步骤人才网站建设
  • 安徽网站开发培训价格优秀室内设计案例
  • 企业网站页面图片论坛网站如何建设
  • 网站开发毕设结论已经有域名 怎么做网站
  • 高端网站建设万维科技精准营销推广策略
  • 有没有做淘宝的网站吗网站多少页面合适
  • 网站 图文混编wordpress怎么在虚拟主机上搭建
  • 西安网站建设求职简历公司变更经营地址需要哪些资料