0%

7. Sampling and Reconstruction

Radiance在胶平面上是连续函数,但是渲染的输出是离散的像素。

But what happens when we need the value of s signal at a location that we didn’t sample at? In such cases, we can use a process known as reconstruction to derive an approximation of the original continuous function. With this approximation we can then discretely sample its values at a new set of sample points, which is referred to as resampling. signal processing primer

阅读全文 »

谨以此篇post记录自己日常中无能愤怒的瞬间,并时常更新温故,提醒自己如何面对这个嘈杂且充满噪声的世界。

狂怒瞬间

  • 骑车路上经常遇到各种奇形怪状占住车道的机动车辆,有的横在车道上,有的堵死一个方向(双向两车道),有的骑在车道线上占影响两个车道,这些人中绝少打双闪的,就是纯堵死,每次遇到这类“人群”,我都要在心理或者口头上骂上一句“煞笔”。
阅读全文 »

Pixel Data Internal Format

看一下glTexImage2D的函数签名,有三个参数比较费解,分别是internalformatformattype。这三个参数相互配合,共同决定了OpenGL Texture数据的在GPU上的格式以及内存数据从CPU-〉GPU上传过程中如何被‘解析’。

1
2
3
4
5
6
7
8
9
void glTexImage2D(GLenum target,
GLint level,
GLint internalformat,
GLsizei width,
GLsizei height,
GLint border,
GLenum format,
GLenum type,
const void * data);
阅读全文 »

API是渲染里面最稀碎最脏的一块,砖搬的越多,问题重复遇到的可能性也越大;有些东西以前遇到过,现在又遇到了;有些以前很熟悉,现在又忘记了。虽然不一定是高明的东西,记录一下,下次再忘记可以翻一翻。古人云,“纸上得来终觉浅,好记性不如烂笔头”,诚不欺我。

今天就来记录一下,各种Graphics API里面,使用的数据格式对于定点数的处理。

数据格式这里主要记录两方面的使用,其一就是顶点数据,其二是纹理。

阅读全文 »

网络链接,常常失效,很多大公司亦是如此。好些前两年很容易访问到的链接,忽然就失了踪迹。再者,有些资源,不收藏一下,难受。

Nvidia Legacy OpenGL SDK samples

  1. NVIDIA GameWorks Graphics Samples,by ahcox > The GameWorks Graphics Samples pack is a resource for cross-platform Vulkan, OpenGL 4 (GL4) and OpenGL ES 2 and 3 (ES2 and ES3) development, targeting Android and Windows (and soon, will again support Linux x86/x64 and Linux for Tegra). It is an expansion and continuation of the longstanding OpenGL Graphics and Compute Samples, adding full support for and samples of the Vulkan 3D API. mirror
阅读全文 »

OpenGL虽然简单,但是问题也是公认的多,不同驱动实现的表现可能差异很大,导致同样的OpenGL的代码,在一台机器上正常执行,在另外一台机器上表现异常。

我这就遇到一个,采样GL_DEPTH_COMPONENT类型的depth texture,全屏显示到窗口。同样是GL4.6 core profile的上下文,在RTX4080上没问题,但是在笔记本ThinkPad P50(显卡NVIDIA Quadro M1000M)上结果全白色(1.0),当然P50确实太老了,10年老机了,妥妥的电子垃圾了。

可是,奈何啊,“同样是生活一起的两口子,做人的差别咋这么大咧?”。

阅读全文 »

OpenGL 4.0和DirectX 11提供了原子操作(atomic operation),为GPU上并行创建链表数据结构提供了便利。基于此算法的per-pixel link lists可以应用到order independent transparency,实现像素的程序化混合,实现顺序无关的半透明效果,避免了程序员在api层面对于略显无力的排序的折磨。

Per-Pixel Link List

PPLL的实现需要三个数据结构:头结点指针Buffer、链表Node Buffer、结点计数器。 - 头结点指针Buffer:每个像素位置又一个链表,所以叫per-pixel link lists,头指针Buffer的大小是framebuffer的大小,存储的是头结点在Node Buffer中的位置,初始化为一个空符号,比如-1; - 链表Node Buffer:存储所有结点数据,可以是任意数据,next字段是必需的,指向链表下一个结点;不需要初始化,只需要分配足够大小。 - 结点计数器:用于分配下一个Node Buffer位置来存储数据,使用原子操作累加。初始化为0。

阅读全文 »

设置生成目标的输出目录

1
2
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIG>)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIG>)

Note $<CONFIG>应该在VS下才起作用

阅读全文 »