大巧不工


  • 首页

  • 归档

  • 标签

  • 分类

  • 搜索

java中boolean类型的大小

发表于 2018-01-08 | 分类于 技术

在Java中,int,float,double等基本类型所占字节大小都有明确说明,唯独boolean类型没有,那么boolean类型的大小究竟是多少呢?

Java SE Specification(java 8)

先看java官方规范中怎么说,规范网址,下面是摘抄:

The boolean Type

Although the Java Virtual Machine defines a boolean type, it only provides very limited support for it. There are no Java Virtual Machine instructions solely dedicated to operations on boolean values. Instead, expressions in the Java programming language that operate on boolean values are compiled to use values of the Java Virtual Machine int data type.

阅读全文 »

daydream_media_app

发表于 2018-01-03
  1. 图片视频格式的检测

将Texture按宽高比降采样,假设图片比例是1:1,那么用于检测格式的texture大小是16x16.
检测的方式是按照三色值差异,

以判断左右格式为例,左右两部分相对应的像素分别进行比较

•遍历后得到八组diff值,diff值累加后求平均作为左右格式判断依据,如果小于经验值,这可认为是左右格式
x = pixel.x /= range.x

y = pixel.y /= range.y

z = pixel.z /= range.z

diff = (x1-x2,y1-y2,z1-z2)

range是最亮像素与最暗像素的差值

然后所得diff值的平方相加即为总差异值,总差异值除以判断的像素数量为单个像素差异值R,取R的元素的平均值用于比较
同理得上下格式的判断结果

同理可得上下格式的差异值
SIMILARITY_THRESHOLD 经验值,0.025,差异值低于改值即为stereo图片

  1. 手柄拖拽屏幕的实现
    2.1 三个事件:OnBeginDrag OnDrag OnEndDrag

2.2 四元数:
求模
N(q) = |q| = x2 + y2 + z2 + w2

求共轭
q=(-x, -y, -z, w)
根据定义易得:(hk)
= kh;(在屏幕旋转时有用,后面讲到)

求逆
对于向量逆的定义, q-1 =q/|q|2
对于单位四元素,分母为1,q-1 = q
=(-x, -y, -z, w)

无交换律,有结合律

unity里的四元数都是单元四元数,莫均为一,所以共轭与逆一致

2.3 四元数逆在旋转中的意义
问题:将空间点P(1,0,1)绕轴(0,1,0)旋转90度,将会得到点(1,0,-1)

张国强 > MediaApp技术点 > 1获.PNG

•使用四元数计算过程如下:
将点P四维化为 (1,0,1,0)

四元数 q = ( (0,1,0)sin45 , cos45)

计算 qpq-1可得结果P`

•q-1 = (-(0,1,0)sin45,cos45) = ((0,1,0)sin-45,cos-45)
即四元数的逆是按同一旋转轴反方向旋转同一角度

2.4 拖拽屏幕
效果:屏幕始终与双眼平行,看向屏幕时视线与屏幕垂直,拖拽过程中光标在屏幕上的位置不变

2.4.1 实现拖拽
//根据光标的方向得到绕x轴和y轴的旋转角,余弦定理,根据旋转角得到四元数,仅计算水平角度和垂直角度(具体实现未给出,可自行计算)
Quaternion yawPitchRotation = CalculateControllerYawPitchRotation(eventData);
//根据新的光标四元数和上一次的光标四元数,得到新的屏幕的旋转四元数,Quaternion.Inverse(lastYawPitchRotation)会使屏幕先回到上一次旋转之前的状态,再乘以新的光标四元数,就是屏幕新的位置,这样就使光标在屏幕上的点的位置不变,yawPitchRotationDelta 可理解为旋转偏差量
Quaternion yawPitchRotationDelta = yawPitchRotation Quaternion.Inverse(lastYawPitchRotation);
transform.parent.localRotation = yawPitchRotationDelta
transform.parent.localRotation;

yawPitchRotation:当前帧手柄相对于相机的旋转

lastYawPitchRotation:上一帧手柄相对于相机的旋转

yawPitchRotationDelta:两帧之间旋转差值

Quaternion.Inverse:取逆

2.4.2 矫正扭转

光标的旋转是一个点的四元数,把点的旋转应用在面上时,由于面与旋转轴的夹角,各部分在旋转相同角度下位移不同,会出现扭转,所以如果要保证屏幕始终平行两眼,在拖拽完成后要进行矫正

Vector3 eulerAngles = transform.parent.localRotation.eulerAngles;
eulerAngles.z = 0.0f;
lastFinalRotation = Quaternion.Euler(eulerAngles);
lastYawPitchRotation = yawPitchRotation;
if (enableRotation)
{
transform.parent.localRotation = lastFinalRotation;
}

3.屏幕反光的实现
•两个元素,灯光颜色和强度
•颜色:计算平均颜色,播放时,每隔多帧计算一次 blit 4x4,得4x4的texture,计算三色的平均值
•强度:设定两个高度临界值,当屏幕位置低于最低值时,灯光完全消失,在临界值之间时,灯光强度与屏幕高度和light高度有关,当屏幕位置大于最高值时,灯光亮度只与light高度有关
float intensity =Mathf.Clamp01((y - heightMin) / (heightMax - heightMin));

unity中使用shader增强视频

发表于 2018-01-03 | 分类于 技术

使用shader对视频texture做特效处理

该功能主要在片元着色器中实现,考虑到是移动设备,因此要兼顾考虑效果和性能。
在shader中的实现,这里只展示像素增强算法,关于shader的结构请看其他

变量

_MainTex

当前渲染的texture

_MainTex_TexelSize

_MainTex_TexelSize这个变量的从字面意思是主贴图 _MainTex 的像素尺寸大小,是一个四元数,是 unity 内置的变量,它的值为 Vector4(1 / width, 1 / height, width, height)

阅读全文 »

adb_tips

发表于 2018-01-02 | 分类于 技术

修改系统文件

以修改hosts为例
首先手机需要root

  1. adb root
  2. adb remount
  3. adb push 将修改过的hosts文件push进去

DFT 和 DTFT

发表于 2017-12-31 | 分类于 技术

几种傅立叶变换

  1. 连续时间周期信号:处理时间连续并且具有周期性的信号,其频域上离散,非周期。
  2. 连续时间非周期信号:处理时间连续但是不具有周期性的信号,其频域上连续,非周期。
  3. 离散时间非周期信号:处理时间离散,不具有周期性的信号,其频域上连续,有周期性。
  4. 离散时间周期信号:处理时间离散,具有周期性的信号,对应离散时间傅里叶变换其频域上离散,有周期性。
阅读全文 »

博客建立

发表于 2017-12-27 | 分类于 博客

遇到的问题

公式

打开mathjax

如果使用了主题,在主题的_config.yml中打开mathjax
1
2
3
4
5
# MathJax Support
mathjax:
enable: true
per_page: true
cdn: //cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML
阅读全文 »

卷积与傅立叶

发表于 2017-12-26 | 分类于 技术

卷积

函数定义:设:$f(x)$, $g(x)$ 是R1上的两个可积函数,作积分
$${\int_{-\infty}^{\infty}}f(\tau)\ast\,g(x-\tau)\,\mathrm{d}\tau$$

可以证明,关于几乎所有的实数$x$,上述积分是存在的。这样,随着$x$的不同取值,这个积分就定义了一个新函数$h(x)$,称为函数$f$与$g$的卷积,记为$h(x)=(f\ast\,g)(x)$。
容易验证,$(f\ast\,g)(x)=\,(g\ast\,f)(x)$,并且 $(f\ast\,g)(x)$ 仍为可积函数。这就是说,把卷积代替乘法,$L1(R1)$空间是一个代数,甚至是巴拿赫代数。
离散表达:
$$y(n) = \sum_{i=-\infty}^{\infty}x(i)h(n-i) = x(n)\ast\,h(t)$$

阅读全文 »

图像处理基础

发表于 2017-12-26 | 分类于 技术

锐化

锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰。从频域的角度理解是增强图像的高频分量。目前主流软件锐化方式主要有全局锐化和局部锐化,本文主要涉及全局锐化,局部今后另说。

全局锐化

原理:理论上来说,全局锐化是滤波算法的逆应用
滤波结果 = 过滤掉图像细节的输入图像
图像细节 = 输入图像 - 滤波结果
锐化结果 = 输入图像 + 锐化系数 X 图像细节
所以说有多少种滤波算法,就有多少中锐化算法。

锐化的核心目的是强化图像轮廓,比如人体的眼眶,帽子的帽沿,将非轮廓的地方锐化,对于增强整体的形态并无太大帮助。而全局锐化是将整个图像进行无差别增强,这也是全局锐化的不足之处。

阅读全文 »

Spring-MVC-Hibernate-搭建后台服务

发表于 2017-12-26 | 分类于 技术

框架介绍

Spring MVC

Spring MVC基于传统Spring的MVC模式的开发框架。 MVC设计模式在Spring MVC中表现为 模型 - 视图 - 控制器,模型封装应用程序的数据和一般他们会组成的POJO(Plain Ordinary Java Object)简单的Java对象,视图(View)是负责呈现模型数据并且一般由它生成HTML输出,客户端浏览器来解析显示,控制器(Controller)负责处理用户的请求,并建立适当的模型,并把它传递给视图渲染。

阅读全文 »

Jni开发知识点

发表于 2017-12-26 | 分类于 技术

JavaVM和JNIEnv

jni定义了两个关键的结构体,JavaVM和JNIEnv,两者都拥有指向方法表的指针,在c++中,两者是拥有指向方法表和一系列jni方法的类,Android developer中说是类,实际开发中在jni.h中发现是结构体)。
javavm提供invocation interface方法,可以创建和销毁javavm,理论上每个进程可以有多个javavm,但是Android中只允许有一个。
jnienv提供大部分的jni方法,native方法的第一个参数就是jnienv。jnienv使用个threadlocal存储,因此线程间无法共享。如果某一段代码中无法获得jnienv,可以共享javavm并调用GetEnv来获得当前线程的jnienv,如果当前线程没有,可以使用AttachCurrentThread创建。

阅读全文 »
1…345
99个小号

99个小号

41 日志
4 分类
14 标签
GitHub Weibo
© 2017-12 — 2019 99个小号