实验目的,综合运用课程所讲述的图形学相关原理,实现绘制一个给定的3d模型
实验基本功能要求
1,通过文件读取一个3d模型,模型为若干多边形面片刻画的一个字,文件存储格式可以自己定义
2,实现消隐算法正确的将3d模型按照某种投影方式绘制在设备上可以是图像,也可以是窗口
3,通过鼠标点击实现旋转模型的功能
计算机图形学,3D,消隐算法
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 【相关推荐】
- 你可以看下这个问题的回答https://ask.csdn.net/questions/7553095
- 这篇博客也不错, 你可以看下基于多尺度增强滤波器和3D形状特征的肺结节自动检测方法(笔记一)
- 您还可以看一下 刘宏亮老师的虚幻引擎3D角色动画工作流课程中的 角色模型的导来导去小节, 巩固相关知识点
- 除此之外, 这篇博客: 3D数学系列之——再谈蒙特卡洛积分和重要性采样中的 七、重要性采样方法和过程 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
那么最终如何进行上面所说的重要性采样呢?其实核心就是构造使的蒙特卡洛积分方差和标准差最小的随机数序列 xnx_nxn 。
1、根据定义 ∫abp(x)dx\int \limits_a^b \mathrm{p}(x) \mathrm{d}xa∫bp(x)dx 就是概率密度函数 p(x)p(x)p(x) 对应的累积分布函数(Cumulative Distribution Function),简称做 CDF,通常其正式定义如下:
CDF(x)=∫−∞xp(x~)dx~(9) \mathrm{CDF}(x) = \int \limits_{-\infty}^{x} p( \tilde{x} ) \mathrm{d} \tilde{x} \tag{9} CDF(x)=−∞∫xp(x~)dx~(9)
然后选择一个跟被积分的函数“相类似”的概率密度函数 PDF 来计算其 CDF;2、接着推导出 CDF 的反函数 CDF−1(x)\mathrm{CDF}^{-1}(x)CDF−1(x) ;
3、然后生成一个均匀分布的随机变量序列 un∈[0,1]u_n \in [0,1]un∈[0,1] ;
4、使用 unu_nun 代入 CDF 的反函数 CDF−1(x)\mathrm{CDF}^{-1} (x)CDF−1(x) 计算出随机序列 xnx_nxn ;
5、最后将 xnx_nxn 代入蒙特卡洛积分中计算函数的积分值;
通常在很小规模的 xnx_nxn 序列下,就可以计算出很高精度的积分值。
举例来说,假设我们需要求一个形似 ∫0πAsin(x)dx\int \limits_0^{\pi} A \sin(x) \mathrm{d}x0∫πAsin(x)dx 的积分,此时根据被积函数为正弦函数的特征,构造 p(x)=csin(x)x∈[0,π]p(x) = c \sin(x) \quad x \in [0,\pi]p(x)=csin(x)x∈[0,π] ,然后我们计算它的 CDF:
∫0πcsin(x)dx=c[−cos(x)]0π=2c=1∵∫0πp(x)dx=1⇒c=12用x替换积分上限,得到CDF的表达式,有:CDF(x)=∫0x12sin(t)dt=12[−cos(t)]0x=12(1−cos(x)) \int \limits_{0}^{\pi} c \sin(x) \mathrm{d}x = c \Biggl[-\cos(x)\Biggr]_0^{\pi} = 2 c = 1 \\[2ex] \because \quad \int_0^{\pi} p(x) \mathrm{d}x = 1 \\[2ex] \Rightarrow c = \cfrac{1}{2} \\[2ex] 用 x 替换积分上限,得到CDF 的表达式,有: \\[2ex] CDF(x) = \int\limits_0^x \cfrac{1}{2} \sin(t)\mathrm{d}t = \cfrac{1}{2} \Biggl[ -\cos(t) \Biggr]_0^{x} = \cfrac{1}{2}(1-\cos(x)) 0∫πcsin(x)dx=c[−cos(x)]0π=2c=1∵∫0πp(x)dx=1⇒c=21用x替换积分上限,得到CDF的表达式,有:CDF(x)=0∫x21sin(t)dt=21[−cos(t)]0x=21(1−cos(x))
有了 CDF 那么我们来计算其反函数:
y=12(1−cos(x))⇒x=arccos(1−2y) y = \cfrac{1}{2}(1-\cos(x)) \\[2ex] \Rightarrow \quad x = \arccos(1-2y) y=21(1−cos(x))⇒x=arccos(1−2y)
接着我们生成一个均匀分布的随机数序列 unun∼[0,1]u_n \quad u_n \sim [0,1]unun∼[0,1] 代入上式中计算得到指定分布的随机序列 xn=arccos(1−2un)x_n = \arccos(1-2u_n)xn=arccos(1−2un),最终用这个序列按照蒙特卡洛积分公式计算即可快速得到 ∫0πAsin(x)dx\int \limits_0^{\pi} A \sin(x) \mathrm{d}x0∫πAsin(x)dx 的积分值。那么详细的计算过程和程序就先略过了,在后续的 IBL 教程中将有更详细的应用讲解和实际工程中的代码。有兴趣的同学可以自己编写程序比较一下,即先用黎曼和及库函数sin计算得到积分结果,然后与库函数cos的直接计算结果进行比较,最好能求出方差,然后再用刚才推导出的 CDF−1CDF^{-1}CDF−1 函数计算的序列代入蒙特卡洛积分公式中计算积分结果,同样与cos函数直接计算的结果求差,或者求方差,看看有什么区别?
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
- ¥15 C语言使用vscode编码错误
- ¥15 用KSV5转成本时,如何不生成那笔中间凭证
- ¥20 ensp怎么配置让PC1和PC2通讯上
- ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
- ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
- ¥15 请各位帮我看看是哪里出了问题
- ¥15 vs2019的js智能提示
- ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
- ¥15 uniapp的h5项目写一个抽奖动画