Skip to content

Commit c7f9f80

Browse files
committed
2 parents ddfe28d + 67f31c1 commit c7f9f80

File tree

210 files changed

+17876
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

210 files changed

+17876
-0
lines changed
Binary file not shown.
Binary file not shown.
14.7 KB
Binary file not shown.
4.14 KB
Binary file not shown.
Loading
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
我们将需要用到UV计算的数据,都写入到了G-Buffer中。
2+
3+
这里有一点要特别注意,在延迟渲染阶段,其实是一个屏幕后处理,片段Shader中是对全屏像素进行处理的,那么在计算光照效果时,是全屏幕每个像素都参与的。
4+
5+
这就带来了问题,环境光,它会对屏幕每个像素都计算一遍,给屏幕上每个像素都渲染成环境光的颜色。
6+
7+
但是为什么实际运行效果又没有出现这个问题呢?
8+
9+
```glsl
10+
vec3 frag_diffuse_color = texture(u_frag_diffuse_color_texture,v_uv).rgb;
11+
12+
//ambient
13+
vec3 ambient_color = u_ambient.data.color * u_ambient.data.intensity * frag_diffuse_color;
14+
```
15+
16+
这个关键就在`frag_diffuse_color`,在渲染到G-Buffer阶段,只有实际有顶点数据存在的片段,才会被渲染到`frag_diffuse_color`,空白区域`frag_diffuse_color`是(0,0,0),不管是环境光还是方向光、点光源的计算都是要乘以`frag_diffuse_color`,那么空白区域就都是(0,0,0)。
17+
18+
19+
然后还有一个问题,glClearColor清屏颜色被写入到了G-Buffer的所有FBO中了,对G-Buffer中存储的几何数据造成了影响,所以glClearColor只能用黑色来清屏了。
File renamed without changes.
File renamed without changes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
cmake-build-debug*
2+
.idea
3+
out
4+
data
5+
depends
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
cmake_minimum_required(VERSION 3.17)
2+
project(ssao)
3+
4+
set(CMAKE_CXX_STANDARD 17)
5+
6+
add_definitions(-D GLM_SWIZZLE)#GLM开启重排,随意转换。 vec2 v2 = v4.xz();
7+
8+
add_definitions(-D USE_FMOD_STUDIO)#是否使用fmod studio,加载bank文件的形式。
9+
10+
11+
if (MSVC)
12+
add_compile_options(/bigobj)
13+
add_compile_options(/wd4819)#忽略保存为unicode警告
14+
endif ()
15+
16+
17+
18+
include(CMakeLists.txt.glfw)
19+
include(CMakeLists.txt.FreeType)
20+
include(CMakeLists.txt.fmod)
21+
include(CMakeLists.txt.easy_profile_core)
22+
include(CMakeLists.txt.lua_script)
23+
include(CMakeLists.txt.luasocket)
24+
include(CMakeLists.txt.Physx)
25+
include(CMakeLists.txt.imgui)
26+
27+
#拷贝depends目录
28+
file(COPY "../../template/depends/glfw-3.3-3.4/" DESTINATION "../depends/glfw-3.3-3.4/")
29+
file(COPY "../../template/depends/glm/" DESTINATION "../depends/glm/")
30+
file(COPY "../../template/depends/glm_ext/" DESTINATION "../depends/glm/")
31+
file(COPY "../../template/depends/timetool/" DESTINATION "../depends/timetool/")
32+
file(COPY "../../template/depends/rapidxml/" DESTINATION "../depends/rapidxml/")
33+
file(COPY "../../template/depends/stb/" DESTINATION "../depends/stb/")
34+
file(COPY "../../template/depends/spdlog/include/spdlog/" DESTINATION "../depends/spdlog/")
35+
file(COPY "../../template/depends/rttr-0.9.6/src/rttr/" DESTINATION "../depends/rttr/")
36+
file(COPY "../../template/depends/easy_profiler-2.1.0/easy_profiler_core/" DESTINATION "../depends/easy_profiler_core/")
37+
file(COPY "../../template/depends/SPSCQueue-1.1/" DESTINATION "../depends/spscqueue/")
38+
39+
#拷贝data文件
40+
file(COPY "../../template/data/audio/integrate_physx/" DESTINATION "../data/audio/")
41+
file(COPY "../../template/data/images/plane_albedo.cpt" DESTINATION "../data/images/")
42+
file(COPY "../../template/data/images/plane_metal.cpt" DESTINATION "../data/images/")
43+
file(COPY "../../template/data/images/urban.cpt" DESTINATION "../data/images/")
44+
file(COPY "../../template/data/model/ssao_corner.mesh" DESTINATION "../data/model/")
45+
file(COPY "../../template/data/material/default_ssao_gbuffer.mat" DESTINATION "../data/material/")
46+
file(COPY "../../template/data/shader/default_ssao_gbuffer.vert" DESTINATION "../data/shader/")
47+
file(COPY "../../template/data/shader/default_ssao_gbuffer.frag" DESTINATION "../data/shader/")
48+
file(COPY "../../template/data/material/default_renderer_to_ssao_buffer.mat" DESTINATION "../data/material/")
49+
file(COPY "../../template/data/shader/default_renderer_to_ssao_buffer.vert" DESTINATION "../data/shader/")
50+
file(COPY "../../template/data/shader/default_renderer_to_ssao_buffer.frag" DESTINATION "../data/shader/")
51+
file(COPY "../../template/data/material/default_ssao_deferred_rendering.mat" DESTINATION "../data/material/")
52+
file(COPY "../../template/data/shader/default_ssao_deferred_rendering.vert" DESTINATION "../data/shader/")
53+
file(COPY "../../template/data/shader/default_ssao_deferred_rendering.frag" DESTINATION "../data/shader/")
54+
55+
#头文件目录
56+
include_directories("depends")
57+
include_directories("source")
58+
59+
file(GLOB_RECURSE engine_cpp source/*.cpp)
60+
file(GLOB_RECURSE rttr_cpp "depends/rttr/*.cpp")
61+
file(GLOB_RECURSE example_cpp example/*.cpp)
62+
63+
add_executable(${PROJECT_NAME} ${glfw_sources} ${rttr_cpp} ${freetype_src} ${easy_profiler_core_source} ${lua_src} ${luasocket_c} ${imgui_src} ${engine_cpp} ${example_cpp})
64+
65+
if (MSVC)
66+
set_property(TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
67+
else()
68+
add_definitions(-D _DEBUG)
69+
endif ()
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#拷贝depends目录
2+
file(COPY "../../template/depends/freetype-2.11.0/" DESTINATION "../depends/freetype/")
3+
4+
add_definitions(-D FT2_BUILD_LIBRARY)
5+
#add_definitions(-D FT_DEBUG_LEVEL_TRACE)
6+
7+
if (WIN32)
8+
add_compile_options(/wd4312)#忽略类型转换错误警告
9+
elseif (UNIX)
10+
add_definitions(-D HAVE_UNISTD_H)
11+
add_definitions(-D HAVE_FCNTL_H)
12+
endif ()
13+
14+
include_directories("depends/freetype")
15+
include_directories("depends/freetype/include")
16+
17+
18+
file(GLOB freetype_public_header "depends/freetype/include/ft2build.h" "depends/freetype/include/freetype/*.h")
19+
file(GLOB freetype_public_config_header "include/freetype/config/*.h")
20+
file(GLOB freetype_private_header "include/freetype/internal/*.h")
21+
set(freetype_base_src depends/freetype/src/autofit/autofit.c
22+
depends/freetype/src/base/ftbase.c
23+
depends/freetype/src/base/ftbbox.c
24+
depends/freetype/src/base/ftbdf.c
25+
depends/freetype/src/base/ftbitmap.c
26+
depends/freetype/src/base/ftcid.c
27+
depends/freetype/src/base/ftfstype.c
28+
depends/freetype/src/base/ftgasp.c
29+
depends/freetype/src/base/ftglyph.c
30+
depends/freetype/src/base/ftgxval.c
31+
depends/freetype/src/base/ftinit.c
32+
depends/freetype/src/base/ftmm.c
33+
depends/freetype/src/base/ftotval.c
34+
depends/freetype/src/base/ftpatent.c
35+
depends/freetype/src/base/ftpfr.c
36+
depends/freetype/src/base/ftstroke.c
37+
depends/freetype/src/base/ftsynth.c
38+
depends/freetype/src/base/fttype1.c
39+
depends/freetype/src/base/ftwinfnt.c
40+
depends/freetype/src/bdf/bdf.c
41+
depends/freetype/src/bzip2/ftbzip2.c
42+
depends/freetype/src/cache/ftcache.c
43+
depends/freetype/src/cff/cff.c
44+
depends/freetype/src/cid/type1cid.c
45+
depends/freetype/src/gzip/ftgzip.c
46+
depends/freetype/src/lzw/ftlzw.c
47+
depends/freetype/src/pcf/pcf.c
48+
depends/freetype/src/pfr/pfr.c
49+
depends/freetype/src/psaux/psaux.c
50+
depends/freetype/src/pshinter/pshinter.c
51+
depends/freetype/src/psnames/psnames.c
52+
depends/freetype/src/raster/raster.c
53+
depends/freetype/src/sdf/sdf.c
54+
depends/freetype/src/sfnt/sfnt.c
55+
depends/freetype/src/smooth/smooth.c
56+
depends/freetype/src/truetype/truetype.c
57+
depends/freetype/src/type1/type1.c
58+
depends/freetype/src/type42/type42.c
59+
depends/freetype/src/winfonts/winfnt.c)
60+
61+
if (UNIX)
62+
list(APPEND freetype_base_src "depends/freetype/builds/unix/ftsystem.c")
63+
elseif (WIN32)
64+
list(APPEND freetype_base_src "depends/freetype/builds/windows/ftsystem.c")
65+
else ()
66+
list(APPEND freetype_base_src "depends/freetype/src/base/ftsystem.c")
67+
endif ()
68+
69+
70+
if (WIN32)
71+
enable_language(RC)
72+
list(APPEND freetype_base_src depends/freetype/builds/windows/ftdebug.c
73+
depends/freetype/src/base/ftver.rc)
74+
elseif (WINCE)
75+
list(APPEND freetype_base_src depends/freetype/builds/wince/ftdebug.c)
76+
else ()
77+
list(APPEND freetype_base_src depends/freetype/src/base/ftdebug.c)
78+
endif ()
79+
80+
set(freetype_src ${freetype_base_src} ${freetype_public_header} ${freetype_public_config_header} ${freetype_private_header})
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#下载Physx.7z
2+
function(DownloadPhysx)
3+
MESSAGE("Download physx-4.1.7z")
4+
file(DOWNLOAD "https://github.com/ThisisGame/PhysX/releases/download/v6.4/physx-4.1.7z" "../../../template/depends/physx-4.1.7z" SHOW_PROGRESS)
5+
endfunction()
6+
7+
#检测physx.7z是否存在,不存在则下载
8+
if(EXISTS "../../../template/depends/physx-4.1.7z")
9+
MESSAGE("found physx-4.1.7z")
10+
file(SIZE "../../../template/depends/physx-4.1.7z" SIZE_PHYSX)
11+
MESSAGE("size of physx-4.1.7z: ${SIZE_PHYSX}")
12+
#检查大小是否匹配
13+
if(${SIZE_PHYSX} EQUAL 46553903)
14+
MESSAGE("physx-4.1.7z is valid")
15+
else()
16+
MESSAGE("physx-4.1.7z is invalid")
17+
DownloadPhysx()
18+
endif()
19+
else()
20+
DownloadPhysx()
21+
endif()
22+
23+
24+
25+
#解压physx.7z
26+
if(EXISTS "../../../template/depends/physx-4.1")
27+
MESSAGE("found physx")
28+
else()
29+
MESSAGE("not find physx,extract physx-4.1.7z")
30+
file(ARCHIVE_EXTRACT INPUT "../../../template/depends/physx-4.1.7z" DESTINATION "../../../template/depends/" VERBOSE)
31+
endif()
32+
33+
34+
#拷贝
35+
file(COPY "../../template/depends/physx-4.1/" DESTINATION "../depends/physx/")
36+
37+
#头文件目录
38+
include_directories("depends/physx/physx/include")
39+
include_directories("depends/physx/pxshared/include")
40+
41+
#链接目录
42+
if(MSVC)
43+
link_directories("depends/physx/physx/bin/win.x86_64.vc142.mt/debug")
44+
#链接lib文件
45+
link_libraries(PhysX_64 PhysXFoundation_64 PhysXExtensions_static_64 PhysXPvdSDK_static_64)
46+
#拷贝dll到exe目录
47+
file(COPY "depends/physx/physx/bin/win.x86_64.vc142.mt/debug/PhysXFoundation_64.dll" DESTINATION "./")
48+
file(COPY "depends/physx/physx/bin/win.x86_64.vc142.mt/debug/PhysXDevice64.dll" DESTINATION "./")
49+
file(COPY "depends/physx/physx/bin/win.x86_64.vc142.mt/debug/PhysXCooking_64.dll" DESTINATION "./")
50+
file(COPY "depends/physx/physx/bin/win.x86_64.vc142.mt/debug/PhysXCommon_64.dll" DESTINATION "./")
51+
file(COPY "depends/physx/physx/bin/win.x86_64.vc142.mt/debug/PhysX_64.dll" DESTINATION "./")
52+
else()
53+
link_directories("depends/physx/physx/bin/mac.x86_64/debug")
54+
#链接lib文件
55+
link_libraries(PhysX_static_64 PhysXFoundation_static_64 PhysXExtensions_static_64 PhysXPvdSDK_static_64 PhysXCommon_static_64)
56+
endif()

0 commit comments

Comments
 (0)