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

【OpenGL】二十二、OpenGL 光照效果 ( 模型准备 | 光照设置 | 启用光照 | 启用光源 | 设置光源位置 | 设置光照参数 | 设置环境 | 设置反射材质 | 设置法线 )

文章目录 一、模型准备 二、光照设置 1、启用光照设置 2、启用光源 3、设置光照参数 4、设置环境 5、设置反射材质 三、光照法线设置 1、设置光源位置 2、设置法线 3、代码示例及运行效果 四..., 0 号光源使用的是默认材质 glEnable(GL_LIGHT0); 三、光照法线设置 ---- 1、设置光源位置 设置光源位置 , 光源位置数组最后一位设置为 0 , 代表该光源在无穷远处...0.0f, 1.0f, 0.0f, 0.0f }; // 设置光源位置 , y 轴无限远位置 glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);...); // 设置镜面反射 glLightfv(GL_LIGHT0, GL_SPECULAR, whiteColor); // 设置光源位置 , 最后一位设置成 0 代表该光源无限远 float...lightPosition[] = { 0.0f, 1.0f, 0.0f, 0.0f }; // 设置光源位置 , y 轴无限远位置 glLightfv(GL_LIGHT0, GL_POSITION

47300

如何使用光流法进行目标追踪【文末送书】

,对实时性要求较高;“离线追踪”通过过去、现在和未来的视频帧确定目标的位置,对实时性要求不高,“离线追踪”的准确率通常会高于“在线追踪”的准确率。...3.生成式模型 生成式模型首先定义出目标的特征,然后在后续视频帧中寻找相似特征的位置,从而实现目标的定位。...2.流法的原理 流法通过计算视频帧中像素点的流,得到流场(流的集合),流场中包含了目标的运动信息,通过分析流场实现对目标的追踪。...流法是根据像素值在时间序列上的变化和相邻帧之间的关联程度,找到当前帧和前一帧的对应关系,并根据这种对应关系计算出目标的运行轨迹,使用光流法进行目标追踪时,需要满足以下两个假设条件: (1)亮度不变性假设...流法假设了同一个点的亮度不变,根据这一假设,可以得到公式10.4。 使用泰勒级数将展开,如公式10.5所示。

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

流法原理概述「建议收藏」

(可以随机产生,也可以利用角点来做特征点); (4)对之后的任意两个相邻视频帧而言,寻找上一帧中出现的关键特征点在当前帧中的最佳位置,从而得到前景目标在当前帧中的位置坐标; (5)如此迭代进行,便可实现目标的跟踪...流场是运动场在二维图像上的投影,而光流就是在图像灰度模式下,像素点的运动矢量。流法技术的核心就是求解出运动目标的流,即速度。...为此可以假设:瞬时灰度值不变,即灰度不变性原理。由此可以得到流基本方程,灰度对时间的变化率等于灰度的空间梯度与流速度的点积。...基于特征的方法对于目标的速度和亮度变化具有较好的鲁棒性。基于匹配的两种方法存在的主要问题是,得到的流通常比较稀疏,要实现精确匹配比较难。...这是基本流法的假定(所有流法变种都必须满足),用于得到流法基本方程; (2)小运动,这个也必须满足,就是时间的变化不会引起位置的剧烈变化,这样灰度才能对位置求偏导(换句话说,小运动情况下我们才能用前后帧之间单位位置变化引起的灰度变化去近似灰度对位置的偏导数

2.1K20

用 Three.js 画个 3D 生日蛋糕送给他(她)

画 3D 蛋糕 蛋糕其实就是由 4 个圆柱体加上文字构成的,每个圆柱体都设置了不同的位置,圆柱体的侧面和上下面都贴上不同的贴图,就是一个蛋糕。...我们用同样的方式创建四个圆柱体,设置不同的大小和位置,贴不同的图: const cakeGeometry1 = new THREE.CylinderBufferGeometry(100, 100, 70...,可以在 Scene 中加上一个坐标的辅助工具 AxisHelper。...然后我们实现了 3D 蛋糕: 通过 4 个圆柱体 + 文字来画的,圆柱体用了不同的纹理贴图材质,设置了不同的位置,然后组成蛋糕的 group。...设置了环境,使用了正交相机,还启用了轨道控制器 OrbitControls,来实现鼠标拖拽改变相机位置,进而改变视野角度的效果。

3.2K31

看完这篇,你也可以实现一个360度全景插件

二、Three.js基础知识 使用 Three.js绘制一个三维效果,至少需要以下几个步骤: 创建一个容纳三维空间的场景 — Sence 将需要绘制的元素加入到场景中,对元素的形状、材料、阴影等进行设置...有了光线的渲染,让几何体看起来更具有 3D效果, Three.js中光源有很多种,我们上面使用了环境( AmbientLight)和平行( DirectionalLight)。...除了这两种, Three.js还提供了其他几种光源,它们适用于不同情况下对不同材质的渲染,可以根据实际情况选择。...2.3 坐标系 在说相机之前,我们还是先来了解一下坐标系的概念: 在三维世界中,坐标定义了一个元素所处于三维空间的位置,坐标系的原点即坐标的基准点。...很清楚的看到 position决定了我们视野的出发点,但是镜头指向的方向是不变的。

8.7K30

Three.js深入浅出:4-three.js中的光源

环境没有明确定义的位置,也不会产生阴影效果。您可以设置环境的颜色和强度来控制整个场景的整体亮度和色彩。...光源属性及其影响 2.1 的颜色和强度 2.2 位置和方向 2.3 的衰减和阴影 2.4 的投射和接收 在Three.js中,光源的属性会对场景中的物体产生不同的影响。...增加的强度可以使物体更明亮,而减小光的强度则会使物体变暗。通过调整的颜色和强度,您可以创造出不同的光照效果,如自然或彩色灯光。 2.2 位置和方向 位置和方向决定了光线的传播方式。...对于平行光和点光源,您可以设置它们的位置来控制光线的发射方向。通过调整光源的位置,您可以模拟光线从不同角度或位置照射到物体上的效果。...: directionalLight.position.set(1, 1, 1); // 设置平行光源位置 pointLight.position.set(0, 3, 0); // 设置点光源位置 3.4

29810

我写CSS的常用套路(附demo的效果实现与源码)

这就是所谓的交错动画:通过设置不同的延迟时间,达到动画交错播放的效果。...但这样明显不对啊,这为啥能被看见呢?不应该把它给“挡”起来吗? 于是乎,给按钮加上overflow: hidden,光在按钮外的位置时就被隐藏起来了。 ?...当CSS动画中有属性无法从CSS中获取时,自然就会使用到它了 跟踪鼠标的位置 目前CSS还尚未有获取鼠标位置的API,因此考虑用JS来进行 通过查阅相关的DOM API,发现在监听鼠标事件的API中,可通过...e.clientX和e.clientY来获得鼠标当前的位置 既然能够获取鼠标的位置,那么跟踪鼠标的位置也就不是什么难事了:通过监听mouseenter和mouseleave事件,来获取鼠标出入一个元素时的位置...,并用此坐标来当作鼠标的位移距离,监听mousemove事件,来获取鼠标在元素上移动时的位置,同样地用此坐标来当作鼠标的位移距离,这样一个跟踪鼠标的效果就实现了。

1.6K20

我写CSS的常用套路(附demo的效果实现与源码)

这就是所谓的交错动画:通过设置不同的延迟时间,达到动画交错播放的效果。...但这样明显不对啊,这为啥能被看见呢?不应该把它给“挡”起来吗? 于是乎,给按钮加上overflow: hidden,光在按钮外的位置时就被隐藏起来了。 ?...当CSS动画中有属性无法从CSS中获取时,自然就会使用到它了 跟踪鼠标的位置 目前CSS还尚未有获取鼠标位置的API,因此考虑用JS来进行 通过查阅相关的DOM API,发现在监听鼠标事件的API中,可通过...e.clientX和e.clientY来获得鼠标当前的位置 既然能够获取鼠标的位置,那么跟踪鼠标的位置也就不是什么难事了:通过监听mouseenter和mouseleave事件,来获取鼠标出入一个元素时的位置...,并用此坐标来当作鼠标的位移距离,监听mousemove事件,来获取鼠标在元素上移动时的位置,同样地用此坐标来当作鼠标的位移距离,这样一个跟踪鼠标的效果就实现了。

1.4K40

Three.js - 走进3D的奇妙世界

2)相机 相机是用来拍摄的工具,通过控制相机的位置和方向可以获取不同角度的图像。...摄像机视锥体垂直视野角度 aspect — 摄像机视锥体长宽比 near — 摄像机视锥体近端面 far — 摄像机视锥体远端面 2)正交相机 使用正交相机时无论物体距离相机远或者近,在最终渲染的图片中物体的大小都保持不变...var camera = new THREE.PerspectiveCamera(45, width/height, 1, 100); camera.position.set(5,10,25); // 设置相机的位置...6.1 点光源 点光源类似蜡烛放出的,不同的是蜡烛有底座,点光源没有底座,可以把点光源想象成悬浮在空中的火苗,点光源放出的光线来自同一点,且方向辐射向四面八方,点光源在传播过程中有衰弱,如下图所示,点光源在接近地面的位置...6.2 平行 平行模拟的是太阳光,光源发出的所有光线都是相互平行的,平行没有衰减,被平行光照亮的整个区域接受到的光强是一样的。

8.3K20

光学相控阵列

上周笔记介绍了基于硅芯片的室内无线通信进展,其核心器件是硅基的相控阵列。这一篇笔记主要介绍光学相控阵列。...如果不同通道间的相位差为0,输出光束的方向不变。如果不同通道的相位满足等差数列(相邻通道的相位差为常数),经过相干叠加后,波前的方向发生改变,从而实现光束偏转。不同的相位差大小,对应不同的调节角度。...施加电压后,HCG的位置发生变化,引起场的相位变化。整个OPA由多个这样的单元构成。 ? (图片来自文献2) 该方法的优势是调制速度快,但是光束偏转的角度非常小,应用受限。...基于OPA的激光雷达,通过动态调节光束的出射角度,接收其反射信号,从而知晓目标的位置、形貌等信息。如果说激光雷达是无人驾驶汽车的眼睛,那么光学相控阵列决定了这个眼睛的视场、反应速度。...作为硅潜在的应用领域之一,笔者会持续关注。 文章中如果有任何错误和不严谨之处,还望大家不吝指出,欢迎大家留言讨论。 ---- 参考文献: M. J. R.

3.8K12

Three.js 手写跳一跳小游戏(上)

所以要按照 y > z > x 的关系来设置点光源位置。 确实,渲染出来的效果是我们想要的。 只不过每个立方体的反光不同,我们想让每个立方体都一样,怎么办呢?...那就不能用点光源 PointLight 了,要换成平行 DirectionalLight。...玩家移动多少,摄像机移动多少,这样是不是就相对不变了?也就是玩家一直在镜头中央了?...然后当点击的时候,玩家移动,并且设置摄像机的位置和焦点的目标位置: document.body.addEventListener('click', () => { player.position.z...然后在点击的时候不再直接改变 player 位置,而是设置 targetPlayerPos 并且设置一个 speed: 这样每帧渲染的时候都会调用 movePlayer 改变玩家位置

27520

前端新玩具——webGL简介

轴跟canvas是逆向的,这是一个右手坐标系 网格、多边形和顶点 网格(Mesh)是绘制3D图形的一种方法,它是由一个或多个多边形组成的物体,每个顶点的坐标(x,y,z)定义了多边形在3D空间中的位置...仿射变换 仿射变换:大概就是对原坐标做一些羞羞的事情然后获取他们新坐标的值。 下面图略丑请凑合看 平移 ?...这里我们使用Three.js。...Three.js 是一个js编写的第三方库,运行在浏览器中,提供场景、相机、光照、材质等各种对象——http://threejs.org/ 首先我们创建一个渲染器并添加到页面上 ?...antialias是一个抗锯齿参数,我们设置了渲染器的宽高,简单吧。 渲染器有了我们就可以渲染场景了,然后往里面丢各种东西,想想还有点小激动呢。建场景就一行 ?

2.7K70

前端新玩具——webGL简介

轴跟canvas是逆向的,这是一个右手坐标系 网格、多边形和顶点 网格(Mesh)是绘制3D图形的一种方法,它是由一个或多个多边形组成的物体,每个顶点的坐标(x,y,z)定义了多边形在3D空间中的位置...仿射变换 仿射变换:大概就是对原坐标做一些羞羞的事情然后获取他们新坐标的值。 下面图略丑请凑合看 平移 ?...这里我们使用Three.js。...Three.js 是一个js编写的第三方库,运行在浏览器中,提供场景、相机、光照、材质等各种对象——http://threejs.org/ 首先我们创建一个渲染器并添加到页面上 ?...antialias是一个抗锯齿参数,我们设置了渲染器的宽高,简单吧。 渲染器有了我们就可以渲染场景了,然后往里面丢各种东西,想想还有点小激动呢。建场景就一行 ?

2K10

Three.js - 走进3D的奇妙世界

2)相机 相机是用来拍摄的工具,通过控制相机的位置和方向可以获取不同角度的图像。...摄像机视锥体垂直视野角度 aspect — 摄像机视锥体长宽比 near — 摄像机视锥体近端面 far — 摄像机视锥体远端面 2)正交相机 使用正交相机时无论物体距离相机远或者近,在最终渲染的图片中物体的大小都保持不变...var camera = new THREE.PerspectiveCamera(45, width/height, 1, 100); camera.position.set(5,10,25); // 设置相机的位置...6.1 点光源 点光源类似蜡烛放出的,不同的是蜡烛有底座,点光源没有底座,可以把点光源想象成悬浮在空中的火苗,点光源放出的光线来自同一点,且方向辐射向四面八方,点光源在传播过程中有衰弱,如下图所示,点光源在接近地面的位置...6.2 平行 平行模拟的是太阳光,光源发出的所有光线都是相互平行的,平行没有衰减,被平行光照亮的整个区域接受到的光强是一样的。 ?

9.7K40

Threejs入门之十一:创建旋转的地球

中引入,设置div水平居中* { margin: 0; padding: 0;}#webgl { margin: 0 auto;}5.在根目录下新建index.js文件,并在index.html中引入.../images/earth.js')})创建物体 创建网格对象并使用上面创建的几何体和材质作为参数传给对象,设置对象的坐标位置,并将其添加到场景中const earth = new THREE.Mesh...width = 800const height = 600// 创建相机const camera = new THREE.PerspectiveCamera(75,width/height,0.1,800)设置相机的位置和相机朝向的物体...)// 设置的targetdirectionalLight.target = earthscene.add(directionalLight)创建渲染器// 创建渲染器const renderer =..., 100, 50)// 设置的targetdirectionalLight.target = earthscene.add(directionalLight)// 创建渲染器const renderer

1.3K10

你的登录界面不够花里胡哨,3D 版本的来了

创建一个场景 设置光源 创建相机,设置相机位置和相机镜头的朝向 创建3D渲染器,使用渲染器把创建的场景渲染出来 此时,你就通过three.js创建出了一个可视化的3D页面,很简单是吧!...、强度,同时还可以设置光源的类型(环境、点光源、平行等)、光源所在的位置 【登陆页面】创建光源的例子: // 1.创建环境 const ambientLight = new THREE.AmbientLight...正交相机:无论物体距离相机距离远或者近,在最终渲染的图片中物体的大小都保持不变。「用于渲染2D场景或者UI元素是非常有用的」。...,直到移出相机的位置时回到起点,不断重复这个操作。...至此,该登录页所有与three.js有关的部分都介绍完了。剩下的月球地面、登录框、宇航员都是通过定位和层级设置以及css3动画实现的,这里就不进行深入的讨论了。

82510
领券