demi的博客

Android OpenGL ES 开发(十): 通过GLES20与着色器交互

1. 获取着色器程序内成员变量的id(句柄、指针)

GLES20.glGetAttribLocation方法:获取着色器程序中,指定为attribute类型变量的id。
GLES20.glGetUniformLocation方法:获取着色器程序中,指定为uniform类型变量的id。

如:

// 获取指向着色器中aPosition的index
maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");
// 获取指向着色器中uMVPMatrix的index
muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");

2. 向着色器传递数据

使用上一节获取的指向着色器相应数据成员的各个id,就能将我们自己定义的顶点数据、颜色数据等等各种数据传递到着色器当中了。

高清语音技术(WBS)及其在手机和蓝牙耳机中的实现

高清语音也被称为宽带语音,是一种能为蜂窝网络、移动电话和无线耳机传输高清、自然语音质量的音频技术。与传统的窄带电话相比,高清语音很大程度上提高了语音质量,减少了听觉负担。

通信产业链上的所有网络和设备都需支持高清语音才能体现出该技术的优点。到2011年6月为止,18个国家运营的20种蜂窝网络,以及33家领先的手机品牌都已支持高清语音。通过部署自适应多速率宽带(AMR-WB)语音编码,GSM, WCDMA(UMTS)和LTE蜂窝网络中已经引入了高清语音。此外, 通过使用改良的子带编码(mSBC)语音编解码技术,无线蓝牙耳机也开始支持高清语音,将免提通话与高语音质量结合在了一起。

高清语音的优点同样可以在现有网络中体现出来。随着窄带网络和设备向高清语音过渡,一种名为带宽扩展(BWE)的语音处理技术可以用来在接收终端设备上模拟类似于高清语音的通话质量,为不支持高清语音的设备提供了一个折中的解决方案。

从窄带到高清语音

自主移动机器人同时定位与地图创建(SLAM)方法概述

1. 引言:

机器人的研究越来越多的得到关注和投入,随着计算机技术和人工智能的发展,智能自主移动机器人成为机器人领域的一个重要研究方向和研究热点。移动机器人的定位和地图创建是自主移动机器人领域的热点研究问题。对于已知环境中的机器人自主定位和已知机器人位置的地图创建已经有了一些实用的解决方法。然而在很多环境中机器人不能利用全局定位系统进行定位,而且事先获取机器人工作环境的地图很困难,甚至是不可能的。这时机器人需要在自身位置不确定的条件下,在完全未知环境中创建地图,同时利用地图进行自主定位和导航。这就是移动机器人的同时定位与地图创建(SLAM) 问题,最先是由SmithSelf 和Cheeseman在1988年提出来的,被认为是实现真正全自主移动机器人的关键。

自动驾驶的核心技术是什么?

用4级或5级来定义自动驾驶很难有一个明确的标准,自动驾驶也不应该搞得很复杂。自动驾驶实际包含三个问题:一是我在哪?二是我要去哪?三是如何去?能完整解决这三个问题就是真正的自动驾驶。所以特斯拉升级后的8000美元的Autopilot 2.0只有部分线控功能,不能算真正的自动驾驶。福特、百度和谷歌这些公司做的才是真正的自动驾驶,远在特斯拉之上,两者云泥之差,天壤之别。

第一个问题是定位,自动驾驶需要的是厘米级定位。

第二个问题是路径规划,自动驾驶的路径规划第一层是点到点的非时间相关性拓扑路径规划;第二层是实时的毫秒级避障规划;第三层是将规划分解为纵向(加速度)和横向(角速度)规划。

第三个问题是车辆执行机构执行纵向和横向规划,也就是线控系统。

目前自动驾驶的技术基本上都源自机器人,自动驾驶可以看做是轮式机器人加一个舒适的沙发。机器人系统中定位和路径规划是一个问题,没有定位,就无法规划路径。厘米级实时定位是目前自动驾驶最大的挑战之一。

【Unity优化】Unity优化技巧进阶

做游戏好多年了,关于游戏优化一直是另开发者头疼的一个问题。因为优化牵扯的内容很多,要求掌握的知识点比较全面。在接下来的系列文章中,我想分享一下自己的一些经验。一些有误或者不完善之处请小伙伴们给我意见,加入一起探讨和学习。

程序消耗

所谓的优化,目的应该是尽可能减弱某种消耗,而在Unity上来说,大概可以分为以下几种:
  •   程序的运行速度
  •   程序的资源消耗
  •   程序的功耗消耗

程序的运行速度,一般是指运行帧率,也包括加载速度。是我们首要考虑的重点,也是将会花最多的精力去探讨的话题,运行帧率是游戏类项目的一个非常重要的性能指标,帧率的下降将直接导致游戏体验的下降。

程序的资源消耗,一般是指包体大小,占据用户客户端的存储空间大小,也包括网络消耗,占据多少带宽。这些虽然不那么影响用户当下的体验,不过指标太高也会降用户接受度。

程序的功耗消耗,一般是指应用程序的耗电量,一款程序做的很好,但是功耗太高,使用后短时间内发热太厉害,也会导致玩家无法使用。这种优化跟显卡直接关联,显卡厂商也有很多优化测试和评估程序帮助我们实现降低功能。

关于区块链,你应该了解这七大职业

作为一个不断发展的产业,区块链对其专业人才的需求量很大。UpWork的报告显示,仅在过去的连续三个季度里,与区块链技术相关的工作岗位就增长了2000%。大公司和初创公司都希望能够雇佣到更多掌握着区块链技术又有相关经验的人才。

在区块链技术领域找到一份工作,不仅可以让你在技术发展的前沿拥有一席之地,还代表着可以获得不菲的薪水。尤其是开发人员,可以在尚未被经济学领域接受的前沿技术中获得更多经验。专家库里受过专业培训的人数相对较少,所以如果你能及时自学,有可能增加被聘用的机会。

以下七大区块链职业是你应该了解的:

1. 入门级区块链工作

图像处理算法——图像常用颜色空间

RGB颜色空间

RGB(red,green,blue)颜色空间最常用的用途就是显示器系统,彩色阴极射线管,彩色光栅图形的显示器 都使用R、G、B数值来驱动R、G、B 电子枪发射电子,并分别激发荧光屏上的R、G、B三种颜色的荧光粉发出不同亮度的光线,并通过相加混合产生各种颜色;扫描仪也是通过吸收原稿经反射或透射而发送来 的光线中的R、G、B成分,并用它来表示原稿的颜色。RGB色彩空间称为与设备相关的色彩空间,因为不同的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同 的色彩显示结果。显示器和扫描仪使用的RGB空间与CIE 1931 RGB真实三原色表色系统空间是不同的,后者 是与设备无关的颜色空间。btw:Photoshop的色彩选取器(Color Picker)。可以显示HSB、RGB、LAB和CMYK 色彩空间的每一种颜色的色彩值。

Android 视频播放器 (一):使用VideoView播放视频

一、简介

作为Android开发,我们不可避免的会接触到视频播放,VideoView做为最简单的播放器,我们是不应该不会的。

下面简单介绍一下VideoView:

  •  VideoView是使用MediaPlayer来对视频文件进行控制的。
  •  VideoView只支持mp4、avi、3gp格式的视频,支持格式相对单一,VideoView支持的格式可以参考MediaPlayer。
  •  VideoView可以播放网络视频,支持的网络视频的协议为:Http协议和RTSP协议两种。

二、VideoView常用方法

Android VideoView类为我们提供了十分方便的视频播放API,其主要方法如下:

一文读懂智慧城市发展趋势

城市化进程滚滚向前,全球城市人口在2050年将高达70%。可持续的城市发展,是21世纪人类社会面临的最严峻的挑战之一,未来城市中,我们的安全状态如何?我们的交通状况怎样?我们的空气,水和食物是否干净卫生?我们的医疗卫生教育会更好还是更坏?我们其他更多的基础设施是否还能为我们舒适的服务?所有这一切,都需要一个更加智慧更加聪明效率更高的城市,让我们的未来还能舒服自由的度过余生,让我们的孩子也有足够的生存空间。请和我一起来看看美国国家城市联盟的报告(节选):智慧城市趋势

一图看懂智慧城市内容

现在每个消费者,产品和基础设施越来越多感知周围的世界,并利用云的计算和存储能力,越来越多与其他设备和人进行通信,这种应用就叫物联网。 智能设备和共享平台越多,产生的消费者偏好和习惯的数据就越多。 但这对城市意味着什么呢? 智能城市正在使用相同的技术连接其不同的公用设施,基础设施和公共服务网格,从而生成实时汇总数据。并可能自动分析数据,这可以帮助更有效地管理整个城市,未来的城市是一个互联的城市,设备以恒定的数据流相互通信,向公众和市政当局提供实时信息,甚至提供解决方案。

下面示意图,囊括了智慧城市的大部分方案和设施

VR开发入门:3D图像的处理过程

在进行第一个VR应用开发之前,我们来看看几个重要的概念:

搭建场景:创建一个可视化、可交互、脚本驱动的虚拟现实环境。

立体渲染:用两个相机渲染场景分别表示用户的左右眼,然后通过Oculus Rift头显的透镜,这两幅图片被重合在一起,从而形成清晰且具有深度视觉的场景。

头动追踪:通过捕获Oculus Rift头显的位置和转向来改变虚拟世界中相机的位置和转向。

我们需要编写大量3D操作的代码来表现我们的想法,可以直接通过OpenGL和DirectX来渲染3D视图,但是这样做太浪费时间了,而且也超出了本书的范畴。我们unity3D游戏引擎来做这件事,Unity用于快速构建VR内容非常合适,最主要的是它非常容易掌握。

在深入研究Unity之前,我们来简单了解一下基本的3D图形技术。如果你对3D图形编程已经非常熟悉了,这部分内容可以直接跳过。

3D图形学基础定义