From d631da7abcb03c28933efa0c409b8dcde11d8b61 Mon Sep 17 00:00:00 2001 From: lmj01 Date: Sun, 13 Aug 2023 21:09:43 +0800 Subject: [PATCH] update --- cg/bgfx.md | 107 +++------------------------------------ index/computerScience.md | 24 +++++---- 2 files changed, 21 insertions(+), 110 deletions(-) diff --git a/cg/bgfx.md b/cg/bgfx.md index d7e6baa..2017b52 100644 --- a/cg/bgfx.md +++ b/cg/bgfx.md @@ -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是在编译阶段就完成过渡到对应的平台了,运行时还是使用的是各平台对应的运行库。 @@ -59,7 +59,7 @@ shaderc主要支持5个语言分支路线 -## embedded shader - how to use +### embedded shader - how to use ### 声明 ```c @@ -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 顶点与索引数据 @@ -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]() \ No newline at end of file diff --git a/index/computerScience.md b/index/computerScience.md index 359aff5..13e7c9e 100644 --- a/index/computerScience.md +++ b/index/computerScience.md @@ -7,13 +7,7 @@ - [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) @@ -21,12 +15,18 @@ - [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/) @@ -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) @@ -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