问题标签 [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.
iphone - OpenGL ES Light 问题
我是 OpenGL ES 的新手,正在为 iPhone 开发 Objective-C。
我想了解的是光是如何定位在我的视锥体中的。我就是这样做的:
我创建了一个正方形并将其作为我的平截头体中的“地板”。我把灯放在地板中间,就在上面,把灯的方向指向正下方。现在,我希望地板上的光圈位于中间。但事实并非如此,它更靠后(更远)。怎么会?
这不应该使光环位于地板中间而不是稍微向后定位吗?
这是我的重要代码:
设置视图:
和绘图:
另外,我认为改变
到
伯德变黑了,没有光照在上面。为什么,我只是把灯移近了两步……?如果我像这样将它移开两步,也会发生同样的事情:
非常感谢任何有助于“阐明”我的问题的帮助!(忍不住……;))
提前致谢!
c++ - opengl中的街灯和阴影?
为了使场景街道照明,我尝试了点光源,使用了 glMaterial 和环境光。
我得到了一个完全照亮的场景,而不是完全像路灯那样的方式,任何人都可以分享资源或解释我是如何实现这一目标的吗?
我在网上浏览了很多轻资源,无法正确理解。
iphone - 将自己的结构传递给opengl es 2.0着色器
我想尝试 OpenGL ES 2.0 Programming Guide 一书中的照明示例。在着色器中,他们制作了两个结构。
他们还根据这些结构制作了两件制服。
问题是,我不知道如何将自己的结构传递到实际的着色器中。
我想在我的主代码中创建相同的结构并将对象传递到着色器中。这怎么可能?
问候尼古拉斯
android - 添加glEnable(GL_COLOR_MATERIAL)时OpenGL ES(Android)立方体禁用照明?
这可能是一个非常简单的问题,我只是不明白。我想在立方体上照明,但有些面有不同的颜色。以下代码生成一个没有光照但只有一个黑色面的立方体:
取消注释 glEnable(GL10.GL_COLOR_MATERIAL) 会导致没有黑色面的发光立方体。我怎样才能得到一个黑色的发光立方体?
math - 为什么我的 GLSL 着色器照明会随着它所照射的对象在场景中移动?
我正在学习关于 OpenGL ES 2.0 的教程,并将它与我找到的关于GLSL 照明的教程结合起来,使用 developer.apple.com 上的一个方便的犹他茶壶。
经过大量的摆弄和实验,我在屏幕上适度正确地绘制了茶壶,围绕所有三个轴旋转,照明教程中的“卡通阴影”工作。由于我只是将整个顶点列表绘制为三角形条带,因此几何中有一些小故障(如果您查看 teapot.h 文件,我应该开始新的三角形条带的地方嵌入了“-1”,但这是仅测试数据,与我的问题无关)。
我真正感到困惑的是如何在场景中定位灯光。在我的 Objective-C 代码中,我有一个包含 {0,1,0} 的浮点3向量,并将其传递给着色器,然后计算光的强度。
为什么灯光在场景中似乎也在移动?我的意思是,光线就像是用一根看不见的棍子固定在茶壶上一样,无论茶壶朝向哪个方向,它总是指向茶壶的同一侧。
这是顶点着色器
“位置”由 Obj-C 代码设置,是对象的顶点,“法线”是来自顶点数组 (VBO) 的法线列表,“投影”和“模型视图”的计算方式如下:
(CC3GLMatrix 来自 Cocos3D 库,在上面链接的 GLES 教程中提到)
我通过做设置场景中的灯光
片段着色器看起来像这样
在尝试解决这个问题时,我遇到了引用(GLES 中不存在)“gl_LightSource”和“gl_NormalMatrix”的代码,但不知道将什么放入等效项中,我必须从我的代码中传递给着色器。对“眼睛空间”、“相机空间”、“世界空间”等的引用令人困惑,我知道我可能应该在它们之间进行转换,但不明白为什么或如何(以及在代码中或着色器中的位置) ?)
每一帧都需要修改光源吗?我设置它的代码看起来太简单了。我并没有真正移动茶壶,是吗,而是我在移动整个场景——光线和四周?
iphone - 将结构数组传递给 OpenGL ES 2.0 着色器
我想实现某种照明。我正在制作一个结构,它在顶点着色器中包含光源属性:
在我的应用程序中,我想要几个光源。所以我说:
然后我怎样才能从应用程序加载这些制服?这是一个好方法还是更好:
ios - GLSL ES 将顶点剪辑到远平面
我在我的 iPhone 上玩弄影子音量,如果影子音量上限被远平面夹住,则一切正常。
由于gl_ClipVertex
在 GLSL ES 中不可用,我如何将其剪辑gl_Position.z
到远平面?我已经尝试使用gl_Position.z = gl_Position.w
,但结果是错误的,阴影体积似乎跟随相机方向。还有其他方法吗?
android - OpenGL ES 1.1 奇怪的光照问题
我正在研究我在 Android 上使用 OpenGL 照明时遇到的一个有趣问题。我正在开发一个 3D 查看器,您可以在其中添加和操作 3D 对象。您还可以设置具有不同属性的灯光。我的查看器面临的问题是来自灯光(它是点光源)的 3D 对象上的高光表现异常。如果光源与相机位于完全相同的点,则高光将向您预期的相反方向移动。(因此,如果您将对象移动到左侧,突出显示也会移动到对象的左边缘,而不是我所期望的右侧。)
因此,为了进一步缩小问题范围,我创建了一个仅渲染正方形的小型示例应用程序,然后我围绕相机位置(原点)旋转该正方形,这也是放置灯光的位置。这应该会导致所有方块都直接面向相机,这样它们就会被完全突出显示。结果看起来像这样:
会不会是因为投影导致边框变形而出现这些伪影?
在第一张图像中,球体和相机之间的距离约为 20 个单位,球体的大小约为 2。如果我将光线移近物体,高光看起来会好很多,正如我所期待的那样. 在第二幅图像中,正方形所在的半径为 25 个单位。我在 Android 3.1 上使用 OpenGL ES 1.1(因为我一直在努力让它与 ES 2.0 中的着色器一起工作)
这是我正在使用的一些代码:
我在开始时设置灯光,当活动开始时(在 onSurfaceCreated 中)以及每次我绘制正方形时的材质。
opengl - 是否可以在不声明表面法线的情况下使用 OpenGL 照明?
是否可以在不声明表面法线的情况下声明对象的照明?
我愿意做的步骤是:
够了吗,还是我必须把 glNormal 也放在那里?