问题标签 [skybox]

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 投票
1 回答
659 浏览

c++ - OpenGL:天空盒放大太多

我正在尝试在游戏中实现天空盒。我使用的图像是:

在此处输入图像描述

不幸的是,它被极度放大,只显示了纹理的几个像素。它看起来像这样:

在此处输入图像描述

这是我创建天空盒的代码:

这是天空盒的渲染代码:

片段着色器很简单:

和顶点着色器一样:

编辑:这是我生成投影矩阵的代码:

这是我的 FoV:

0 投票
2 回答
1280 浏览

c - 我正在尝试在 C 中使用 openGL 创建一个天空盒,但只得到一个黑屏

我正在尝试使用 C 语言中的 OpenGL 创建一个天空盒。我查看了很多教程并查看了很多人的代码,我认为我没有错过任何内容,但还是出现了黑屏。我是不是把整件事都搞错了?

0 投票
1 回答
871 浏览

html - Three.js: displaying a
over a canvas with skybox

I created a skybox on a Three.js canvas like this:

My problem is that any 'div' I try to add above the canvas is hidden behind the skybox whatever z-index I give it. They show up if I do not add the skybox. Does anybody know why and how to fix it?

0 投票
0 回答
73 浏览

opengl - 将 3D 系统投影到球体上时的云台锁定

我正在我的游戏中制作一个天空盒。游戏中有一个太阳系,里面有一些东西(首先是太阳和地球,背景是星星)。玩家在这个太阳系的一个星球上。太阳系使用天空盒向玩家展示,2D 精灵投影到天空盒的相应位置。Skybox 是用 OpenGL 渲染的(实际上是 Java 的 LWJGL)[1]

首先,所有身体都在 3D 空间中进行跟踪。我可以获得它们的坐标、相对方向等。所有轨道都是独立定义的(又名,发生在任意平面上)。此外,行星具有四元数旋转。以全 3D 渲染系统,没有问题。


将系统投影到天空盒完全是另一回事。从理论上讲,我认为我应该能够这样做;

1.计算玩家正在看的方向向量(完全旋转无关 - 向量只需指向正确的方向)。

2.将这个方向向量乘以他们行星的方向(四元数)来计算“观察方向”

3.计算从行星到被观察物体的方向矢量

4.找到向量之间的旋转,并相应地旋转天空盒。


但是,当我向 OpenGL 提供我的角度时,会发生 Gimbal Locking 并且轨道应该是直的:完全弯曲(尽管围绕一个单轴旋转可以正常工作)。我可以通过哪些方式尝试防止这种情况发生?我不知所措。

[1]:我的地形实际上是一个扁平的方形体素网格,我将玩家的坐标缩放到它上面,然后假装它是一个 3D 星球。

0 投票
0 回答
482 浏览

opengl - 使用 OpenGL/GLSL 时立方体映射无法正常工作

我对立方体映射技术有一个奇怪的行为:我所有的像素着色器都返回黑色。所以我有一个黑屏。

情况如下:

我有一个仅由简单的立方体网格(天空盒)和轨迹球相机组成的场景。

现在让我们检查资源(6 个独立纹理的方面):

在此处输入图像描述

这是图像详细信息:

在此处输入图像描述

如您所见,这些纹理需要以 GL_RGB 格式加载。

现在,对于初始化部分,让我们看一下客户端 C++ 纹理加载代码(我使用“DevIL”库来加载我的图像):

关于主循环部分,这是我发送给着色器程序的信息(纹理和矩阵数据):

如您所见,立方体贴图纹理绑定到纹理单元 1。

现在这里是顶点着色器:

最后是片段着色器:

所以所有编译和执行的程序都显示以下结果:

在此处输入图像描述

但我想准确地说我使用的是 NVIDIA NSight 调试器,我想首先向您展示立方体贴图已正确加载到 GPU 上:

在此处输入图像描述

如您所见,它是在上面的代码中编写的,我的纹理是绑定到单元纹理 1 的 RGB 纹理,它是 GL_TEXTURE_CUBE_MAP 纹理类型。所以直到这里一切似乎都是正确的!

如果我在片段着色器中替换该行:

按行:

我有以下结果(我直接将模型空间中的顶点坐标渲染为颜色)没有线框:

在此处输入图像描述

与线框相同的结果:

在此处输入图像描述

另外,我想准确地说:

总是返回“0”值,所以我没有错误!

所以我认为这最后两张图片表明矩阵信息是正确的,顶点坐标也是正确的(此外,我使用的是轨迹球相机,当我移动到我的场景中时,我可以识别立方体架构)。所以对我来说,我在着色器程序中恢复的所有信息都是正确的,除了立方体采样器!我认为问题出在这个采样器上。但是,正如您在上面看到的那样,立方体贴图似乎已正确加载。

在这种情况面前,我真的很迷茫。我不明白为什么所有像素着色器都返回 #000000 颜色(我也尝试使用 RGBA 格式,但结果是一样的)。

0 投票
1 回答
647 浏览

image - Three.js 天空盒没有完全或根本没有加载

我在我的 Three.js 画布中插入了一个天空盒,如下所示:

我的问题是图像根本不加载或完全取决于浏览器。

在 Chrome 上,它们几乎总是被加载(有时一张脸没有被加载)。在 Firefox 上,它们几乎从未在第一次加载(我得到黑色背景)。我试图添加一个 settimer 来等待完整的加载,但它不会改变任何东西。似乎它们已加载或未加载或部分加载,但无需等待。

我做错什么了吗?图像是否有特定的格式?

0 投票
1 回答
2460 浏览

c++ - 渲染动态立方体贴图 (OpenGL)

我正在尝试将场景渲染 6 次并将它们放在立方体贴图的两侧。在继续学习几何着色器之前,我想先正确地做到这一点,这将允许一次完成。代码如下:




我已经修改了我之前项目中的代码,该项目实现了用于 IBL 和反射/折射的静态立方体贴图。如果您认为有必要,我会提供着色器代码。在这个阶段,只有乱码被渲染。

最终结果 最终结果

实际场景 实际场景

更新 大方块是我的 setViewMat 函数中的一个错误的结果,它没有应用堆叠转换。它现在只渲染场景,纹理是黑色的。我使用 AMD gDEBugger 来查看生成的立方体贴图,它只是黑色的。所以我认为要么是我最初的 fbo 绑定,要么是我在第一遍中渲染每一面的方式有问题。

0 投票
2 回答
25817 浏览

unity3d - Unity5的天空盒包在哪里找?

我对 Unity 还很陌生,我正在学习将天空盒添加到我的场景的教程。在教程中,他们使用 Unity4 并且他们执行 Assets>Import Package>Skybox,但我在 Unity 5 中没有看到这个选项。有人知道它在哪里吗?

0 投票
1 回答
1889 浏览

c++ - 延迟渲染天空盒 OpenGL

我刚刚实现了延迟渲染,但无法让我的天空盒正常工作。我尝试在渲染循环的最后渲染我的天空盒,我得到的只是黑屏。这是渲染循环:

下面是天空盒的渲染函数

这是天空盒的顶点着色器:

天空盒的片段着色器只是将输出颜色设置为texture(cubeMap, TexCoord). 正如您从顶点着色器中看到的那样,我将位置的z组件设置为w使其深度始终为 1。我还将深度函数设置为GL_LEQUAL使其无法通过深度测试。这不仅应该在尚未绘制其他对象的地方绘制天空盒吗?为什么会导致黑屏?

我知道我已经正确设置了天空盒,因为如果我自己绘制天空盒,它会显示得很好。

0 投票
1 回答
1156 浏览

opengl - 你如何制作一个单一的图像天空盒?

我已经让天空盒工作了,除了它需要六个文件。我想了解如何使用 1 个文件而不是 6 个文件。我在整个互联网上都查看过,找不到任何可行的方法。这是将图像放入立方体贴图中的 loadCubeMap 函数: