问题标签 [lighting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
875 浏览

directx - 如何使用 Direct3D 使灯光在世界上保持固定

我已经使用 OpenGL 很多年了,但是在第一次尝试使用 D3D 之后,我浪费了大量时间试图弄清楚如何让我的场景灯光保持固定在世界上而不是固定在我的对象上。

在 OpenGL 中,灯光位置会像使用 MODELVIEW 矩阵的其他所有内容一样进行转换,因此要在空间中固定灯光,您可以按照您想要的灯光方式设置您的 MODELVIEW,然后调用 glLightPosition,然后为您的几何体设置它并进行几何体调用. 在 D3D 中这无济于事。

(评论——我最终想出了这个问题的答案,但我在网络或 MSDN 上找不到任何有用的东西。如果我当时能找到这个答案,它会节省我几个小时的时间。 )

0 投票
12 回答
16332 浏览

algorithm - 计算在基于瓦片的游戏中哪些瓦片被点亮(“光线追踪”)

我正在编写一个基于图块的小游戏,我想为此支持光源。但是我的算法fu太弱了,所以我来找你帮忙。

情况是这样的:有一个基于瓦片的地图(以 2D 数组的形式保存),其中包含一个光源和几个站在周围的物品。我想计算哪些瓷砖被光源照亮,哪些在阴影中。

大概的样子的视觉帮助。L 是光源,X 是阻挡光线的物品,0 是点亮的瓷砖,-s 是阴影中的瓷砖。

当然,分数系统会更好,其中由于部分被遮挡,瓷砖可能处于半阴影中。该算法不必是完美的——只是没有明显错误并且相当快。

(当然,会有多个光源,但这只是一个循环。)

有接盘侠吗?

0 投票
3 回答
12755 浏览

opengl - 在 OpenGL 中平滑面部边缘的技术

当我在 OpenGL 中使用人脸法线照亮我的人体模型时,每个人脸在模型上的位置非常明显。使用顶点法线,光照变得相当平滑,但仍然很明显。是否有任何技术可用于在不添加额外顶点(例如细分)的情况下平滑有机模型?

0 投票
1 回答
315 浏览

c++ - OpenGL中的光照问题

我在开发 OpenGL 应用程序时遇到了麻烦。

奇怪的是,我和我的一个朋友正在 Linux 下使用 OpenGL 开发 3d 场景,并且存储库中有一些代码,但是如果我们都签出相同的最新版本,这意味着会发生相同的代码:他的电脑在编译后可以看到完整的光照模型,而在我的电脑上,我只激活了环境光,但没有激活漫反射或镜面反射光。

这可能是驱动程序的问题吗?(因为他使用的是 ATi 卡,而我使用的是 nVIDIA 卡)还是静态库?

我再说一遍,它是相同的代码,在不同的机器上编译......这很奇怪,它应该看起来一样。

感谢您提供的任何帮助或提示。

0 投票
1 回答
4894 浏览

opengl - OpenGL GLSL 插值

我尝试使用 GLSL 在 OpenGL 中实现点光源。我将所有需要的数据发送到着色器。为简单起见,我在这里只使用漫反射光。

我的示例显示了一个巨大的三角形,我想用一个光源照亮它。光源显示为一个蓝色的小三角形。

对于漫射光,我需要知道光与表面之间的角度。因此,我计算法线和光线的方向。然后点积会给我一个介于 -1 和 1 之间的数字,而 0 和 1 之间的所有内容都会被照亮。

但是,在这里我被卡住了,因为在我的示例中这个角度计算不正确。由于很难调试着色器,我使用了几个输出作为我的表面颜色。我使用法线作为三角形的颜色,无论光线在哪里,表面总是绿色。也就是说,法线指向 y 轴,因此它们被正确计算。也就是说,光的方向一定是错误的。但是,我找不到错误的原因。光的位置和顶点的位置在世界空间中传递给顶点着色器,然后将它们转换到眼睛空间,计算光的方向并将其传递给片段着色器:

顶点着色器:

片段着色器:

我已经附上了这个例子的一些图片,这些图片肯定表明插值真的很奇怪。我知道想知道我粘贴的代码是否正确,或者您是否需要了解更多代码。此外,这种插值行为是正常的还是我的代码中的错误?

http://img41.imageshack.us/img41/3566/interpolation.png http://img189.imageshack.us/img189/3566/interpolation.png

特别是第一张图片显示,灯的中心点不是直接在灯下,而是稍微移动到三角形的中心。

如果我将“pos”传递给片段着色器(即,它被插值)然后在片段着色器中计算“lightDir”,一切正常。

0 投票
3 回答
1178 浏览

graphics - 推荐用于灯光/激光表演模拟器的 3D 编程方面?

大家好,我想开发一个灯光/激光表演编辑器和模拟器,为此我当然要学习一些图形编程。我正在考虑使用 C# 和 XNA。

我只是想知道考虑到我正在从事的项目,我应该研究或关注图形编程的哪些方面。我是图形编程的新手,所以我不太了解它,但例如我想我可能会研究的东西(可能?)是体积照明。

例如,渲染不同宽度/颜色的“激光”的实用方法是什么?我在某处读到只是画一个圆柱体并对其应用着色器,我想确认这是方法。

鉴于这似乎是一个大项目,我正在考虑从创建光源并赋予它们属性开始,以便我可以轻松地操纵它们。我(误)读到在任何给定时间只能渲染一定数量的灯光,我相信是八个。这仅适用于环境光吗?考虑到这种可能的限制,而且我将使用的大多数灯光都是定向的,例如头灯或激光,那么渲染它们的不同方式是什么?那就是体积照明吗?

在我深入研究之前,我只是想弄清楚一些事情。由于我是新手,所以我可能没有充分利用单词,所以如果有什么不明白的地方,请告诉我。感谢并为我的无知感到抱歉。

0 投票
6 回答
13913 浏览

opengl - 如何在旋转对象时在 OpenGL 中固定光源?

我有一个 glutSolidTeapot(根据 opengl.org 自动生成其表面法线)和一个发射漫射光的光源。当我尝试旋转茶壶时,问题就出现了:光源似乎也在旋转,而不是保持在我定义的相同位置(它基本上跟随茶壶)。正如您在我的代码中看到的,我只在初始化时修改光照位置,因此它不受 glRotatef() 的影响,因为它在设置光照位置后调用。

尽管花了很多时间试图解决这个问题,但我真的不知道这种行为可以归因于什么。

粘贴 glEnable(GL_NORMALIZE); 在初始化中也没有解决问题。

我认为所需的输出应该是右侧有光泽的茶壶(因为光线来自那个方向),无论茶壶旋转什么角度。

如果您想测试我的代码,请按空格键旋转茶壶。

0 投票
5 回答
11412 浏览

opengl - 如何在 GLSL 中将定向光转换为相机空间

我有以下用于照明的 GLSL 代码:

光矢量在世界空间中指定。我使用gluLookAt. 由于 OpenGL 假设光矢量在相机空间中,所以光会随着相机移动,而不是保持在固定的方向。

我尝试在调用之前和之后激活着色器并设置光矢量gluLookAt,但我得到了相同的效果。我究竟需要做什么才能正确转换光矢量?

0 投票
1 回答
2792 浏览

opengl - opengl灯问题

我已经加载了一个对象,当我绘制对象时,我将颜色设置为绿色。绘制对象后,我用红色绘制线条。

一切都很好。当我输入照明属性时出现问题。当我创建一个光源时,灯光投射的所有东西都会变成白色。为什么灯光会写我的颜色?我该如何解决这个问题?

提前致谢..

0 投票
2 回答
8174 浏览

opengl - 旋转相机时的OpenGL照明问题

我在我的游戏世界中绘制建筑物,我使用以下代码为它们着色:

它工作得很好。

但是当我开始在世界上飞行时,灯光会对此做出反应,就好像世界是一个正在旋转的物体一样。所以当我的相机角度改变时,灯光也会改变。

我如何恢复这种旋转?所以灯光会认为我实际上并没有在旋转世界,然后我可以使我的建筑物具有静态阴影,该阴影会根据太阳在天空中的位置而变化。

编辑:这是渲染代码: