Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
lmj01 committed Jul 19, 2024
1 parent 24c3727 commit 4cc8f26
Show file tree
Hide file tree
Showing 14 changed files with 211 additions and 71 deletions.
1 change: 1 addition & 0 deletions cg/api.opengl.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- [opengl 4.x](https://registry.khronos.org/OpenGL-Refpages/gl4/)
- [opengl4.5新增了DSA(direct_state_access),更改VAO,VBO,EBO的新用法](https://www.khronos.org/opengl/wiki/Direct_State_Access)
- [OpenGL Error](https://www.khronos.org/opengl/wiki/OpenGL_Error#Meaning_of_errors)
- [WebGL](/cg/tools/webgl.md)

Context上下文是OpenGL的核心,因为OpenGL就是一个状态机,上下文中就保存了各种状态值,是所有执行指令的基础, 这个概念比较接近底层。统一的API是由显卡驱动提供的,负责沟通驱动与系统接口的是一些跨平台的库,如glew,glad,glad是更现代的库。

Expand Down
1 change: 1 addition & 0 deletions cg/canvas.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
> 既然是图形库,那一定使用了很多图形学的技术
- [WebGL Report](https://webglreport.com/)
- [webgl](/cg/tools/webgl.md)

## 尺寸

Expand Down
3 changes: 3 additions & 0 deletions cg/graphics.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# Graphics

- [Khronos社区](https://community.khronos.org/)
- [threejs社区](https://discourse.threejs.org/)

早期3D的API由驱动层提供,所有细节都是驱动贴近硬件实现的,在经过shader发展中,现代硬件越来越复杂了
新时代的抽象图形接口vulkan来了,需要更具象化的过程,就是需要自己负责更多的事情
- 任务调度
Expand Down
101 changes: 99 additions & 2 deletions cg/threejs/grid.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
# 网格

- [How to make an infinite grid.](https://asliceofrendering.com/scene%20helper/2020/01/05/InfiniteGrid/)
- [Grids](https://godotshaders.com/snippet/grids/)
- [Shadertoy: Grid Shader](https://worldofzero.com/posts/shadertoy-grid-shader/)
- [Anti-Aliased Grid Shader](https://madebyevan.com/shaders/grid/)

## 透视下

- [无穷网格,很容易更改为ES6版本](https://github.com/Fyrestar/THREE.InfiniteGridHelper)
- [讨论内容](https://discourse.threejs.org/t/three-infinitegridhelper-anti-aliased/8377)
- [Anti-Aliased Grid Shader](https://madebyevan.com/shaders/grid/)

```ts
// 这个是保持与camera的朝向关联起来,这样不会因为control的改变而改变
Expand All @@ -27,4 +33,95 @@ float getGrid(float size) {
float line = min(grid.x, grid.y);
return 1.0 - min(line, 1.0);
}
```
```
## 正交下
- [ Simple-Grid](https://www.shadertoy.com/view/wdK3Dy)
- [ Tearing Test](https://www.shadertoy.com/view/XtcSzf)
目前通过添加额外的canvas来绘制一层。
满足两种需求
- 不能渲染,不能平移
- 平移的只能是模型,这样方便对应网格进行测量
```js
const geometry = new PlaneGeometry( 1, 1);
const material = new ShaderMaterial( {
uniforms: {
lineStep: { value: 0 },
lineWidth: { value: 0 },
sceneCenterX: { value: 0 },
sceneCenterY: { value: 0 },
},
depthTest: false,
depthFunc: AlwaysDepth,
transparent: true,
vertexShader: `
void main() {
gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);
}
`,
fragmentShader: `
uniform float lineStep;
uniform float lineWidth;
uniform float sceneCenterX;
uniform float sceneCenterY;
void main() {
float x = sceneCenterX - gl_FragCoord.x;
float y = sceneCenterY - gl_FragCoord.y;
float regularX = abs(mod(x, lineStep));
float regularY = abs(mod(y, lineStep));
float masterX = abs(mod(x, lineStep * 10.0));
float masterY = abs(mod(y, lineStep * 10.0));
if (masterX < lineWidth || masterY < lineWidth) {
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.3);
} else if (regularX < lineWidth || regularY < lineWidth) {
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.1);
} else {
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
}
}
`,
extensions: {
// derivatives: true
}
});
geometry.rotateX(Math.PI);
```
```js
function updateSize(camera: OrthographicCamera) {
const { stepSize } = this;
// const vpWidth = camera.right - camera.left;
// const vpHeight = camera.top - camera.bottom;
const { left : vpWidth, bottom : vpHeight} = camera;
// 通过透视投影矩阵拿到当前缩放下的宽高, 参考OrthographicCamera的矩阵构建函数updateProjectionMatrix
const {left: vpLeft, right: vpRight } = function(e){
const t = e.elements[0]
, n = e.elements[12];
return {
left: -(n + 1) / t,
right: (1 - n) / t
}
}(camera.projectionMatrix);
const size1 = vpWidth / (vpRight - vpLeft) / 1e3; // 一米单位转换毫米的单位,计算每个世界坐标单位(pixel/m)像素/米
const tmp1 = Math.abs(stepSize / size1);
const scale = 10 ** Math.ceil(Math.log(tmp1) / Math.log(10)); // 0.1 1 10 100...10倍递增
const size1Physical = size1 * scale; // 得到每个像素的physical长度
const lineWidth = Math.ceil(window.devicePixelRatio);
this.scale.set(vpWidth * 2, vpHeight * 2, 1);
this.position.set(vpWidth/2, vpHeight/2, 0);
const material = (<ShaderMaterial>(<Mesh>this).material);
material.uniforms.lineStep.value = size1Physical;
material.uniforms.lineWidth.value = lineWidth;
material.uniforms.sceneCenterX.value = Math.floor(.5 * vpWidth);
material.uniforms.sceneCenterY.value = Math.floor(.5 * vpHeight);
this.unit = scale;
console.log('grid -- ', this.unit, vpWidth, vpHeight, vpLeft, vpRight)
}
```
目前可以还原,但是还需要处理一下的是多个pass的混合才能达到使用效果。
这里的思想还是需要自己去体会相关逻辑。困惑心里的很多问题慢慢地解决了。
10 changes: 10 additions & 0 deletions cg/tools/webgl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# WebGL

- [threejs](https://threejs.org/)
- [笔记](/cg/threejs/index.md)
- [BabylonJS](https://www.babylonjs.com/)
- [笔记](/cg/babylonjs/index.md)

## [WebGL API](https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API)

[Rendering algorithms implemented in raw WebGL 2](https://github.com/tsherif/webgl2examples)
8 changes: 0 additions & 8 deletions cpl/Java.md
Original file line number Diff line number Diff line change
Expand Up @@ -261,11 +261,3 @@ spring.data.neo4j.uri=http://localhost:7474
前端静态资源,通过元素a跳转到指定的href即可,后台的请求就可以全部使用RestController啦!
不直接返回页面,后面的页面也不处理!




##

### [itext](https://api.itextpdf.com/iText/java/latest/)

- A4 width:595.0, height:842.0
14 changes: 14 additions & 0 deletions cpl/cplusplus.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,20 @@ operator<< (std::cout, 1) // 当初函数调用,传入参数
```
[CPO](https://www.zhihu.com/question/518132411)

### [Copy elision](https://en.cppreference.com/w/cpp/language/copy_elision)

- copy elision拷贝消除,一种拷贝优化,
- RVO(Return Value Optimization)返回值优化
- NRVO(Named Return Value Optimization)命名返回值优化

### auto
```cpp
std::shared_ptr<int> spA = std::make_shared<int>(5);
auto& p = spA; // 引用
auto p = spA; // 赋值
```


## TMP(template metaprogramming)

可参考的内容
Expand Down
30 changes: 0 additions & 30 deletions dev-note/eclipse.md

This file was deleted.

2 changes: 1 addition & 1 deletion dev-note/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
- [build System](/dev-note/buildSystem.md)
- [debug](/dev-note/debug.md)
- [powershell](/dev-note/powershell.md)
- [包管理C++](/dev-note/pkg.md)
- [包管理 -- vcPkg, vfox](/dev-note/pkg.md)
- [maven](/dev-note/maven.md)

- [硬件配置](/dev-note/hardware.md)
Expand Down
12 changes: 11 additions & 1 deletion dev-note/maven.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,12 @@ Spring Boot 通过 Spring Boot Maven Plugin 在 Apache Maven 中提供了对 Spr
<mirror></mirror>
```

## itext7
## [itext](https://api.itextpdf.com/iText/java/latest/)

- [FAQ](https://kb.itextpdf.com/itext/faq)
- [stackoverflow](https://stackoverflow.com/questions/tagged/itext+itext7)

- A4 width:595.0, height:842.0

itext7 的字体涉及到版权问题,基本就是与adobe有关

Expand All @@ -54,6 +59,11 @@ document.add(new Paragraph("hellos你好").setFont(f2));
document.add(new Paragraph("hellos你好").setFont(f3));
```

### [7.1.8](https://api.itextpdf.com/iText/java/7.1.8/)

- [How to fill a rectangle with color?](https://kb.itextpdf.com/itext/how-to-fill-a-rectangle-with-color)


## 工具
- [mvn的仓库](https://mvnrepository.com/)
- [ Spring Initializr在线生成工程模板](https://start.spring.io/)
Expand Down
8 changes: 7 additions & 1 deletion dev-note/pkg.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,10 @@ set(VCPKG_PLATFORM_TOOLSET v140)

- 绑定到shell中
- vfox availabel 查看插件
- vfox search java 查看所有版本
- vfox search java 查看所有版本
- vfox list java 列出当前安装的版本
- vfox current java 显示当前版本
- vfox use sdkName@version 使用当前版本
- vfox use -g --global 全局
- vfox use -p --project 当前目录下
- vfox use -s --session 当前shell
27 changes: 26 additions & 1 deletion exercises/2024.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
# 2024

## daily

### 2024-7-12

学竞赛的必要条件是: 一个是长时间集中注意力的能力,这也和兴趣是高度正相关的;一个是记忆力和理解能力,大家要从小培养。


<details>
<summary>2024-5读大师作品</summary>

有几点理由可以说明为何最优秀的数学家被吸引去读经典著作,首先,他们似乎是天生的善于进行综合的人,数学的真谛在于理解看起来不同的概念间的逻辑联系。最成功的数学家都是涉足面最广、洞察相似之物和将概念联系起来的能力最强的数学家。历史在这样的研究活动中的作用是明显的。对某些相似性的认识往往要经历几代人,而且通过对普遍的历史事实的回顾,往往容易看出各种联系。**进步不是出自于新的概念,而是由于认识到可以把旧概念用于新的情况,这样的事实比我们所愿想象的要多得多。**

<h3>迈克尔·阿蒂亚:二十世纪的数学发展</h3>

从线性到非线性的发展,从非欧几里得几何的不同阶段到Riemann的更一般的几何,都是非线性的。

几何与代数,Euclid几何是数学理论中最早的一个例子,直到Descartes引入现在称为笛卡尔坐标系之前,一直是纯几何,之后是代数形式的尝试。
Newton和Leibniz在分析方面的工作就是Newton以一个几何四维来思考,Leibniz使用形式化代数来思考,到现在的符号就是以Leibniz的符号来表示的。

几何是关于空间的,当你一眼观望完一个房间时,你的大脑所看到的太多东西了,空间直觉spatial intuition或空间知觉spatial perception,这些都是以几何形式出现的。这些都是在一个时间点上看到的结果,几何本质是静止的。而代数本质上是涉及的是时间,一步推导一步推导的结果,都是在上一个时间点上,是在前一个步骤上的结果,特别是计算机出现后的,算法,就是代数的形式化过程中的产物,任何算法,任何计算过程,都是一个接着一个的,并不是那个静止下的结果。

几何本质是静止的,而代数,现代的算法,任何算法,任何计算过程都是有时间维度的。

</details>

## [数学手册(原书第10版)](https://book.douban.com/subject/35350415/)

有种观点,学习数学,起始是从自己开始的,并不是从书本上规划的路径学习起来的。能认识字后,找准自己的能理解的方向下去就可以了。我也不知道我是从那里看到这种观点的。
Expand All @@ -10,4 +35,4 @@

借鉴成功的历史事件是很好的助力,但是原创性的东西必须是从第一性原理出发,自主思考才是最好也最佳的实践过程。如果还我重新来学习,我一定会遵守这个准则。

第一性原理(First Principles)是一个哲学和科学概念,指的是基于最基本的、不可剥夺的事实或假设来推导复杂情况或理论的方法。第一性原理思维是一种强大的思考工具,它鼓励人们深入问题的本质,避免被传统思维或既定框架限制。通过这种方法,可以发现新的可能性和解决方案。然而,它也需要深入的专业知识和对基础概念的深刻理解。
第一性原理(First Principles)是一个哲学和科学概念,指的是基于最基本的、不可剥夺的事实或假设来推导复杂情况或理论的方法。第一性原理思维是一种强大的思考工具,它鼓励人们深入问题的本质,避免被传统思维或既定框架限制。通过这种方法,可以发现新的可能性和解决方案。然而,它也需要深入的专业知识和对基础概念的深刻理解。
58 changes: 38 additions & 20 deletions exercises/math.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,50 @@

## 初等数学

### 方程式

现代方程式几乎已经渗透到科学原理的各个方面,凡是你能想到的领域,经济学,物理学,医学或是什么其他科学领域,都会有方程式的出现。

学习方程式的一些原则

- 推导方程式,使用基本原理引导推导整个过程,体会到方程式只是一堆符合,其意义是由认为赋予的。
- 方程有单位时,请解释其物理意义


### 代数

重视积累:代数就是积累各种代数结构(比如分式求和求下界用权方和,去根号的常用方法等等)

### 组合

组合最重要的是思想

- [高中数学竞赛专题讲座(第二辑).组合构造](https://book.douban.com/subject/3165692/)
- [组合极值论证与构造(高中卷16)数学奥林匹克小丛书](https://book.douban.com/subject/1501703/)
- [图论及其应用](https://book.douban.com/subject/26313250/)

### 几何
初等数学几何学关注的对象多为点、线、面的度量性质,还有它们之间的位置关系等。

重视积累:几何就是积累性质(比如直角三角形的性质,五心的性质等等)与常见结构,

- [浙大出版社的《几何分册》](https://book.douban.com/subject/11501633/)
- [数学奥林匹克命题人讲座(12)册](https://book.douban.com/series/16571)
- [几何变换与几何证题](https://book.douban.com/subject/4918955/)
- [平均值不等式与柯西不等式](https://book.douban.com/subject/1503804/)
- [不等式的证明方法](https://book.douban.com/subject/6977541/)
- [初等不等式的证明方法](https://book.douban.com/subject/6724831/)
- [HIT数学·统计学系列](https://book.douban.com/series/49805)

## 高等数学

## 数论

数论是一个有些特殊的板块,它是唯一一个完整的学科,大学数学系都有一门课是初等数论,基本就是完完整整地讲了一遍高中竞赛的全部内容,不多不少。数论的学习最重要的是知识体系的建立。

- [初等数论-北大出版社](https://book.douban.com/subject/21267842/)
- [数论讲义(上册)](https://book.douban.com/subject/1653408/)[数论讲义(下册)](https://book.douban.com/subject/1237669/)

### 几何

#### 拓扑
Expand All @@ -78,23 +116,3 @@
- [James Munkres. Topology]()
- [John L. Kelley General Topology]()
- [EH Spanier. Algebraic Topology]()

## 观点

<details>
<summary>读大师作品</summary>

有几点理由可以说明为何最优秀的数学家被吸引去读经典著作,首先,他们似乎是天生的善于进行综合的人,数学的真谛在于理解看起来不同的概念间的逻辑联系。最成功的数学家都是涉足面最广、洞察相似之物和将概念联系起来的能力最强的数学家。历史在这样的研究活动中的作用是明显的。对某些相似性的认识往往要经历几代人,而且通过对普遍的历史事实的回顾,往往容易看出各种联系。**进步不是出自于新的概念,而是由于认识到可以把旧概念用于新的情况,这样的事实比我们所愿想象的要多得多。**

### 迈克尔·阿蒂亚:二十世纪的数学发展

从线性到非线性的发展,从非欧几里得几何的不同阶段到Riemann的更一般的几何,都是非线性的。

几何与代数,Euclid几何是数学理论中最早的一个例子,直到Descartes引入现在称为笛卡尔坐标系之前,一直是纯几何,之后是代数形式的尝试。
Newton和Leibniz在分析方面的工作就是Newton以一个几何四维来思考,Leibniz使用形式化代数来思考,到现在的符号就是以Leibniz的符号来表示的。

几何是关于空间的,当你一眼观望完一个房间时,你的大脑所看到的太多东西了,空间直觉spatial intuition或空间知觉spatial perception,这些都是以几何形式出现的。这些都是在一个时间点上看到的结果,几何本质是静止的。而代数本质上是涉及的是时间,一步推导一步推导的结果,都是在上一个时间点上,是在前一个步骤上的结果,特别是计算机出现后的,算法,就是代数的形式化过程中的产物,任何算法,任何计算过程,都是一个接着一个的,并不是那个静止下的结果。

几何本质是静止的,而代数,现代的算法,任何算法,任何计算过程都是有时间维度的。

</details>
7 changes: 0 additions & 7 deletions web/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,6 @@
```


### [WebGL API](https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API)

- [threejs](https://threejs.org/)
- [笔记](/cg/threejs/index.md)
- [BabylonJS](https://www.babylonjs.com/)
- [笔记](/cg/babylonjs/index.md)

### [Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API)
新版的剪切接口,是新标准
```javascript
Expand Down

0 comments on commit 4cc8f26

Please sign in to comment.