0%
mitsuba 开发指南.01
1 2 3 4
| Mitsuba Documentation Version 0.5.0 Wenzel Jakob February 25, 2014
|
一些个问题
- 在写代码的时候一直在报错,找不到
Float
的定义,为了不报错,我在如下文件中加了定
include/mitsuba/core/platform.h
1 2 3 4 5 6 7 8
| #define SINGLE_PRECISION #if defined(DOUBLE_PRECISION) typedef double Float; #elif defined(SINGLE_PRECISION) typedef float Float; #else #error No precision flag was defined! #endif
|
- 这个指定是在编译指令中指定的
- 更好的解决方式是在 vscode 中预定义宏
9. Code Structure
- 分为 4 个部分
- libcore:图片 IO、数据结构、程序调度、插件管理
- librender:场景(光源、材质、参与介质、shapes)
- libhw:硬件加速、显示、OpenGL、交互 GUI
- libidir:为了实现 BDPT 准备的一些库
10. Coding Style
- 4 空格缩进
- 左括号同行
- 命名格式:camel-case
- 类名首字母大写
- 成员函数首字母小写
- 成员变量加上前缀:
m_
1 2 3 4 5 6 7 8
| class MyClass { public: MyClass(int value) : m_value(value) { } inline void setValue(int value) { m_value = value; } inline int getValue() const { return m_value; } private: int m_value; };
|
- 枚举变量加上前缀
E
- 尽量能加
const
就加上 const
- 简单函数使用
inline
- 头文件加注释
- 使用 Boost 库
- 所有的 class 都会被分配在堆上,struct
可能在堆上也可能在栈上
1 2 3 4
| if (..) { ref<MyClass> instance = new MyClass(); instance->doSomething() }
|
11. 实现一个用户插件(plugin)
- 两种方式
- sampling-based integrators
- 基于光线追踪,发出一条光线,估计它的 incident radiance
- 实现
SamplingIntegrator
接口即可
- 这样我们并行层、网络层自然实现(不需要我们自己写)
- 也可以实现其他接口
- an irradiance cache
- an adaptive integrator
- generic ones
- 不能归为上一类的,需要一些特殊的操作,例如 VPL
(1) 实现一个深度查看器的教程
文件夹
src/integrators/
文件夹下新建文件夹
depthmap
,接下来的操作全在 depthmap
文件夹中操作
depthViewer.cpp
- 新建
depthViewer.cpp
文件
- 具体内容看
cpp
代码
- 实际调用序列化函数的时候按照如下方法
- 我们想要的是对整个对象进行序列化,不仅简单的递归调用,可能存在如下问题
- 某个成员被引用多次(浪费空间)
- 互相引用(陷入无限递归)
- 当我们需要对堆上的物体进行序列化和反序列化的时候,进行如下调用
1 2 3 4 5 6 7
| ref<SomeClass> myObject = ...; manager->serialize(stream, myObject.get());
ref<SomeClass> myObject = static_cast<SomeClass *>(manager->getInstance(stream));
|
导出插件
integrators
文件夹下有一个 SConscript
文件,加上如下一行
1
| plugins += env.SharedLibrary('DepthViewer', ['depthViewer/depthViewer.cpp'])
|
1 2
| # linux scons -j$(nproc)
|
- 生成的文件在
dist
文件夹下
- 场景文件配置如下
1 2 3 4 5 6 7
| <?xml version='1.0' encoding='utf-8'?>
<scene version="0.6.0"> <integrator type="DepthViewer"> </integrator> </scene>
|
1
| ./mitsuba -o test1 test.xml
|
- 生成了一张
test.exr
,转化为 test.png
查看
1
| ./mtsutil tonemap -f png -t test1.exr
|
其他场景