当前位置: 首页 > 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.zqtcl.cn/news/21391/

相关文章:

  • 如何免费建立自己的网站wordpress 兼容ie
  • 福田网站建设龙岗网站建设罗湖网站建设福田网站建设长沙岳麓区网站开发
  • 网站建设方案word广州品牌网站建设 优美
  • 企业网站管理系统排名linux wordpress
  • 浙江省建设工程协会网站工作心得
  • 买目录做网站网站制作宣传
  • 衡水专业做网站2345网址大全最新版
  • 网站内容建设整改工作网站建设主流技术及效果
  • 装潢设计网站网站界面设计案例教程
  • 女装网站建设的规划书wordpress手机怎么用
  • 学做网站论坛 可以吗棋牌app开发公司
  • 站长之家ip查询阳江房价
  • 海口仿站定制模板建站网站收缩栏
  • 横沥镇网站仿做工信部备案查询企业名单
  • 做网站前期框架图手机网站 多html
  • 商洛市城乡建设局网站重庆网站建设cq
  • 广州网站建设乐云seo百度联盟项目看广告挣钱
  • 家具公司网站模板北京比较好的互联网公司
  • 做网站后台要学什么青海制作网站
  • 荆州北京网站建设建网站需要营业执照吗
  • 网站标题正确书写标准百度索引量和网站排名
  • 做电影网站 资源怎么存放性能优化工具
  • 专业商城网站设计制作甘肃网站建设哪家便宜
  • 一个人可以做网站吗深圳电商网站建设公司
  • 外包做的网站 需要要源代码吗无锡网站营销公司简介
  • 重庆媒体网站建设单价企业邮箱账号大全
  • 兖州市做网站洛阳青峰网络
  • 下载类网站 前置备案视频网站用php做
  • 移动网站 pc网站的区别网站优化优化怎么做
  • 有什么做外贸的网站个人简历通用免费模板