- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 openGL 中实现大气散射。我正在使用这篇“论文”作为教程: http://developer.amd.com/wordpress/media/2012/10/GDC_02_HoffmanPreetham.pdf
但是我在理解某些要点和计算出一些常数时遇到了一些困难。
首先我不知道 s 是从眼睛到圆顶的距离还是从眼睛到光源(这里是太阳)位置的距离。角度 theta 也一样,我不知道它是从地面到太阳的角度还是到眼睛正在看的圆顶位置的角度。
第二张幻灯片: 它告诉我天空会出现蓝色。我知道这是瑞利散射的原因,但有些事情我无法理解。上面公式中的所有计算都给了我一个标量:所以当我将它乘以标量时,基本上是 vec3(1,1,1) 的太阳白光如何变成蓝色,它只会变成灰度因为我将得到例如 vec3(0.8,0.8,0.8) 的结果。我的意思是,如果出现一些不同的天空颜色,我必须将太阳光与 vec3 相乘以不同地更改 RGB 值。
现在我在实现我的着色器时遇到了一些困难。这是天空着色器的代码:
#version 330
in vec3 vpoint;
in vec2 vtexcoord;
out vec2 uv;
out vec3 atmos;
uniform mat4 M;
uniform mat4 V;
uniform mat4 P;
mat4 MVP = P*V*M;
//uniform vec3 lpos;
vec3 lpos = vec3(100,0,0);
uniform vec3 cpos;
vec3 br = vec3(5.5e-6, 13.0e-6, 22.4e-6);
vec3 bm = vec3(21e-6);
float g = -0.75f;
vec3 Esun = vec3(2000,2000,2000);
vec3 Br(float theta){
return 3/(16*3.14) * br * (1+cos(theta)*cos(theta));
}
vec3 Bm(float theta){
return 1/(4*3.14) * bm * ((1 - g)*(1 - g))/(pow(1+g*g-
2*g*cos(theta),3/2));
}
vec3 atmospheric(float theta, float s){
return (Br(theta)*Bm(theta))/(br+bm) * Esun * (1- exp( -(br+bm)*s ));
}
void main() {
gl_Position = MVP * vec4(vpoint, 1.0);
uv = vtexcoord;
vec3 domePos = vec3(M*vec4(vpoint,1.0));
vec3 ldir = lpos - domePos;
float s = length(domePos-cpos);
float theta = acos(dot(normalize(ldir-domePos),normalize(domePos-
cpos)*vec3(1,1,0)));
atmos = atmospheric(theta,s)*1000000*5;
}
我没有得到我所期望的,这是我得到的:
我只有蓝色,没有偏红的日落,但太阳很低,根据我看到的不同教程,当太阳落山时,我应该会看到一些偏红的颜色。
最佳答案
警告 我不是该领域的专家,对此持保留意见。
s 是顶点/像素与相机之间的距离。
θ 是太阳与视线之间的夹角。
为了计算 θ,您需要知道“黄线”和“视线”。
后者是普通的着色器数学;前者只是一种表达太阳在天空中有多高的方式。您可以将其建模为从太阳到地面上一点的光线。
上面所有的公式都给你 vector 。
L0 是一个 vector 。
Esun 也是一个 vector 。
幻灯片基本上说像 Radiance 和 Irradiance (Esun) 这样的物理概念在光谱上是连续的,应该使用光谱功率分布来描述光和颜色。
然而,一种更快的方法是仅对光谱的三个点进行数学计算,一个用于 R、G 和 B 波长。
实际上,这表明 Esun 是一个 vector ,描述了三个 RGB 波长的太阳辐照度。
天空的蓝色来自参数 βR,它取决于 θ,而 θ 又取决于“视线”,而“视线”又取决于碎片的高度天空被着色。
关于c++ - 大气光散射实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37099587/
我有一个 OGre3D+Hikari 应用程序,我想在其背景中循环使用 flash 动画。 我尝试调整 createFlashOverlay 中的一些参数(特别是 zorder 和层),但没有任何改变
奇怪的问题,但只是在寻找指导或建议。我的网络应用程序具有协助运算符(operator)计时的功能。我的任务是从 mysql php 触发器打开红色闪光灯(警灯)? 可以这样做吗,因为我认为网站无法与我
我对 WIX 相当陌生,所以如果我完全错过了这里的船,请原谅我,但我想知道是否可以在 wxs 文件中重用组件(mwm、cab 等)而无需重新链接它们每次。我正在使用的安装程序有几个可执行文件、dll
我喜欢 MVVM Light 的 Messenger 及其灵 active ,但是当我忘记显式注销收件人时(在 Silverlight 4 中),我遇到了内存泄漏问题。 原因解释here ,但我对此表
当我在 Visual Studio 2010 中安装 MVVM Light v3.xx 后,我有许多用于创建 MVVM 项目的模板。 但我需要全新安装 Visual Studio,在这种情况下我安装了
我刚开始使用 libgdx 创建游戏。这是一个使用 scene2d ui 的自上而下的 2d 射击游戏。现在我想,我可以在某些层面上添加黑暗和光明,但我不想使用 box2d 重写所有内容。我不需要逼真
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试将我的 Windows Phone 8 Silverlight 应用程序转换为 8.1 Phone 应用程序作为通用应用程序的一部分。我不知道这是否相关,因为这是我第一次尝试正确实现 Vie
我收到以下消息,在 Spring Cloud 数据流中运行任务。 DEBUG 13167 --- [spring_batch146] com.zaxxer.hikari.pool.HikariPool
我使用带有中继器控件的 jQuery Light Slider 来显示数据库中的图像,如下所示: '> ' run
我熟悉 MVVM Light 工具包的 ViewModelBase、Message,但不熟悉 ViewModelLocator。在我的应用程序中有 Singleton ViewModel,例如 Pri
我是 MVVM 的新手,所以如果这个问题有一个简单的答案,我深表歉意,但我无法通过搜索 Google 来解决这个问题。 所以,基本上,我正在使用 MVVM Light 制作 Windows 10 通用
我已经创建了我的第一个 MVVMLight 项目,我有一个问题: 我有一个按钮,上面绑定(bind)了一个命令。当命令执行时,在不同的用例中,我必须向最终用户获取/提供信息,例如: 如果项目是新的,询
我正在通过播放框架和 mariadb 客户端使用 hikari 池连接,因为我已经定期更新它们(播放 2.6.5 -> 2.6.6 和 mariadb 2.1.1 -> 2.1.2 但不确定它是否相关
关于如何在 ViewModel 中定义一个 RelayCommand 有几个例子: 选项 1(惰性): /// /// Gets the LogOnCommand. /// /// The Log
我正在处理一个示例 MVVM Light 项目并正在实现 SimpleIoc ViewModelLocator。我已经能够构建一个 IRepositoryService,它从数据库(即公司、员工等)中
我们在 Windows 8.1 中有一个与 Win 10 兼容的工作项目。现在的要求是将此项目转换为 UWP。在早期的项目中,我们使用了 PRISM 作为 MVVM 的框架。现在的问题是,对于UWP应
在the latest release of MVVM Light note ,已表明 MVVM Light 现在提供“导航服务”。 但是我自己和我 friend google都找不到怎么用。 我可以
我是一名优秀的程序员,十分优秀!