- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在按照几个在线教程在 OpenGL 中编写图形渲染器。我最终得到了一个引擎,它有一个渲染管道,它基本上包括使用一个简单的 Phong 着色器渲染一个对象。我的 Phong Shader 有一个基本的顶点着色器,它根据转换和片段着色器修改顶点,看起来像这样:
// PhongFragment.glsl
uniform DirectionalLight dirLight;
...
vec3 calculateDirLight() { /* Calculates Directional Light using the uniform */ }
...
void main() {
gl_FragColor = calculateDirLight();
// Render a Mesh
bindPhongShader();
setPhongShaderUniform(transform);
setPhongShaderUniform(directionalLight1);
mesh->draw(); // glDrawElements using the Phong Shader
// New Render
bindBasicShader(); // just transforms vertices, and sets the frag color to white.
setBasicShaderUniform(transform); // Set transformation uniform
mesh->draw();
// Enable Blending so that all light contributions are added up...
bindDirectionalShader();
setDirectionalShaderUniform(transform); // Set transformation uniform
setDirectionalShaderUniform(directionalLight1);
mesh->draw(); // Draw the mesh using the directionalLight1
setDirectionalShaderUniform(directionalLight2);
mesh->draw(); // Draw the mesh using the directionalLight2
setDirectionalShaderUniform(directionalLight3);
mesh->draw(); // Draw the mesh using the directionalLight3
最佳答案
对于在与主要几何处理相同的着色器中处理光照的前向渲染引擎,唯一真正有效的方法是生成大量着色器,这些着色器可以处理光照下的光源、光数和 Material 的各种组合.
在您的情况下,您将有一个用于 1 个灯的着色器,一个用于 2 个灯,一个用于 3 个灯等。就着色器数量而言,这是一个组合噩梦,但您真的不想多次发送所有网格(特别是如果您正在为移动设备编写游戏 - 几何图形占用的带宽非常大,并且会消耗电池电量)。
另一种常见的方法是延迟照明方案。这些方案将反照率、法线、 Material 属性等存储到“几何缓冲区”(例如一组多渲染目标 FBO 附件)中,然后在事后应用照明作为一组后处理操作。复杂几何体被发送一次,结果数据作为一组纹理数据存储在 MRT+深度渲染目标中。然后将光照作为一组基本几何体(通常是球体或 2D 四边形)应用,使用深度纹理作为裁剪和剔除光源的手段,并使用其他 MRT 附件来计算光照强度和颜色。对于 SO 帖子来说,这是一个很长的主题 - 但网上有很多来自 GDC 和 Sigraph 的优秀演示文稿。
这里概述的基本思想:
https://en.wikipedia.org/wiki/Deferred_shading
关于opengl - 这是在 OpenGL 中渲染多个灯光的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41094452/
本文实例讲解了通知notification使用方法,此知识点就是用作通知的显示,包括振动、灯光、声音等效果,分享给大家供大家参考,具体内容如下 效果图: mainactivity:
VC++ 2010、OpenGL、GLSL、SDL 我正在转向着色器,遇到了最初在使用 ogl 管道时出现的问题。也就是说,光的位置似乎指向我的相机面向的任何方向。在 ogl 管道中,它只是镜面高光,
我在收到通知时听不到声音、振动或灯光。有人可以告诉我我缺少什么吗? 还有一些问题: 1.) 我只在应用程序打开时得到指定的图标。当应用程序关闭时,我会看到 android Logo 图标(我想那是因为
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我对three.js 示例有一个小问题fresnel shader . 'lights : true' - 如果这是 'true' 那么我会收到以下错误: Uncaught TypeError: Ca
几个简单的问题。我有一个正在尝试控制的 DMX king USB 照明 Controller 。 它基于 Open DMX 协议(protocol)(来自 Entec),提供了一个 c# 类。我已将设
我是一名优秀的程序员,十分优秀!