0%

I don’t know of any game engines where they attribute real-world units to lighting and material values, since those kinds of things tend to be driven more by the appearance than the physical correctness. The relative intensities of, say, a candle and a 100W light bulb are probably more important than the absolute values.Lighting: The Rendering Equation

背景

DirectX SDK自从Windows 8 SDK开始,是随着Windows SDK附带的,包含了各个历史版本的头文件、动态库和工具集,但是这些历史版本SDK的sample和辅助库D3DX9、D3DX10、D3DX11等就被丢弃了。

偶尔会遇到一些D3D的旧版本上古demo,可能就使用了一些旧版本的辅助函数,比如在看SSS效果的时候使用iryoku大佬的separable-sss,仅仅依赖Windows SDK附带的DX依赖是没法正确跑起来。

阅读全文 »

Quad with Bufferless rendering

如果没记错的话,最初应该是在OpenGL SuperBibile里面看到的无Buffer的渲染方式,把三角形顶点数据写在vertex shader代码里,在shader里通过index取相应的数据,当时感觉平平无奇。后来在SaschaWillems的Vulkan example里看到更精简的写法,当时表示惊呆了,使用gl_VertexIndex来构造顶点数据,画一个覆盖屏幕的quad。下面就是Vulkan example的实现。其中vkCmdDrawIndexed对应gl_VertexIndex, vkCmdDraw对应gl_VertexID;我是在GL环境下,则是glDrawElements对应gl_VertexIndex, glDrawArrays对应gl_VertexID

1
2
3
4
5
6
7
8
9
#version 450

layout (location = 0) out vec2 outUV;

void main()
{
outUV = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);
gl_Position = vec4(outUV * 2.0f - 1.0f, 0.0f, 1.0f);
}
阅读全文 »

Vulkan枚举值的字符串化

Vulkan中的枚举值做了很好的枚举类型管理,尽管还是是C类型的枚举,具有全局符号可见行;再尽管不似C++ enum class有严格的命名空间访问机制,但是仍然具备相应的枚举类型作为命名空间管理和访问。这为Vulkan枚举值的字符串转换提供了方便,可能这也是为何VulkanSDK给出了官方实现vk_enum_string_helper.h的原因。

VkImageType为例,

阅读全文 »

MeshLab调试时加载的dll版本不对

MeshLab 2023.12下载安装的2023.12版本,我在本地clone了一份源码编译,发现在C:\Users\Administrator\AppData\Roaming\VCG\MeshLab_64bit_fp\MeshLabExtraPlugins\2023.12位置存放了一套插件的dll文件,也就是这一套dll文件影响了源码的调试,也即调试时加载的这个目录下的dll文件,不是生成路径下的dll文件。

根据调用栈加载dll的路径就是这个路径:
2025-03-04-MeshLab调试问题/callstack

阅读全文 »

OpenGL目前的最新版本是2017年发布的4.6版本,OpenGL老矣也不会再有更新了。尽管OpenGL是一套简单易用的图形API,但是很明显它并没有紧跟图形技术发展的脉搏,不仅仅落后于同时代的DirectX,其自身标准的取舍也使其变的碎片化。模式和兼容性就是其中恶心的一点,本文便是记录GLFW3在创建OpenGL上下文时设置模式和兼容性所设置的一些字段。

以前用GLFW3和OpenGL做一些demo时候,glfwWindowHint随意复制粘贴一下然后设置一下OpenGL Context的版本和Profile即可,并没有过多理会其他的字段的含义和差别。毕竟使用Modern OpenGL或者Core Profile的OpenGL,并不需要在意兼容模式下大量的固定管线API的功能。但是,当实际使用中涉及到了glLineWidth这种从上古时代OpenGL 2.0时期延续至今并在OpenGL 4.6中Deprecated的API,更骚气的是其能不能work还要取决于硬件能力和驱动实现,多重buff于一身,某些字段的设置开始变的微妙起来了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE);

std::cout << "Vendor " << glGetString(GL_VENDOR) << std::endl;
std::cout << "Render " << glGetString(GL_RENDERER) << std::endl;
std::cout << "GL " << glGetString(GL_VERSION) << std::endl;
std::cout << "GLSL " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl;
GLint profile;
glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &profile);
std::cout << "Profile " << (profile & GL_CONTEXT_CORE_PROFILE_BIT ? "Core" : "Compatibility") << std::endl;
阅读全文 »

收录经过整合和验证的Hexo-Next配置方案,主要内容来自于网络技术文章,并给出出处,感谢网络大佬们的分享~

修改超链接颜色

  • Hexo Next 修改超链接颜色
  • Hexo Next博客优化
    在./themes/next/source/css/_custom/custom.styl里添加如下代码
    1
    2
    3
    4
    5
    6
    7
    8
    .post-body a:not(.btn){
    color: #0593d3;
    border-bottom: none;
    &:hover {
    color: #0477ab;
    text-decoration: underline;
    }
    }
    a:not(.btn)避免修改首页的”阅读全文”按钮的样式
阅读全文 »