- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一款游戏,玩家需要飞过圆环才能获得积分。我想为我的船、戒指和场景使用不同的灯光。我在点亮这三样东西时遇到了问题。如果我在 main.cpp 中运行带有三个函数调用的代码,只有第一个被正确点亮。如果我评论第一个,第二个就会被执行,依此类推,但不会同时执行三个。
世界.cpp
glm::vec4 lightPositionWorld = Model * glm::vec4(.0f, 20.0f, -30.0f, 1.0f);
glUniform3f(glGetUniformLocation(programID, "LightPositionWorld"), lightPositionWorld.x, lightPositionWorld.y, lightPositionWorld.z);
发货.cpp
glm::vec3 lightPositionSpaceShip = glm::vec3(.0, 7.0, .0);
glUniform3f(glGetUniformLocation(programID, "LightPositionSpaceShip"), lightPositionSpaceShip.x, lightPositionSpaceShip.y, lightPositionSpaceShip.z);
门.cpp
glm::vec3 lightPositionGate = glm::vec3(5.0, 3.0, .0);
glUniform3f(glGetUniformLocation(programID, "LightPositionGate"), lightPositionGate.x, lightPositionGate.y, lightPositionGate.z);
SimpleFragmentShader.fragmentshader
#version 330 core
in vec2 UV;
in vec3 Position_worldspace;
in vec3 Normal_cameraspace;
in vec3 EyeDirection_cameraspace;
in vec3 LightDirectionCameraWorld;
in vec3 LightDirectionCameraSpaceShip;
in vec3 LightDirectionCameraGate;
out vec3 colorWorld;
out vec3 colorSpaceShip;
out vec3 colorGate;
uniform sampler2D objectTexture;
uniform vec3 LightPositionWorld;
uniform vec3 LightPositionSpaceShip;
uniform vec3 LightPositionGate;
vec3 lighting(float red, float green, float blue, float power, vec2 UV, vec3 Position_worldspace, vec3 Normal_cameraspace, vec3 EyeDirection_cameraspace, vec3 LightDirectionCamera, vec3 LightPosition)
{
vec3 LightColor = vec3(red, green, blue);
float LightPower = power;
vec3 MaterialDiffuseColor = texture(objectTexture, UV ).rgb;
vec3 MaterialAmbientColor = vec3(0.3, 0.3, 0.3) * MaterialDiffuseColor;
vec3 MaterialSpecularColor = vec3(1.0, 1.0, 1.0);
float distance = length( LightPosition - Position_worldspace );
vec3 normal = normalize(Normal_cameraspace);
vec3 light = normalize(LightDirectionCamera);
float cosTheta = clamp(dot(normal, light), .0, 1.0);
vec3 eye = normalize(EyeDirection_cameraspace);
vec3 reflect = reflect(-light, normal);
float cosAlpha = clamp( dot(eye, reflect), .0, 1.0);
vec3 color = MaterialAmbientColor +
MaterialDiffuseColor * LightColor * LightPower * cosTheta / (distance * distance) +
MaterialSpecularColor * LightColor * LightPower * pow(cosAlpha, 5) / (distance * distance);
return color;
}
void main()
{
colorWorld = lighting(0.81f, 0.71f, 0.23f, 90.0f, UV, Position_worldspace, Normal_cameraspace, EyeDirection_cameraspace, LightDirectionCameraWorld, LightPositionWorld);
colorSpaceShip = lighting(0.329412f, 0.329412f, 0.329412f, 90.0f, UV, Position_worldspace, Normal_cameraspace, EyeDirection_cameraspace, LightDirectionCameraSpaceShip, LightPositionSpaceShip);
colorGate = lighting(0.81f, 0.71f, 0.23f, 90.0f, UV, Position_worldspace, Normal_cameraspace, EyeDirection_cameraspace, LightDirectionCameraGate, LightPositionGate);
}
我希望场景和两个物体以不同的颜色和强度发光。
最佳答案
要获得您期望的行为,您不应输出多种颜色,您应该为每个片段输出一种颜色:out vec4 fragColor;
那么更正代码的最简单方法是添加 3 种不同的光照结果:
fragColor = vec4(lighting(0.81f, 0.71f, 0.23f, 90.0f, UV, Position_worldspace, Normal_cameraspace, EyeDirection_cameraspace, LightDirectionCameraWorld, LightPositionWorld) +
lighting(0.329412f, 0.329412f, 0.329412f, 90.0f, UV, Position_worldspace, Normal_cameraspace, EyeDirection_cameraspace, LightDirectionCameraSpaceShip, LightPositionSpaceShip) +
lighting(0.81f, 0.71f, 0.23f, 90.0f, UV, Position_worldspace, Normal_cameraspace, EyeDirection_cameraspace, LightDirectionCameraGate, LightPositionGate), 1.0);
此外,在您的光照方法中,MaterialAmbientColor
也应随距离衰减,否则在计算最终颜色时环境光将增加 3 倍。
关于c++ - 用不同的颜色和强度照亮物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54046069/
我正在开发一个录音机应用程序。我想知道在录制音频时有什么方法可以找到音频的强度。我不想将录音保存在任何地方。我只想向用户展示麦克风捕捉到的声音是否大于预定义的阈值。 假设如果声音低于 2 分贝,它应该
我正在尝试让一个基本服务器(从 Beginning Python 复制)来发送一个 str。 错误: c.send( "XXX" ) TypeError: must be bytes or buffe
我陷入了一个问题,不知道去哪里看。我需要增加图像中特定颜色的强度,例如 R、G 或蓝色。当我这样做时,某些颜色无法正确呈现。 下面是我为测试拍摄的图像: 现在当我像绿色一样增加时: A = Color
我不希望我的背景图片太模糊。没有调整模糊强度的属性吗? let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) blurEffect
我使用 OpenCV 2.4.11+Qt 并尝试制作视频并更改红色/蓝色或绿色 channel 的强度,但没有找到任何功能或设置来执行此操作。有谁知道如何做到这一点? 最佳答案 如果您只想更改一个特定
当我有 x、y、强度时,我不知道如何创建热图(或等高线图)。我有一个看起来像这样的文件: 0,1,6 0,2,10 .... 到目前为止: with open('eye_.txt', 'r') as
有谁有一些可以在 iPhone 应用程序中使用的代码,让我可以看到 wifi 的强度吗?我有一个连接密集型操作,并且希望它们不在不稳定区域 最佳答案 这可能会帮助您走上正确的道路...... http
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
Eclipse SSH key 生成屏幕(常规 -> 网络连接 -> SSH2)生成 1024 位 RSA key ,该 key 太弱而无法使用 ( http://news.netcraft.com/
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
我们的网络应用程序使用 the Vibrate API对于微妙的按钮按下效果: window.navigator.vibrate(5); 但在我的新手机上,感觉不那么微妙,更像是我的手机正试图从我手中
我的应用程序应扫描周围的 Wifi 信号并列出网络名称及其 RSSI。 我在谷歌上找不到任何关于如何做的线索。有人可以举个例子或者至少指出其他地方我可以找到答案吗? 最佳答案 我认为这不可能!不管是
所以我的图像有一些黑点,它们看起来很简单,所以我想我可以创建一个亮度图,将其反转,然后将其应用到我的图像以消除黑点。然而,我所能找到的只有两种均衡方法:均衡整个图像(使用直方图)或将图像分割成深色和浅
我是一名优秀的程序员,十分优秀!