Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
imjiangjun
pbrt-v4
提交
dc107ca8
P
pbrt-v4
项目概览
imjiangjun
/
pbrt-v4
12 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
pbrt-v4
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
dc107ca8
编写于
1月 09, 2021
作者:
M
Matt Pharr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add --pixel-material command-line option
上级
6b15326f
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
49 addition
and
1 deletion
+49
-1
src/pbrt/cameras.cpp
src/pbrt/cameras.cpp
+1
-0
src/pbrt/cameras.h
src/pbrt/cameras.h
+6
-0
src/pbrt/cmd/pbrt.cpp
src/pbrt/cmd/pbrt.cpp
+13
-1
src/pbrt/cpu/render.cpp
src/pbrt/cpu/render.cpp
+28
-0
src/pbrt/options.h
src/pbrt/options.h
+1
-0
未找到文件。
src/pbrt/cameras.cpp
浏览文件 @
dc107ca8
...
...
@@ -47,6 +47,7 @@ CameraTransform::CameraTransform(const AnimatedTransform &worldFromCamera) {
default:
LOG_FATAL
(
"Unhandled rendering coordinate space"
);
}
LOG_VERBOSE
(
"World-space position: %s"
,
worldFromRender
(
Point3f
(
0
,
0
,
0
)));
// Compute _renderFromCamera_ transformation
Transform
renderFromWorld
=
Inverse
(
worldFromRender
);
Transform
rfc
[
2
]
=
{
renderFromWorld
*
worldFromCamera
.
startTransform
,
...
...
src/pbrt/cameras.h
浏览文件 @
dc107ca8
...
...
@@ -84,6 +84,12 @@ class CameraTransform {
return
renderFromCamera
.
ApplyInverse
(
v
,
time
);
}
PBRT_CPU_GPU
const
AnimatedTransform
&
RenderFromCamera
()
const
{
return
renderFromCamera
;
}
PBRT_CPU_GPU
const
Transform
&
WorldFromRender
()
const
{
return
worldFromRender
;
}
std
::
string
ToString
()
const
;
private:
...
...
src/pbrt/cmd/pbrt.cpp
浏览文件 @
dc107ca8
...
...
@@ -131,7 +131,7 @@ int main(int argc, char *argv[]) {
exit
(
1
);
};
std
::
string
cropWindow
,
pixelBounds
,
pixel
;
std
::
string
cropWindow
,
pixelBounds
,
pixel
,
pixelMaterial
;
if
(
ParseArg
(
&
argv
,
"cropwindow"
,
&
cropWindow
,
onError
))
{
std
::
vector
<
Float
>
c
=
SplitStringToFloats
(
cropWindow
,
','
);
if
(
c
.
size
()
!=
4
)
{
...
...
@@ -154,6 +154,13 @@ int main(int argc, char *argv[]) {
return
1
;
}
options
.
pixelBounds
=
Bounds2i
(
Point2i
(
p
[
0
],
p
[
2
]),
Point2i
(
p
[
1
],
p
[
3
]));
}
else
if
(
ParseArg
(
&
argv
,
"pixelmaterial"
,
&
pixelMaterial
,
onError
))
{
std
::
vector
<
int
>
p
=
SplitStringToInts
(
pixelMaterial
,
','
);
if
(
p
.
size
()
!=
2
)
{
usage
(
"Didn't find two values after --pixelmaterial"
);
return
1
;
}
options
.
pixelMaterial
=
Point2i
(
p
[
0
],
p
[
1
]);
}
else
if
(
#ifdef PBRT_BUILD_GPU_RENDERER
ParseArg
(
&
argv
,
"gpu"
,
&
options
.
useGPU
,
onError
)
||
...
...
@@ -223,6 +230,11 @@ int main(int argc, char *argv[]) {
if
(
!
options
.
mseReferenceOutput
.
empty
()
&&
options
.
mseReferenceImage
.
empty
())
ErrorExit
(
"Must provide MSE reference image via --mse-reference-image"
);
if
(
options
.
pixelMaterial
&&
options
.
useGPU
)
{
Warning
(
"Disabling --use-gpu since --pixelmaterial was specified."
);
options
.
useGPU
=
false
;
}
options
.
logLevel
=
LogLevelFromString
(
logLevel
);
// Initialize pbrt
...
...
src/pbrt/cpu/render.cpp
浏览文件 @
dc107ca8
...
...
@@ -356,6 +356,34 @@ void CPURender(ParsedScene &parsedScene) {
LOG_VERBOSE
(
"Memory used after scene creation: %d"
,
GetCurrentRSS
());
if
(
Options
->
pixelMaterial
)
{
SampledWavelengths
lambda
=
SampledWavelengths
::
SampleUniform
(
0.5
f
);
CameraSample
cs
;
cs
.
pFilm
=
*
Options
->
pixelMaterial
+
Vector2f
(
0.5
f
,
0.5
f
);
cs
.
time
=
0.5
f
;
cs
.
pLens
=
Point2f
(
0.5
f
,
0.5
f
);
cs
.
weight
=
1
;
pstd
::
optional
<
CameraRay
>
cr
=
camera
.
GenerateRay
(
cs
,
lambda
);
if
(
!
cr
)
ErrorExit
(
"Unable to generate camera ray for specified pixel."
);
pstd
::
optional
<
ShapeIntersection
>
isect
=
accel
.
Intersect
(
cr
->
ray
,
Infinity
);
if
(
!
isect
)
ErrorExit
(
"No geometry visible at specified pixel."
);
const
SurfaceInteraction
&
intr
=
isect
->
intr
;
if
(
!
intr
.
material
)
ErrorExit
(
"No material at intersection point."
);
for
(
const
auto
&
mtl
:
namedMaterials
)
if
(
mtl
.
second
==
intr
.
material
)
Printf
(
"Named material: %s
\n
"
,
mtl
.
first
);
Printf
(
"%s
\n\n
"
,
intr
.
material
.
ToString
());
return
;
}
// Render!
integrator
->
Render
();
...
...
src/pbrt/options.h
浏览文件 @
dc107ca8
...
...
@@ -43,6 +43,7 @@ struct PBRTOptions : BasicPBRTOptions {
std
::
string
displayServer
;
pstd
::
optional
<
Bounds2f
>
cropWindow
;
pstd
::
optional
<
Bounds2i
>
pixelBounds
;
pstd
::
optional
<
Point2i
>
pixelMaterial
;
std
::
string
ToString
()
const
;
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录