首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【十天自制软渲染器】DAY 02:画一条直线(DDA 算法 & Bresenham’s 算法)

第一天我们搭建了 C++ 的运行环境并画了一个点,根据 点 → 线 → 面 的顺序,今天我们讲讲如何画一条直线。...不连续的线 vs 连续的线 解决方法也很简单,绘制这种比较「陡峭」的直线时(斜率绝对值大于 1),以 y 的变化为基准,而不是以 x,这样就可以避免上面直线不连续情况。...实际绘制时,要比较 和 的大小: ,选点 ,选点 对于下一个新点 ,我们可以按照下式更新误差 : 若前一个点选择的是 ,则 若前一个点选择的是 ,则 把上面的思考过程用伪代码表示一下...OBJ 文件是一种被广泛使用的 3D 模型文件格式(obj 为后缀名),用来描述一个三维模型。 模型关键字较为繁琐,限于篇幅本文暂不展开,大家可以自行搜索学习。...toyrenderer_day02_obj 今天学习了如何画一条线,明天我们学习如何画一个三角形。 ?如果你喜欢我的文章,希望点赞? 收藏 ? 在看 ? 三连支持一下!!!

2.4K20

使用SDL2显示一张图片,SDL2上手贴

通常使用GUI绘图,大概是这样一个逻辑,请看伪代码: 准备画板(); 画一个点(x,y); 画一条线(x1,y1,x2,y2,c); 画一个圆(x,y,r,c); 贴一张图(x,y,w,h,bmp);...结束绘图(); 在伪代码的过程中,每执行一条命令,比如画了线,在屏幕上就会看到结果,然后那条线也会一直存在,直到程序清掉它或者其它屏幕元素遮住它。...而SDL所使用的模式用伪代码表示大致是这样的逻辑: 准备工作(); 主循环 { 游戏逻辑处理(); 界面元素1进场(); 界面元素2进场(); 界面元素n进场();...其实很简单,我们知道所有的3D绘图都包括至少两个主要的部分,一是3D物体的构造模型,比如是一个球体还是一个圆柱体;另一部分则是这个3D物体表面看起来是什么样子的,比如是一个石膏的球体还是一个毛绒玩具的球体...所以平常我们所见的应用程序,其实都是基于这一类软件库完成的。而重要的是,这些界面管理库,实际上最终也是经由OpenGL/Direct3D或者类似功能更底层一些的显示绘图库来完成界面部分的绘制功能。

1.7K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    我如何每次运行程序时,都会将数据添加到对应的keys中,而不是重新创建一个dict啊?

    大家好,我是Python进阶者。...一、前言 前几天在Python最强王者交流群【 】问了一个Python项目实战的问题,问题如下:请问,我如何每次运行程序时,都会将数据添加到对应的keys中,而不是重新创建一个dict啊。...print("密码不能小于6位") else: print("邮箱格式错误,邮箱后缀必须是@...如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答! 三、总结 大家好,我是Python进阶者。...这篇文章主要盘点了一个Python项目实战的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

    11010

    视差滚动技术的简介及运用

    4.光栅方法  在光栅图形中,一张图像的像素线通常是在画一条线和画另一条线之间自上而下的顺序构成及刷新并且会有轻微延迟(称为 horizontal blanking interval)。...然后程序将等待水平空白,在显示系统开始绘制每一条扫描线之前改变图层的滚动位置。这被称为“光栅效应”,也有助于改变系统调色板来产生一个渐变背景。  ...如果每条扫描线都有自己的图层,就会产生 Pole Position 的效果,就是在2D系统中创建一个伪3D的道路(或者 NBA Jam 游戏中的伪3D球场)。...改变旋转和缩放因子可以绘制一个平面的投影(比如在 F-Zero 和 Super Mario Kart 中)或者通过创建额外因子可以弯曲playfield。 另一种先进的技术是行/列滚动。...示例  在下面的动画中,三个图层以不同的速度向左移动。它们的速度从前到后依次递减,相对于观察者的距离则依次递增。地面的移动速度是植被层的8倍。植被层的移动速度是云层的两倍。 ?

    2.8K60

    前端进阶|在手机上画一条1px细线,为什么这么难?

    数学中有个概念:线是没有宽度的,点是没有大小的。像素同样是没有大小的。 2倍屏的物理像素密度是普通屏的两倍,并不是每一个物理像素大小是普通屏的1/4,而是物理像素的间距是普通屏间距的1/2。...下面用一个比较形象的图来解释: (用svg的stroke-width画一个100px大小+1px边宽的方形) (用css的border-width画一个100px大小+1px边宽的方形) svg中的...stroke-width画线并不是对应css中的border-width,而更像是不占空间的outline。...因为不占空间,它会以图形的边界为中心画线,一条线一半宽度在矩形内,一半在矩形外。而视口大小正好就是矩形的大小,看到的线宽就只有一半了。...svg的兼容性更好。 灵活性 由于svg只能画出特定的形状,所以无法实现圆角边框。而伪类元素方案可以。伪类元素灵活性更好。

    96310

    暑期追剧学AI | 油管网红带你搞定机器学习中数学思维(一)

    我可以选择一个应用设计以及其相应的使用者打分的数据组,而不是硬码出一些元素。 如果我想得到能够得到最高评分的设计稿,我可以(从数据组中)得到设计风格和评分之间的数据地图。...是凸函数还是凹函数更容易进行优化?我认为是凸函数,我真心希望我的实验室小伙伴作出史诗般优化。我想我应该心怀感恩,并不是很多数据科学家,能从CERN(欧洲核子研究中心)获得资助来探索。她的名字叫什么?...但是看起来我们的点间隔太大而不能够画一条直线穿过所有的点,所以我们画一条最适线,这条线尽可能多的穿过数据点,代数告诉我们直线的方程式是y=mx+b,其中m表示线的斜率或陡度,b表示y轴截距点,我们想找到...好吧我们需要尝试一堆不同的线来创建这个3D图,如果我们用一种更加有效的方式来做,而不是一遍遍没有任何头绪的随机画线,会怎样呢?...3点导数是函数在给定点上的斜率 偏导数是该函数中关于一个变量的斜率,我们可以用它们来组成一个梯度 指向函数的局部极小的方向,在机器学习中梯度下降是一个非常流行的策略,用梯度来做这些。

    49670

    人工智能算法通俗讲解系列(二):逻辑回归

    对于这个案例,我们先画一条线把已有的用户分到两边。 ? 这条线是随便画的。但我们发现,线上方的图形大部分是红色的,线下面的图形大部分是蓝色的。...如果新用户在线的下方,他很可能不喜欢这款游戏,就应该是蓝色。 但是,我怎么知道这条线是不是一条好的划分呢?这里有一种判定标准,叫错误率。所谓错误率,就是一条线把多少用户划到了错误的一边。...但是,它上方有4个蓝色是被错误划分的,而下面四个红色也是被错误划分的。 因此它划错的人数是4+4=8个。 我们把这条线稍微调整一下,看看能不能做到更好一点。现在我把线往逆时针方向转动了一点。...这时,他的下方还是4个红色被错误划分,但是上方只有三个蓝色被错误划分。最终错误数变成了7个,比刚才的错误数8要好一点,说明进步了。也就是,这条线比上一条线更合理。 ?...而且,微调的方向也不是随机的,它是由一个叫“梯度下降”的方法控制着,这个方法可以保证每次微调都是向“正确”的方向调整。只要把数据给它,它就能自动调整,一直调到最优,程序才停下来。

    83920

    基于 HTML5 的 WebGL 楼宇自控 3D 可视化监控

    目前智慧楼宇可视化监控的主要优点包括: 智慧化 -- 智慧楼宇是一个生态系统,像人一样拥有感知能力、自我判断能力以及控制能力。...场景中的管道以及背景地图路线都为点连线之后构成,只是通过修改线的颜色粗细或者进行贴图来修改线或者面的样式,场景中的电梯为一个颜色为黄色的简单六面体,电梯线也为一条线段而已,所以场景中的模型都是轻量化的建模...地图路线动画代码分析 通过上述智能建筑建模的分析我们可以知道线路都是为点与点之间进行连线而生成,所以当我们绘制完地图的路径之后可以得到所有点的信息,假如直线 AB 为地图中的某一条线段,那么我们可以知道点...,之后便要计算在 fromPoint(A点) 与 toPoint(B点) 连线上点的坐标,即 C 点,以下为计算 C 点的关键伪代码: 1 // addLength 为每次增加的线段长度值,该程序中使用...],也是通过调度来不断修改数值的大小,程序中我封装了产生随机数的代码,用于每次产生随机数之后绑定到对应的节点上,以下为修改 2d 面板上数字的变化伪代码: 1 // numNode(1-7) 为 2d

    1.1K20

    基于 HTML5 的 WebGL 楼宇自控 3D 可视化监控 顶

    目前智慧楼宇可视化监控的主要优点包括: 智慧化 -- 智慧楼宇是一个生态系统,像人一样拥有感知能力、自我判断能力以及控制能力。...场景中的管道以及背景地图路线都为点连线之后构成,只是通过修改线的颜色粗细或者进行贴图来修改线或者面的样式,场景中的电梯为一个颜色为黄色的简单六面体,电梯线也为一条线段而已,所以场景中的模型都是轻量化的建模...地图路线动画代码分析 通过上述智能建筑建模的分析我们可以知道线路都是为点与点之间进行连线而生成,所以当我们绘制完地图的路径之后可以得到所有点的信息,假如直线 AB 为地图中的某一条线段,那么我们可以知道点...,之后便要计算在 fromPoint(A点) 与 toPoint(B点) 连线上点的坐标,即 C 点,以下为计算 C 点的关键伪代码: 1 // addLength 为每次增加的线段长度值,该程序中使用...],也是通过调度来不断修改数值的大小,程序中我封装了产生随机数的代码,用于每次产生随机数之后绑定到对应的节点上,以下为修改 2d 面板上数字的变化伪代码: 1 // numNode(1-7) 为 2d

    1.3K30

    【Golang语言社区】前端编程- 从零开始开发一款H5小游戏(一) 重温canvas的基础用法

    传入的2d参数则表示我们创建的是一个2d的画布。后面所有的绘画都是直接操作cxt这个画布对象。 这个画布对象的全称是 CanvasRenderingContext2D,上面实现了很多绘制方法。...现实中我们画一个东西一般要有以下几个步骤: 准备画布 选择画笔 选择颜料 画出轮廓 填充颜色 而实际上CanvasRenderingContext2D API的设计也是大概遵循这样一个步骤,每一步都会最终影响画出来的图案...画一条线: var c=document.getElementById("canvas"); var cxt=c.getContext("2d"); //准备画布...closePath 用于方便地将首尾两个点连接起来,形成一个封闭的图形,而不必手动调用lineTo闭合图形。...上面详细介绍的几个简单的API已经足够开发一个简单的游戏了。而如何使游戏界面更丰富炫酷,则需要用到更多的辅助方法。我们将在游戏中用到时再做具体介绍。

    1.1K140

    基于 WebGL 的 HTML5 楼宇自控 3D 可视化监控

    目前智慧楼宇可视化监控的主要优点包括: 智慧化 -- 智慧楼宇是一个生态系统,像人一样拥有感知能力、自我判断能力以及控制能力。...场景中的管道以及背景地图路线都为点连线之后构成,只是通过修改线的颜色粗细或者进行贴图来修改线或者面的样式,场景中的电梯为一个颜色为黄色的简单六面体,电梯线也为一条线段而已,所以场景中的模型都是轻量化的建模...地图路线动画代码分析 通过上述智能建筑建模的分析我们可以知道线路都是为点与点之间进行连线而生成,所以当我们绘制完地图的路径之后可以得到所有点的信息,假如直线 AB 为地图中的某一条线段,那么我们可以知道点...,之后便要计算在 fromPoint(A点) 与 toPoint(B点) 连线上点的坐标,即 C 点,以下为计算 C 点的关键伪代码: 1 // addLength 为每次增加的线段长度值,该程序中使用...],也是通过调度来不断修改数值的大小,程序中我封装了产生随机数的代码,用于每次产生随机数之后绑定到对应的节点上,以下为修改 2d 面板上数字的变化伪代码: 1 // numNode(1-7) 为 2d

    1.4K20

    击败谷歌AI的秘籍在此

    不是因为这家公司要被欧盟罚款50亿美元,而是因为Google首款微信小程序“猜画小歌”:跟AI玩我画你猜的小游戏。 有很多人赞美。 “猜画小歌太好玩啦!!疯狂打call!...全世界灵魂画手,团结起来 “猜画小歌”这个小程序背后,是一个来自Google AI的神经网络,而训练这个神经网络的数据,是全球5000万个手绘数据集。 这是一个公开的数据集。...然而与真正的意识流高手相比,差距不是一点半点。 举几个例子。 请问,这个画的是什么? ? 答案:天使 这个画的是什么? ? 答案:航空母舰 这个呢? ? 答案:大炮 …… ?...当然有时候,也能实现信手画一条线,AI也能认出来的高光时刻。 全部答案 可能你遇到的难题,上面没有提到。...如果你实在想知道全部的参考答案,同样,在量子位公众号(ID:QbitAI)对话界面,回复:“答案”两个字即可。 最后,讲一个真正的知识点。 谷歌并不是等你画完,才开始根据整幅画来猜的。

    68620

    脑洞|手绘从零维到十维空间

    声明:本文中的理论均依据弦理论物理的知识,结合简单的图示和通俗的道理来解释,不是信口开河,具有科学依据。 ◆ ◆ ◆ 零维 让我们从一个点开始,和我们几何意义上的点一样,它没有大小、没有维度。...它只是被想象出来的、作为标志一个位置的点。它什么也没有,空间、时间通通不存在,这就是零维度。 ◆ ◆ ◆ 一维空间 好的,理解了零维之后我们开始一维空间。已经存在了一个点,我们再画一个点。...很简单,再画一条线,穿过原先的这条线,我么就有了二维空间,二维空间里的物体有宽度和长度,但是没有深度。你可以试一试,在纸上画一个长方形,长方形内部就是一个二维空间。...概括地说,初中毕业的你是一个起点,所有的时间线。都从这个点向外辐射,数量是无穷大,那么最后,七维空间里的一个点,里面包含着“初中毕业的你”开始的无限种可能。 那么怎么画出七维空间里的一条线?...前文中我们提到由“初中毕业的你”为开端而产生的七维无限点;如果你小学毕业的时候就作出不同的选择呢?每一个选择又会塑造一个不同的你;那么以“小学毕业的你”为开端,就会产生另一个包含着无限时间线的点。

    893100

    python画等边三角形_四边形的画法

    大家好,又见面了,我是你们的朋友全栈君。 python是编程语言,学习它只是因为要搞深度学习,其实语言类只要精通一种即可,但一定是精通,像我就是啥都知道,啥都不精,到最终一事无成。...在学Python的时候,无意间看到网上有小游戏开发,于是乎就想自己调试下。第一个接触的例程是画国旗的。...画国旗必然要画框,画框也就是画四边形,要画五角星,而五角星就是也是由三角形组成的,因此画一面很完美的五星红旗,则基础需要画四边形和三角形。OK,让我们一起来玩下吧。...# 往前移动20个像素 t.forward(20) # 左转90度,指向和上一条线平行的方向 t.left(90) time.sleep(3) # 放下画笔,开始作画 t.down() # 画另一条平行线...如果想用程序运行的结果和程序对照着来看,可以把延时设置长点,这样你就可以很清楚的看到每一条程序的运行的结果表现是什么样子。

    1K40

    Python+OpenCV实现增强现实(第1部分)

    上个学期,我参加了计算机视觉课程,对投影几何学的若干方面进行了研究,并认为自己开发一个基于卡片的增强现实应用程序将是一个有趣的项目。我提醒你,我们需要一点代数来使它工作,但我会尽量少用。...不过,我鼓励你深挖这一路上出现的概念。 其次,不要指望一些专业的结果。我这样做只是为了好玩,而且我做的很多决策本可以做的更好。文章的主要思想是开发一个概念验证应用程序。...但是,如果我们想要将放置在参考面顶部的3D模型投影到目标图像上,我们需要扩展前面的变换来处理参考面坐标系中要投影点的高度不是零的情况。这可以用一些代数来实现。...使用OpenCV ,所有这些识别过程都可以用几行代码完成: 最后要说明的是,在进入这个过程的下一步之前,我必须指出,因为我们想要一个实时的应用程序,所以最好是实现一个跟踪技术,而不仅仅是简单的识别。...然而,如前所述,我们知道点p在世界坐标系而不是相机坐标系中的坐标,因此我们必须添加另一个将世界坐标系中的点映射到相机坐标系的转换。根据变换,世界坐标系中的p点的图像平面坐标是: 图8:计算投影矩阵。

    2.5K70

    Python+OpenCV实现增强现实(第1部分)

    上个学期,我参加了计算机视觉课程,对投影几何学的若干方面进行了研究,并认为自己开发一个基于卡片的增强现实应用程序将是一个有趣的项目。我提醒你,我们需要一点代数来使它工作,但我会尽量少用。...不过,我鼓励你深挖这一路上出现的概念。 其次,不要指望一些专业的结果。我这样做只是为了好玩,而且我做的很多决策本可以做的更好。文章的主要思想是开发一个概念验证应用程序。...但是,如果我们想要将放置在参考面顶部的3D模型投影到目标图像上,我们需要扩展前面的变换来处理参考面坐标系中要投影点的高度不是零的情况。这可以用一些代数来实现。...最后要说明的是,在进入这个过程的下一步之前,我必须指出,因为我们想要一个实时的应用程序,所以最好是实现一个跟踪技术,而不仅仅是简单的识别。...然而,如前所述,我们知道点p在世界坐标系而不是相机坐标系中的坐标,因此我们必须添加另一个将世界坐标系中的点映射到相机坐标系的转换。根据变换,世界坐标系中的p点的图像平面坐标是: ?

    2.3K90

    国产引擎 Cocos 的跨平台渲染器架构与实践 | GMTC

    跟看到这篇文章的你一样,我也是一位程序员,虽然现在的主要工作更偏向于经营管理,但是程序员的底子已经刻到基因里了,所以在此想跟你分享一下 Cocos 引擎的技术架构与相关实践,希望能给你带来一些新的认识。...那这里的 3D 内容是前文所述的休闲 3D 吗?...早已不是,我们今天的 3D 内容是这样的: http://mpvideo.qpic.cn/0bf2jqaaeaaatuakm4zf3rqvatgdajgaaaqa.f10002.mp4?...,所以增加光源变成是一个加法关系,而不是一个乘法关系,性能就会高非常多。...也有很多人问我们是不是元宇宙,我的回答是:Cocos 不是元宇宙,但 Cocos 是用来生产元宇宙的工具。不管元宇宙的发展是怎样,总是要有内容,要有实时互动,那么 Cocos 就专门做这个的。

    1.4K20

    SVG画图:画一个腾讯云logo

    xmlns="http://www.w3.org/2000/svg"> 画一条线线条的标签是...,比如圆的标签是 circle,需要指定这个标签才能画一个圆,但是我们的目标是腾讯云的 logo,这显然有些 ......V (vertical lineto): 从当前位置画一条垂直线到指定的 Y 坐标。例如,V 40 会画一条线到 Y 坐标 40,当前 X 坐标不变。...S (smooth cubic Bézier curve): 画一个平滑的立方体贝塞尔曲线。它假设第一个控制点是前一个 C 或 S 命令的第二个控制点的反射。它需要两组坐标:一个控制点和一个终点。...每个命令都有一个相应的小写字母形式,例如 m、l、h、v 等。小写字母表示相对坐标,而大写字母表示绝对坐标。使用相对坐标可以简化路径的定义,因为它们是相对于前一个点的位置。

    27820

    数据挖掘知识脉络与资源整理(十)–箱线图

    箱线图的简介 箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。"...这5个点包括中点、Q1、Q3、分部状态的高位和低位。箱形图很形象的分为中心、延伸以及分部状态的全部范围 箱形图中最重要的是对相关统计点的计算,相关统计点都可以通过百分位计算方法进行实现。...在矩形盒内部中位数(Xm)位置画一条线段为中位线。...4、从矩形盒两端边向外各画一条线段直到不是异常值的最远点,表示该批数据正常值的分布区间。 5、用"〇"标出温和的异常值,用"*"标出极端的异常值。...,箱线图#二个分类型,箱线图,图中有离群点这里是两个,有木有发现?

    2.3K80

    遇事不决量子力学?二分法四象限了解一下

    听完了以上两种回答,答案相同,但你希望成为哪一个? 其实,除了上述场景,在工作和生活中每天总会遇到各种大大小小的问题需要我们去分析和决策: 毕业了该去大公司还是小公司? 我该不该去当程序员?...我在做主题研究的时候实践了来自网络的“A4纸平面切割法”,并形成了如下的五个步骤,非常实用,推荐给你: 第一步:找出一张A4纸,写下你要分析的问题 第二步:在A4纸纵向画一条线作为纵轴,这条线将A4纸一分为二...第三步:再沿横向画一条线作为横轴,这条线会将A4纸面二分为四。在纸的上下两边分别写下第二个维度的两面。 第四步:按照象限风暴内容项,用内容项来验证象限和维度是否合适。 第五步:给每个象限起名字。...以上的例子也体现了我对计划事项断舍离的理解:加法是增量思考,减法是存量修正、乘法则是变量加权、而除法体现了冗量消除。...这套方法有以下2个好处: 循序渐进的引导你进行思考,而不是一下子去想清楚一个大问题,它也符合我们对于事物的认知过程。加减乘除产生于我的几次迭代。 帮你提炼对问题的分类、视角或者说洞见。

    62610
    领券