数学之美--计算机图形学中的数学方法论

我的github:

https://github.com/jackyblf

我的公众号:

早期研究3D程序开发的程序员最大的情怀就是从无到有,自己实现一个游戏引擎。当时的我也是充满着这种复古情怀!!

以前的demo大部分都用c++写的,现在尽力全部改成html5+canvas/webgl版本

正在改写demo,编写文章,敬请期待

09年台式机out of order了,一直到去年年底,买了个硬盘数据线,把以前的代码全部拷贝出来了,万幸没损坏!!!

08年的vs2005代码,在vs2015中,竟然无法编译通过了,花时间调试一下,让代码能够运行起来!

2008年及以前写的c/c++代码库:

1、基础库 (数学库,Util(100多个函数用于数学,碰检,mesh拓扑计算,动画,投影矩阵各种技巧等),logger,parser,树,动态数组类,虚拟文件系统,图形(DDS,TGA,BMP,JPG,不使用第三方库)
2、空间分割(八叉树,bsp树,kd树,四叉树,grid系统等)
3、场景管理(室内基于portal管理(使用doom3 proc文件),室外实现了geomipmap地形,以后要将室内室外统一由Portal进行管理),室内使用doom3地图(40多间房间),在2008年购买的笔记本上不带shader可以跑700帧左右。该portal遍历算法不需要将Portal多边形上的点变换到屏幕坐标系然后求交测试(doom3engine实现方式),只需要一次dot操作就可以知道是否portal可见,速度极快

4、碰撞检测实现了点线面体空间级别的碰撞,collisionScene类管理动静态物体碰检,实现物体stepSlideMove方式运行
5、实现了Md5骨骼动画读取与运行

6、渲染系统暂时使用gl函数,渲染系统核心是渲染数据流组织和BATCH,多种方式可实现,做实验,哪些效率最好。目前用glEffect进行渲染(2016年:目前github有几个很强的跨平台,基于command buffer实现的多线程渲染库,可以直接合并进去)
7、渲染特效:shadowvolume(zfail-zpss自动切换,lightScissor + depthBoundTest),shadowmap,以及贴花系统(多边形任意表面贴花技术)
8、编辑功能,实现了类似3DMAX的编辑系统以及photoshop 2d 编辑系统

(2017年1月更新)目前已经移植到html5+js平台,总计1500行以上js代码,使用canvas2d渲染。

9、曲线曲面系统,各种曲线或曲面,本质上会发现,仅仅是基矩阵的不同而已。实现前向差分法,大幅度提高曲线曲面的拟合速度

其实基础模块基本都实现了,到目前为止主要侧重于碰检和场景管理方面,在渲染方面还很弱,但是基础模块完成后,其他方面就是时间问题了,以后重点放在渲染器和特效方方面。最重要的一件事要实现GUI系统,使用fastDelgate上实现一个多播系统,然后实现类似flash的冒泡事件系统,参考webkit dom event事件实现机制,做过一些实验,完全可行。(2016年: 在2009年,从webkit中将dom冒泡event系统独立,并在fastDelegate上实现)
该demo尽量避免使用第三方库,主要是学习和巩固知识使用,以后会重构,但是一些基础函数和库不要大改变,而场景管理和渲染器方面变动会很大,脱离doom3体系结构,抽象出一致的编程接口

2D/3D 相互交互,大量的数学操作,各种投影矩阵的变换,局部刷新裁剪矩阵

ar增强现实技术(opencv实现图像识别,opengl进行渲染显示)

虚拟现实中的应用(使用廉价的google开源硬件):

旋转的局部坐标系和固定的全局坐标系

将3D朝向矩阵引入到2D系统中,去除掉sin/cos atan2等三角函数调用,要知道三角函数是消耗cpu的大户之一

公转,自传,billboard矩阵,粒子系统,经典的数学应用

数学在嵌入式中的应用

数学在金融行业APP中的运用

参考书籍

时间: 02-08

数学之美--计算机图形学中的数学方法论的相关文章

3D游戏与计算机图形学中的数学方法-点线面

<易传·系辞上传>:”易有太极,是生两仪,两仪生四象,四象生八卦.” 借用一下古代先人们的智慧引一下本文的主题-三维图形中的点线面,在三维几何中也有一句话可以和上面的话相对应:由点成线,由线成面,由面成体,由体成形. 点向量和方向向量 首先我们要明确在三维空间中表示点的点向量和表示方向的方向向量的区别,例如A(x,y,z)可以表示一个点向量,而OA(x,y,z)就表示一个方向向量.方向向量在平移过程中将保持不变. 3D空间中的直线 3维空间中有两个点P1和P2,那么通过这两个点的直线可以定义为

3D游戏与计算机图形学中的数学方法-变换

1变换 在3D游戏的整个开发过程中,通常需要以某种方式对一系列的向量进行变换.通常用到的变换包括平移,缩放和旋转. 1.1通用变换 通常可将n x n可逆矩阵M看成是一个从坐标系到另一个坐标系的变换矩阵.M的列给出了坐标系从原坐标系到新坐标系的映射.例如M是一个n x n可逆矩阵,当M与向量(1,0,0),(0,1,0)和(0,0,1)相乘时,可以得到 类似地,M-1的列给出了坐标轴从新坐标轴系到原坐标轴系的映射.这样对于任意给定的线性无关的向量U,V,W可以构造一个变换矩阵,该矩阵将这些向量映

计算机图形学中的种子填充算法c++程序实现

种子填充其实很简单,计算机图形学中介绍的使用栈,感觉作者是不是脑子进水了,直接使用一个队列用广搜就可以了啊,但是我就懒得写了,直接一个递归算了,有兴趣的同学自己试一试 #include<graphics.h>#include<conio.h>  #include<stdio.h>#include<math.h>int Graph[500][500] ; void scanline_seed_fill(int color,int sx,int sy){ Gra

计算机图形学中的经常使用模型

今天在网上搜了一下图形学里面比較经常使用的模型.认为挺有意思,把它们收集起来,总结一下. 1.Lena/Lenna 这个模型是一个美女,名字叫Lena,是1972年11月<Playboy>(国内译为:花花公子)杂志的一个插图. 不知道花花公子杂志为何物的请自己去百度. Lena是瑞典人.依据英语标准发音,译为Lenna. 以下来张截图: 花花公子中的原图:http://www.ee.cityu.edu.hk/~lmpo/lenna/len_full.jpg 1973年6月.美国南加州大学的信号

计算机图形学中的常用模型

今天在网上搜了一下图形学里面比较常用的模型,觉得挺有意思,把它们收集起来,总结一下. 1.Lena/Lenna 这个模型是一个美女,名字叫Lena,是1972年11月<Playboy>(国内译为:花花公子)杂志的一个插图.不知道花花公子杂志为何物的请自己去百度. Lena是瑞典人,根据英语标准发音,译为Lenna.下面来张截图: 花花公子中的原图:http://www.ee.cityu.edu.hk/~lmpo/lenna/len_full.jpg 1973年6月,美国南加州大学的信号图像处理

计算机图形学中的中点画线,中点画圆,Bresenham画线与画圆算法

#include<iostream>#include<graphics.h>  // 这样引用 EasyX 图形库#include<conio.h>#include<time.h>#include<math.h>#include<stdlib.h>using namespace std; //Bresenham画线void Bresenham_line(int x0,int y0,int x1,int y1){ int x,y,dx,

计算机图形学中的边标志算法c++程序实现2

摘要: 讲一讲这个程序遇到的错误 1.就是最后一个点,当他只有一个点的时候,他就是吧后面的全部填充,这是因为标志填充算法一定要有两个边界才可以,我解决这个问题的办法是错开一个点 2.就是当有三个点的时候,第2和3点中间部分就不会被填充了,以上的解决办法就是错开一点,也就是把第二个点变成两个点 3,使用中点画圆方法画的圆,在这个算法中,由于他选择的点有可能不是下一个点,而是跟当前点平行的那一个,这个时候他就会填充的是这两个点,所以会有下面运行结果图中心形上方的填充空白,尤其是弧度比较水平的时候 #

3D计算机图形学零起点全攻略(转)

3D计算机图形学零起点全攻略 这篇文章不包含任何技术知识,但我的希望它能指明一条从零开始通往3D领域的成功之路.我将罗列我看过的相关经典书籍作为学习文献,阅读规则是每进入下个内容,我都会假设已经完成前面全部的文献研习内容.相信若能按照这条路走到最后,会有所进益. 完成整部分内容需要具备基础: 英语:CET4以上 数学:精通数字加减乘除法. 物理:基本力学. 计算机:了解电脑的基本知识,熟练使用Windows. 电脑配置: CPU:双核1.5以上 显卡:NVIDIA GeForce8400G MS

数学之美番外篇:平凡而又神奇的贝叶斯方法

转载自:http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/ 概率论只不过是把常识用数学公式表达了出来. ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法. ——题记 目录 0. 前言 1. 历史