
【CG】Shadow Mapping 使用OpenGL实现
如果你玩过现代 3D 游戏那么其中大多数的的动态物体阴影都是 **阴影映射(Shadow Mapping)**这个算法的变种。 所以为了研究其他的现代的实时动态阴影我们必须先学习一下 Shadow Mapping 的原理,以及如何使用OpenGL去实现。 ...

如果你玩过现代 3D 游戏那么其中大多数的的动态物体阴影都是 **阴影映射(Shadow Mapping)**这个算法的变种。 所以为了研究其他的现代的实时动态阴影我们必须先学习一下 Shadow Mapping 的原理,以及如何使用OpenGL去实现。 ...

【OpenGL】使用曲面细分着色器绘制Bezier曲线 这篇文章将直接介绍使用曲面细分着色器绘制Bezier曲线,而不会介绍Bezier曲线,但是会介绍 OpenGL 的曲面细分着色器的简单用法以及相关内容。 介绍 曲面细分着色器(Tessellation Shaders) 是在 OpenGL4.0 版本引入的。在这之前,有一些私有扩展可以使用,但是直到 4.0 曲面细分才正式成为 OpenGL 的一部分。 ...

Hugo 全功能测试 这是一篇用于测试 Hugo + PaperMod 博客功能是否正常的文章。 目录应该会自动生成。 1. 行内公式 这是一个行内公式: $E = mc^2$ 这是另一个: $\mathbf{v'} = R_z(\theta)\mathbf{v}$ 2. 块级公式 $$ f(x) = x^2 + 2x + 1 $$ 3. 矩阵测试(图形学重要) $$ R_z(\theta) = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\\\ \sin\theta & \cos\theta & 0 \\\\ 0 & 0 & 1 \end{pmatrix} $$ 4. 多行公式 $$ \begin{aligned} x' &= x\cos\theta - y\sin\theta \\\\ y' &= x\sin\theta + y\cos\theta \end{aligned} $$ 5. 代码高亮 (C++) 1#include <glm/glm.hpp> 2#include <glm/gtc/matrix_transform.hpp> 3 4glm::mat4 model = glm::rotate( 5 glm::mat4(1.0f), 6 glm::radians(45.0f), 7 glm::vec3(0,0,1) 8); 6. Shader 代码 (GLSL) 1vec3 rotateZ(vec3 p, float theta) 2{ 3 mat3 R = mat3( 4 cos(theta), -sin(theta), 0.0, 5 sin(theta), cos(theta), 0.0, 6 0.0, 0.0, 1.0 7 ); 8 9 return R * p; 10} 7. Python 代码 1import numpy as np 2 3theta = np.pi / 4 4 5R = np.array([ 6 [np.cos(theta), -np.sin(theta), 0], 7 [np.sin(theta), np.cos(theta), 0], 8 [0,0,1] 9]) 8. 表格 Algorithm Complexity Notes Ray Tracing O(n) realistic Rasterization O(1) fast Path Tracing expensive global illumination 9. 引用 Computer graphics is the art of turning mathematics into images. ...
理论力学 | 最小作用量原理 在理论力学中,欧拉-拉格朗日方程是求解系统运动方程的核心工具。它将经典力学问题转化为变分问题,通过最小作用量原理得到系统的运动规律。 ...
贝塞尔曲线(Bézier Curve) 是一种在计算机图形学,图形设计软件(如 Adobe Illustrator)、动画制作、字体设计等领域中广泛使用的参数曲线,常用于设计平滑的曲线路径。 ...
角度约束 在物理引擎中,我们经常需要控制两个物体之间的相对角度,比如机械臂的关节角度或者两个刚体之间的旋转约束。这种约束在现实中就类似用铰链连接两个物体,使它们在某个期望夹角下旋转。 ...
距离约束 在物理引擎中我们常常需要限制两个物体(或者点)之间的相对相对距离,这种效果在现实中就类似拿一根固定长度的刚体丝线连接两个物体上的某个点,这就不得不再次用到约束了。 ...
碰撞约束 在碰撞分离阶段除了使用碰撞法线直接分离物体之外,还有一种广泛用于各大刚体模拟引擎中的方法——碰撞约束。使用碰撞约束可以更加优雅的分离物体。 通过之前《基于冲量的约束求解》这篇文章我们了解到我们只需要写出我们需要的约束方程,然后找出Jacobian矩阵就可以通过之前那篇文章最后导出的公式求解冲量了。接下来我们将介绍解释碰撞约束的约束方程和推导Jacobian矩阵。 ...
广义坐标 在介绍约束之前先介绍一下分析力学的一个概念:广义坐标 广义坐标是一组用来描述一个物理系统位形(即系统中所有质点的位置状态)的独立变量。它们不必是传统笛卡尔坐标 $(x, y, z)$,而是可以根据系统的约束和对称性灵活选择,只要能够唯一确定系统状态即可。 ...
碰撞响应 在游戏物理引擎中两个物体在碰撞检测阶段结束后一般下一阶段就是要处理碰撞了,也就是碰撞处理阶段,碰撞处理阶段可以细分成两个阶段,先是经过分离阶段,再就是碰撞响应了。 ...