Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
lmj01 committed Aug 13, 2023
1 parent 851c0ec commit d631da7
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 110 deletions.
107 changes: 7 additions & 100 deletions cg/bgfx.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ cd bgfx/bgfx/examples/runtime

bgfx没有对shader进行语法分析,无独有偶,three.js也是这样简单粗暴,否则复杂的就更高了,也许unity和ue4之类的商业公司可能使用类语法树进行处理的,目前还没有接触到相关的知识,虽然ue4也开源了,但代码复杂的太高了,还混合了语言C++与C#,环境搭建也负责。

# bgfx--shader
### bgfx--shader

使用GLSL的语法,添加一堆宏来处理平台的差异,且提供了shaderc工具,编译shader为对应平台的shader。也就说shader是在编译阶段就完成过渡到对应的平台了,运行时还是使用的是各平台对应的运行库。

Expand Down Expand Up @@ -59,7 +59,7 @@ shaderc主要支持5个语言分支路线



## embedded shader - how to use
### embedded shader - how to use

### 声明
```c
Expand All @@ -86,7 +86,7 @@ extern const uint32_t xs_xxx_pssl_size;

***

## regular shader - how to write and use
### regular shader - how to write and use
### vertex & index buffer
顶点与索引数据

Expand Down Expand Up @@ -183,102 +183,9 @@ bgfx::ProgramHandle m_program = bgfx::createProgram(vsh, fsh, true);
bgfx::submit(0, m_program);
```
# bgfx-examples
> bgfx的demo
## 参考与引用
很常见的跨平台框架,使用宏来初始化main函数,核心的放在实现上面,把平台相关的剥离开。
这样就只关注测试的demo实现的逻辑了。
## 00-helloworld
entry::AppI的三个接口
1. init,初始化 render的基本参数和imgui
2. shutdonw,与init相反
3. update, 在这里绘制更新事件
update函数中是有更新才重新绘制
```c++
if(!entry::processEvents()) {
// 重新绘制
// bgfx::dbgTextImage()
}
```
简单的绘制了文字,图像。因为尽是渲染库,接口都毕竟底层,数据都是raw类似的。

## 01-cubes
使用bgfx的shader绘制了cube方阵
首先声明了一个顶点的数据格式,然后就是五种顶点渲染模式
在init中创建一个Vertex Buffer,五个Index Buffer对象。
在update中的双循环中,每个cube的transform都不同,但是渲染数据,状态,着色器每个cube都独立提交,就造成了如此结果。

## 02-metaballs
rendering with transient buffer and embedding shaders

注意embedded shader的用法 ,参考shader中的描述。

在指定空间内随机生成64个sphere

遍历grid,对每个grid中64个sphere的场量值

遍历grid,为每个grid生成向量,向量由场量值来计算,所以不能放在一个遍历中

遍历grid,生成对应的顶点数据,由顶点数据构造等值面,再进行三角化成曲面

构建metaball的绘制流程:

### 1. 初始化 - 基于体素的绘制方法
Voxel就是一个小的图元primitive,图元由8个节点组成,由图元构成整个场空间。在场空间中均匀分布(N+1)x(N+1)x(N+1)个点,相邻8个点组成一个体素,这样就有NxNxN个体素,每个点的势能初始化为0.
### 2. 计算各个网格点的势能
先在场景中设置两个sphere,A和B,A的球心为(x1,y1,z1),能量为E1,B的球心为(x2,y2,z2),能量为E2,计算出的空间点(x,y,z)势能的势函数为
$$
E^{'}(x^{'},y^{'},z^{'}) = \frac{E^2}{(x-x^{'})^2+(y-y^{'})^2+(z-z^{'})^2} \\
对于每个网格点,坐标为(x^{'},y^{'},z^{'}),则它的势能可以表示为
\\
E(x^{'},y^{'},z^{'}) = \frac{E_{1}^2}{(x_1-x^{'})^2+(y_1-y^{'})^2+(z_1-z^{'})^2}+\frac{E_{2}^2}{(x_2-x^{'})^2+(y_2-y^{'})^2+(z_2-z^{'})^2}
$$
### 3. 寻找等势面-步进式立方体算法marching cube

## 03-Ray March

view0是一个proj透视,view1一个ortho正交且无视图。

但view1是真正绘制的过程,构造视口平面的四个点,两个三角形的 渲染模式。view1中需要的矩阵又是通过view0的视图来获取其逆矩阵的。也就是说view1是绘制的结果,而view0是查看结果的视图。

重点在于fragment中,这里使用的是SDF,不是ray等值面。

## 04-Mesh
引入了Mesh概念,算是一个辅助概念,与底层渲染无关,可以值得分析一下mesh的实现。

## 05-instancing
与01-cube一样的数据,不过使用instance方式绘制了121个cube,接口封装得还很干净,要去分析细节需要很长功夫了。

## 06-bump

凹凸贴图作用于逐像素渲染的结果

类似其他的逻辑,渲染库在init初始化阶段声明各种shader变量

## 07-callback
```c++
struct BgfxCallback : public bgfx::CallbackI {}
class BgfxAllocator : public bx::AllocatorI {}
bgfx::Init init;
init.callback = &m_callback;
init.allocator = &m_allocator;
```
## 08-update
从结果来看是纹理的实时update,没太看明白,根据界面大概明白了,细节没有吃透
```c++
```

## 09-hdr

## 10-font

## 11-fontsdf

## 12-lod
- [Real-Time Polygonal-Light Shading with Linearly Transformed Cosines](https://eheitzresearch.wordpress.com/415-2/)
- [demo with code](blog.selfshadow.com/publications/ltc/ltc_demo.zip)
- [LightMap开源烘焙工具XAtalas]()
24 changes: 14 additions & 10 deletions index/computerScience.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,26 @@
- [C](../cpl/c.md)
- [Cplusplus](../cpl/cplusplus.md)
- [lua](../cpl/lua.md)

### 数据结构

- [hash](../cpl/data.structure/hash.md)
- [LRU](../cpl/data.structure/LRU.md)

## Dev
### Dev

- [CMD](../dev-note/cmd.md)
- [cmake](../dev-note/cmake.md)
- [git](../dev-note/git.md)
- [svn](../dev-note/svn.md)
- [wsl](../dev-note/wsl.md)

## Database
### Database

- [redis](../database/redis.md)
- [MySql](../database/mysql.md)
- [sql](../database/sql.md)


### 数据结构

- [hash](../cpl/data.structure/hash.md)
- [LRU](../cpl/data.structure/LRU.md)

## ComputerGraphics

- [Real-Time Rendering Resources](https://www.realtimerendering.com/)
Expand All @@ -39,6 +39,8 @@
- [github](https://github.com/Pomax/bezierjs)

### 网格
- [GMesh]()
- [Triangulate Efficient Triangulation Algorithm Suitable for Terrain Modelling or An Algorithm for Interpolating Irregularly-Spaced Data with Applications in Terrain Modelling](http://paulbourke.net/papers/triangulate/)
- [多边形网格算法](http://paulbourke.net/geometry/polygonmesh/)
- [点至三角形的最近点](https://zhuanlan.zhihu.com/p/458837573)
- [Brillouin zone visualisation tool,维诺图Voronoi Diagram,Lattice格](https://github.com/tobycrisford/bravais-lattice-fermi-surfaces)
Expand Down Expand Up @@ -81,9 +83,11 @@
- [PAG Portable Animated Graphics](https://pag.art/)
- [3d model file](../cg/modelFile.md)

## DataStructure
### paper

### Hash
- [Real-time Shading with Free-form Planar Area Lights using Linearly Transformed Cosines](https://www.jcgt.org/published/0011/01/01/)
- [github](https://github.com/Paul180297/BezierLightLTC)
- [Real-Time Polygonal-Light Shading with Linearly Transformed Cosines](https://eheitzresearch.wordpress.com/415-2/)

## Web

Expand Down

0 comments on commit d631da7

Please sign in to comment.