2018-9-16lesson.md

Sep 16, 2018

2018/8/27

typedef CF_ENUM(uint32_t, CGImageAlphaInfo) {

kCGImageAlphaNone,               /* For example, RGB. */

kCGImageAlphaPremultipliedLast,  /* For example, premultiplied RGBA */

kCGImageAlphaPremultipliedFirst, /* For example, premultiplied ARGB */

kCGImageAlphaLast,               /* For example, non-premultiplied RGBA */

kCGImageAlphaFirst,              /* For example, non-premultiplied ARGB */

kCGImageAlphaNoneSkipLast,       /* For example, RBGX. */

kCGImageAlphaNoneSkipFirst,      /* For example, XRGB. */

kCGImageAlphaOnly                /* No color data, alpha data only */

};

重写OpenGL 纹理篇出错原因

  1. glDrawxx 函数是必要的,把东西呈现上去的
  2. 纹理贴上去,很糊(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);可以解决纹理模糊问题),有颗粒点,不晓得为啥。
  3. 纹理的图片索引定点,没有完全弄懂。

###
离开“粉粉”二个月了,来谈谈周身变化。

  1. 找了个离得比较近的公司,上下班骑车更快到啦。
  2. 早上9点出发上班。路上买包子,一路吃过去,吃饭正常后,精神状态等都好多了,记忆力现在强多了。
  3. 晚上相对回住所吃饭就早多了。太舒服了好吧。终于不用吃完饭,一看,哦,10点半了。写东西的么得了,现在吃完饭,楼下逛一圈还能有时间写、学东西。棒!
  4. 空闲时间增加,不会那么那么那么的忙累、紧迫。因为“粉粉”给一个功能都是临界时间,然后拼命写,发现中间有逻辑漏洞,或者涉及其他,于是其实相对的给的时间是一个完整开发时间的70%。根本不够,严重不够!
    也由于空闲时间多了,我把OpenGL 终于入门了。小公司同时由于没有产品定位等,目前去做游戏去了,iOS 放一旁。不要太好,我就喜欢学新的东西。哈哈
  5. 周末都是双休了,学知识、去办事情、不亦乐乎啊。
  6. 以前是工作压力大,现在是赚钱压力大,想方法自己赚钱的压力。所以,出了“粉粉”,心里开心。已经没有太多要问的,在里面该学的也拼命学够了。
    开森!

pod install 失败

弹出#-bash: /usr/local/bin/pod: /usr/local/opt/ruby/bin/ruby: bad interpreter: No such file or directory#
查到https://www.jianshu.com/p/e4a70c40bfea
先尝试
$ brew link --overwrite cocoapods
我这里提示#Error: No such keg: /usr/local/Cellar/cocoapods#

于是直接执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
brew reinstall cocoapods

brew install ruby

brew link --overwrite cocoapods
```
完美解决问题



### 价值
之前一直在想,什么能保值?
什么才是有价值的?
RMB?美元?黄金?车子、房子、实物、食物?
RMB 会贬值,如果货币超发,政府和人民抢钱,最后就会和津巴布韦币一样;反正RMB 价值话语权不在自己手上,我不认同;
中国那么多富二代、官二代,一个个拽得一批,我想,我要比王思聪有钱,我说话能“喷喷喷”他一脸、“滋滋滋”格力一姐一脸。有什么好嘚瑟的,最多不赚你钱,凶个奶子。
不跟他们一般见识,百年人生而已,活好自己的,不用比较。他们会斥责下属,说明很看重身份、排名、地位、权力。自己有余粮,活得潇洒,心是红的,眼睛黑的,何必跟这些眼睛变红了,心就变黑了的人计较,继续。
美元?同样,美国也想抢其他国家的钱。货币只是一种等值替换,跟RMB 好那么一丢丢,毕竟他相对信誉体系稳定;
但是,货币不如实物,毕竟人这一生就只有短短百年,如果是“龙哥”这类就更要珍惜,活在社会只有短短10数年,其他都在监狱度过,然后就躺下了。
所以,让自己这一生过的舒坦,那就实物:有车有房、有实物、有食物。我觉得我会那么知足点。
但是,有没有更好的,实物等都是会消耗的,没有前景,所以也不是我想探讨的,我这里直接给出答案:
女人、技术。
就是这两个玩意s,复数。
集合多几个女人,多个技术,持续不断赚钱,才是能保值的。
人多,力量大,自己女人,还有什么不可信任(不过女人多几个后,信任度肯定会降低,毕竟是女人这种生物,爱的不均与,不患寡而患不均嘛)。
技术去学习,各种学习,不必全都创新、研发,只需将他人技术学会,和自己的技能点融合,运用,产出。

最近也一直感受到,其实技术赚钱,这事是可以做到的,但是要持续耕耘,不断推陈出新。反正只要你在领域付出、思考,就能有收获(不要钻牛角尖,大家不是傻子)。
所以接下来大家懂了吧,什么才是将财富聚集、保存实力的方法了吧:多聚集信任之人(最好是女人,毕竟女人好玩嘛),然后深入技术,去运用,去产出。


### Cannot find module 'webpack'
在安装完webpack 之后,出现标题提示,使用`npm link webpack`

## glTexParameteri方法说明

设置纹理循环模式、设置纹理过滤模式

https://blog.csdn.net/d04421024/article/details/5089641

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLEAMP);
GLTEXTURE_2D:操作2D 纹理;GL_TEXTURE_WRAP_S:S方向上的贴图模式;GL_CLAMP:将纹理坐标限制在0.0~1.0范围内,超过作拉伸填充

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
GL_TEXTURE_MAG_FILTER:放大过滤;GL_LINEAR:线性过滤,使用距离当前渲染像素中心最近的4个像素加权平均值;

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
GL_TEXTURE_MIN_FILTER:缩小过滤;GL_LINEAR_MIPMAP_NEAREST:使用GL_NEAREST 对最接近当前多边形的解析度的两个层级贴图进行采样,然后用这两个值进行线性插值。

## glTexImage2D

加载图像数据并上传纹理

https://blog.csdn.net/jeffasd/article/details/78135588

glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)

target: 指定活动纹理单元的目标纹理。GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 或GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

level: 指定详细程度编号。级别0是基本图像级别。级别n是第n个缩略图缩小图像。

internalformat: 指定纹理的内部格式。必须是下列符号常量之一:GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA.

width, height

border: 指定边框宽度。必须为0.

format: 指定纹理数据格式。必须匹配internalformat。 下面符号被接受: GL_ALPHA, GL_RGB, GL_RGBZ, GL_LUMINANCE, GL_LUMINANCE_ALPHA.

type: 指定纹理数据的数据类型。下面的符号值被接受: GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1.

data: 指向内存中图像数据的指针。

## glActiveTexture(GLenum texUnit)

https://www.douban.com/note/627332677/

该函数选择一个纹理单元,线面的纹理函数将作用于该纹理单元上,参数为符号常量GL_TEXTUREi.
Active 应该理解为选择(Select)某纹理单元(Texture Unit),即表示后续的glEnable(GL_TEXTURE_2D) 和glBindTexture(GL_TEXTURE_2D, texture)作用域此所选的纹理单元。

void glActiveTexture(GLenum textureUnit) {
currentTextureUnit = textureUnit - GL_TEXTURE0;
}

void glBindTexture(GLenum textureTarget, GLuint textureObject) {
TextureUnit *texUnit = &textureUnits[currentTextureUnit];
switch(textureTarget) {
case GL_TEXTURE_1D: texUnit->targetTexture1D = textureObject; break;
case GL_TEXTURE_2D: texUnit->targetTexture1D = textureObject; break;
case GL_TEXTURE_3D: texUnit->targetTexture1D = textureObject; break;
case GL_TEXTURE_CUBEMAP: texUnit->targetTextureCube = textureObject; break;
}
}
`

回顾最近学习OpenGLES 学习参考路线

一个合适自己的学习路线比什么什么讲师什么什么高级书都重要一万倍,如果找到了对应的路,将对带给自己事半功倍的效果。
我直接说出根据哪个博客,那些系列,之后再讲这些博客能得到什么。

  1. 简书-清墨
  2. 知乎-叶孤城的iOS杂货铺
  3. 简书-落影

以上是按顺序学习。

清墨的博文教学很简单易懂,这个大哥应该去当老师。很细心,能把他全部学完,就能做个3D 的场景了。他最后一个提问:为什么图片模糊,线段有棱角?
解答是:

  1. glTexParamivgl_Texture2D_Mag_Filtergl_Texture2D_Min_Filter 设置为gl_clamp_to_edge,这样线段就不会有棱角;
  2. self.view.contentFactor 设置为[UIScreen mainSceen].scale, 同时设置各个要放大的地方为相应倍数,这样图片就不会模糊。

iOS 码农介的吴彦祖在知乎开了新的ID:叶孤城。名号多,但是写的也是非常好。同时期待他能写出更多好文章,小弟很受用,非常非常感谢。
他的从0打造一个GPUImage从(1)~(6.2)学完就能做一个pipeline 滤镜。

提醒一点,必须先学完清墨的博文,叶孤城估计太忙,中间一小部分没有完全讲透一些语句的作用,会很疑惑。

落影的文章很全,先学习OpenGLES 文集,不要学太深(目前要用的知识学完就好),然后看GPUIMage 文集。对落影大哥的文集点评一下,他的文集很全,但是注释的关键地方都少,代码关键地方注解还不够。有些很迷糊。

可以理解为升级版学习。