问题标签 [opengl-es-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 投票
0 回答
560 浏览

opengl-es-lighting - 前照灯或对灯光工作方式的理解

我正在使用 OpenGL 开发一个 3D 迷宫项目。尽管我对编程知之甚少,但我还是设法构建了它,添加了纹理并使用鼠标和键盘进行了操控(不过大部分都是从网上偷来的)。现在我被灯光困住了。

我的想法(类似于著名的游戏 SCP-087)是制作一个射程短的前照灯。我已经阅读了很多关于 OpenGL 和法线中的光照的内容,但是光照仍然表现得很奇怪而且有点随机。

我有这些功能,可以在相机周围移动(翻译)我的世界。我知道,如果我将 light0 放在代码的开头,在 Render() 函数中的翻译之前,该灯应该与相机“仍然放置”,并且世界将围绕它们移动 - 这听起来很简单。但这似乎不起作用。当我侧身站立时,大部分墙壁都亮着(当我转向另一侧时完全黑暗)。

我的另一个问题是正常的。我很确定,我的法线没有很好地指定,但不知道它们应该是什么样子。我正在为墙壁使用三角形条(理论上是为了提高效率,但实际上这只是我的任性),我无法找到解决方案如何为由三角形条制成的直墙指定法线(如何为面附加法线,当我实际上只有两个顶点定义一个面)。制作一堵简单的四边形墙并为一个面附加四个垂直的、一个单位向量的长度也没有任何改进。

我既不能正确处理 OpenGL 状态机的参数,尤其是衰减 - 代码中的任何更改似乎都不会影响最终照明。

我目前不知道在哪里搜索以及阅读关于 OpenGL 中光照的内容。我想让它变得超级简单,没有额外的库(glu.h 除外)。你能帮我解决这个问题或向我推荐任何有用的知识来源(需要简单的例子......)吗?

0 投票
0 回答
815 浏览

android - OpenGL ES 光镜面渲染仅在对象的一半上

我正在关注适用于 Android 的 Pro OpenGL ES 一书,并试图让镜面反射正确渲染。这是正在发生的事情:

奇怪的镜面反射

我正在使用 OpenTK 的 ES11.GL。

这是我的照明代码:

由于我对 3D 和 OpenGL 都很陌生,所以我不知道这个问题是由什么引起的。如果我将光移到另一侧,图像就会反转。如果光线直接来自球体前面,则根本不会显示任何规格。

为什么基本灯可以正常工作,但在包含规范时,它会失败?

0 投票
1 回答
389 浏览

opengl-es - opengl中灯光的位置

我正在尝试绘制一个旋转立方体并在该立方体前面的固定位置添加一个聚光灯。但是因为我在 z 轴上设置了错误的值,所以灯光不显示。在我尝试了不同的光线位置后,立方体终于如我所愿地显示出来了。但我仍然不知道为什么这个值有效。

这是错误的代码。但我认为价值是合理的。

这是正确的代码。但我不知道为什么它有效。

这两个片段之间的区别仅在于光位置的 z 轴。您可以从这里获取所有源代码。

我认为0.0f, 0.0f, 0.5f位置合理的原因是立方体正面的中心点0.0f, 0,0f, 0.5f在变换之前。所以它会给立方最强的光。

0 投票
1 回答
268 浏览

java - 无法初始化方法 initGeometry(gl); 初始化照明(gl);在课堂上

帮我找出我的错误。我从书中做了一个例子,但可能是作者(或我)制造了一些麻烦,我找不到解决办法。第一类是我的对象的几何

第二个是渲染:package com.example.solarsystem;

所以在surfaceCreated方法中我在初始化initGeometry(gl)中有错误;初始化照明(gl);此外,如果我将我的 initLighting 方法从第一类削减到渲染类,我会在初始化 makeFloatBuffer 时出错。

0 投票
2 回答
945 浏览

android - 顶点着色器中的 Phong 光照

我正在尝试使用适用于 Android 的 OpenGL ES 2.0 来显示具有法线和颜色的简单立方体。为此,我创建了一个着色器程序,附加我的顶点和片段着色器,并链接我的程序,如下所示:

最后它崩溃了,打印到LogCat:glUseProgram: glError 1281我检查了文档,glError 1281,即GL_INVALID_VALUE如果程序既不是0也不是OpenGL生成的值时生成。

在谷歌搜索了大约 10 个小时之后,我决定向 StackOverflow 寻求帮助。知道我的顶点着色器代码有什么问题使 glUseProgram 以这种方式运行吗?

这是我的顶点着色器代码,我尝试实现 phong 照明:

0 投票
2 回答
1171 浏览

android - OpenGL ES 2.0 的漫反射着色器:光线随相机移动而变化(Android 上的 Vuforia)

作为起点,我使用了名为 MultiTargets 的 Vuforia(版本 4)示例,它跟踪摄像机源中的 3d 物理“立方体”,并沿立方体边缘使用黄色网格线对其进行扩充。我想要实现的是通过设置我自己的光照位置来移除纹理并在立方体面上使用漫反射光照。

我想在原生 Android 上执行此操作,我不想使用 Unity。

这是几天的工作和学习的艰难旅程。这是我第一次使用任何类型的 OpenGL,而 OpenGL ES 2.0 对初学者来说并不容易。

所以我有一个位于立方体顶面上方的光源。我发现如果我在模型空间中计算朗伯因子,我可以得到正确的漫反射效果,无论我的相机如何,一切都保持在原位,只有顶面有任何光线。

但是当我开始使用眼睛空间时,它变得很奇怪,光线似乎跟着我的相机走来走去。其他面变亮,不仅是顶面。我不明白为什么会这样。为了测试,我通过仅使用到光源的距离在片段着色器中渲染像素亮度来确保灯光位置符合预期。因此,我对我的“lightDirectionEyespace”的正确性相当有信心,我唯一的解释是法线一定是错误的。但我认为我遵循了正确创建法线矩阵的解释......

请帮忙!

然后当然还有一个问题,这些漫反射计算是否应该在眼睛空间中执行?如果我只是在模型空间中这样做会有什么缺点吗?我怀疑当我以后使用更多模型和灯光并添加镜面反射和透明度时,它可能不再起作用,即使我还不明白为什么。

我的 renderFrame 方法:(一些变量名仍然包含“bottle”,这是我在获得正确的立方体后接下来要点亮的对象)

我的顶点着色器:

还有我的片段着色器:

0 投票
2 回答
350 浏览

opengl - 具有多个点光源的 Cook-Torrance 着色器

我正在尝试使用四个点光源来实现Cook-Torrance 照明模式。虽然我只使用一个点光源就得到了很好的结果,但我不明白哪种方法是在我的光循环中总结镜面反射项的正确方法。

我将材料定义如下:

...因此我的灯只有一种颜色/强度属性,

这是我的片段着色器中带有片段颜色计算的函数:

我相信这里的关键是我在光循环中的错误计算:

这是我的意思的一个例子,产生的片段颜色要么太暗,要么太亮。我无法总结每个光的贡献,以获得镜面反射项和材质颜色之间的平滑颜色渐变。

在此处输入图像描述

我在这里阅读有关伽马校正的信息,但我不明白这是否适用于我的问题。

我应该如何将每个 light.color 与材质的漫反射、环境和镜面反射颜色相加,以计算最终的片段颜色,正确地包括每个灯光的镜面反射高光贡献总量?

0 投票
0 回答
102 浏览

opengl-es - 着色器和厨师托伦斯无法输出纹理

我对opengl es shader和cook-torrance完全陌生,下面的shader只输出红色,没有为环境光和点光处理纹理颜色。立方体用于测试,没有应用着色器,右侧火箭有纹理没有输出,只有红色。任何opengl es家伙可以提供帮助吗? 在应用 Cook-torrance 和输出之前没有质感只有红色没有纹理只有红色 原始纹理 gl_FragColor =texture2D(texture,vertTexCoord.st).rgb*vertColor; 使用厨师托伦斯之前的原始质地但是是什么让下面的 CookTorance() 失败了?

片段着色器

上面的厨师托伦斯有什么错误吗?请帮忙。

顶点着色器