暑假了,打算写一个3D游戏引擎。
其实也就是把一些类封装一下,让开发更简结,以开源和实用为第一准则。
最近看了本好书--《3D计算机图形学》,真的太精彩了。
虽然是基于OpenGL的,而我更喜欢DirectX3D,但这毕竟是次要的。
它每一点知识都将地很深入,建议大家有时间看一看。
目录:
第1章 引言
第2章 变换与观察
第3章 光照、亮度和着色
第4章 均值与插值
第5章 纹理映射
第6章 彩色
第7章 贝塞尔曲线
第8章 B样条曲线
第9章 光线跟踪
第10章 相交测试
第11章 辐射度
第12章 动画与运动学
附录A 数学背景知识
A.1 预备知识
A.2 向量和向量积
A.2.1 R2中的向量
A.2.2 R3中的向量
A.3 矩阵
A.3.1 R3中矩阵和向量的积
A.3.2 行列式,逆矩阵和伴随矩阵
A.3.3 线性子空间
A.4 多元微积分
A.4.1 多元函数
A.4.2 向量值函数
A.4.3 多元向量值函数
附录B 光线跟踪软件包
B.1 介绍
B.2 高层光线跟踪函数
B.3 光线跟踪API
B.3.1 指定光源
B.3.2 定义相机和视窗
B.3.3 按像素阵列工作
B.3.4 定义材质
B.3.5 定义可见物体
B.3.6 可见的球
B.3.7 可视的三角形和平行四边形
B.3.8 可见的椭球
B.3.9 可视的圆柱体
B.3.10 可视的锥体
B.3.11 可视的平行六面体
B.3.12 可视的圆环
B.3.13 可视的贝塞尔面片
B.3.14 纹理映射
索引
在CSDN上看到了一个很强大的程序:用GDI实现3D,可以变换视角的查看.x文件。
不过想想看,好像实现起来也并不难。。。
和所有基础的3D程序一样,先把视椎变换为单位立方体,
变换矩阵为:
当然,DirectX和OpenGL里都有现成的函数:
//OpenGL
void gluPerspective(GLdouble fovy,
GLdouble aspect,
GLdouble zNear,
GLdouble zFar);
//DirectX
D3DXMatrixPerspectiveFovLH( D3DXMATRIX *pOut,
FLOAT fovY,
FLOAT Aspect,
FLOAT zn,
FLOAT zf
);
单位立方体中的点正交投影得到的(x,y,z)*视口变换矩阵 得到 (x',y',z')。
(x',y')对应屏幕点,z'为其深度,用于点的竞争。
把每个三角面匹配纹理用GDI基本函数画出来就可以了。
CSDN的那个程序
写作业时,写到了2007年高考2卷 理综物理第25题,解第二小问时,得到一个平方为负数的奇怪式子,
感到很神奇,于是baidu了一下。很多人都说这题错了。。
如图所示,在坐标系Oxy的第一象限中存在沿y轴正方形的匀强电场,场强大小为E。在其它象限中存在匀强磁场,磁场方向垂直于纸面向里。A是y轴上的一点,它到座标原点O的距离为h;C是x轴上的一点,到O点的距离为l,一质量为m、电荷量为q的带负电的粒子以某一初速度沿x轴方向从A点进入电场区域,继而通过C点进入大磁场区域,并再次通过A点。此时速度方向与y轴正方向成锐角。不计重力作用。试求:
(1)粒子经过C点时速度的大小合方向;
(2)磁感应强度的大小B。
如果"速度方向与y轴正方向成锐角",那么圆心一定在A,C之间。
设 圆心到y轴距离为b,到x轴距离为a。然后就可以得到h*h=-bl这样神奇的结果。。。
如果"速度方向与y轴正方向成钝角",才可以得到答案
不禁想起“三聚氰胺”毒奶粉事件,全国那么多砖家一起发功,还是会出这样的问题。。。