Articles of cubemap

立方体贴图中的纹理错误

我正在尝试将这个纹理应用为立方体贴图 。 这是我的结果: 显然,我正在做我的纹理坐标的东西,但我不能为我的生活弄清楚什么。 我甚至没有看到纹理片段的模式。 他们看起来像是一堆不同的面孔。 任何人都可以点亮这个? 顶点着色器: #version 400 in vec4 vPosition; in vec3 inTexCoord; smooth out vec3 texCoord; uniform mat4 projMatrix; void main() { texCoord = inTexCoord; gl_Position = projMatrix * vPosition; } 我的片段着色器: #version 400 smooth in vec3 texCoord; out vec4 fColor; uniform samplerCube textures void main() { fColor = texture(textures,texCoord); } […]

reflection/环境映射

我正在使用立方体贴图来实现reflection/环境映射 。 我大部分都在工作,但是当我移动相机的时候,我看到了物体上的同一个区域。 我正在计算类似于OpenGL Shading Language 3rd Edition(p.311,10.4节)的视图空间中的眼向量和法向量。 为什么反思仍然是一样的? 我应该计算哪个空间? 渲染看起来如何: HLSL代码片段 顶点着色器: normal = mul( (float3x3)mvMatrix, input.normal ); normal = normalize(normal); viewPos = mul( mvMatrix, float4(input.pos, 1) ); 像素着色器: viewPos.w = 0; V = normalize(viewPos); normal.w = 0; normal = normalize(normal); float4 reflectVec = normalize(reflect(V, normal)); float4 reflectColor = tex.Sample(samLinear, reflectVec.xyz );

立方体贴图纹理只适用于顶点位于范围内的对象吗?

我试图纹理一个不是天空盒的.obj文件。 所以问题是,关于立方体贴图的每个教程都会创建其顶点范围为[-1,1]的硬编码立方体。 可能不是,但是有必要将我的.obj模型扩展到这个范围? 此外,为了将我的片段与正确的纹理贴图进行映射 – 我看到有人在线告诉我应该记下一个点,然后用着色器中的模型中心c将其减去。 有人说我应该正常化他们? normalize(p – c)我希望你能帮我提供一个简单的解释。

E_FAIL:加载立方体贴图时发生未确定的错误(-2147467259)

我试图在我的引擎中实现一个天空盒,并且我在将图像加载为立方体地图时遇到了一些麻烦。 如果我没有在ShaderResourceView.FromFile()方法中使用ImageLoadInformation结构加载,但是如果我这样做了,则一切正常(但它看起来不正确)。 我当然需要,因为我需要告诉SlimDX将其加载为一个立方体贴图。 我怎样才能解决这个问题? 这是我的新的加载代码后的“修复”: public static void LoadCubeTexture(string filename) { ImageLoadInformation loadInfo = new ImageLoadInformation() { BindFlags = BindFlags.ShaderResource, CpuAccessFlags = CpuAccessFlags.None, Depth = 32, FilterFlags = FilterFlags.None, FirstMipLevel = 0, Format = SlimDX.DXGI.Format.B8G8R8A8_UNorm, Height = 512, MipFilterFlags = FilterFlags.Linear, MipLevels = 1, OptionFlags = ResourceOptionFlags.TextureCube, Usage = ResourceUsage.Default, Width = 512 }; textures.Add(filename, […]

如何在DirectX 11中的多维数据集的不同的方面不同的纹理?

我最近学习了如何在DirectX中使用单个纹理来构造一个立方体,但是现在我正试图在一个立方体上放置多个纹理。 如果您对下面的照片感到困惑,应该澄清一下。 我意识到多维数据集映射技术,但大多数在线教程只使用Skyboxforms的这种方法,这不是我现在想要实现的。 如果有人可以解释我可以为不同的立方体有不同的质地或任何形状 ,将是伟大的。 MSDN文档说,我需要使用一个纹理多维数据集/数组,但它缺乏有关实现的信息。

立方体贴图或2D纹理贴图

我正在尝试用OpenGL中的COBE球面立方体(CSC)投影来绘制四维地球(想要映射行星)。 我设法创建了一个2D纹理,除了接缝边缘外,它的效果很好。 然后我了解到在OpenGL中有一个立方体贴图。 它有一些优点:它自动生成无缝的mipmap和它需要较less的存储器(我是使用4 *尺寸宽度3 *尺寸高度纹理其中一半只是浪费这样的: https://camo.githubusercontent.com/b017f71b03e6180dc75ff34f017d45f32e9db817/68747470733a2f2f7261772e6769746875622e636f6d2f6369782f517561645370686572652f6d61737465722f6578616d706c65732f677269642e706e67 ) 使用立方体贴图的问题是CSC不是gnomonic投影。 所以我不能只使用顶点作为3D纹理坐标。 我必须从uv坐标和脸部计算三维纹理坐标。 然后OpenGL重新计算它的uv坐标和脸部。 相比于简单的2D纹理,我认为这会降低渲染速度。 使用2D纹理的问题是使纹理无缝化并不容易。 如果我为整个纹理使用一个图像文件,则需要更多的内存。 我想我可以预先生成mipmaps采样相邻的面孔,并添加1px的填充和修改uv坐标稍微(像这样? https://gamedev.stackexchange.com/a/49585/74052 )。 但是这听起来很复杂,我必须预先生成所有的mipmap,纹理可能不会是2的大小,我可能会遇到另一个问题。 我不知道要走哪条路。 当使用立方体贴图时,是否有直接指定uv坐标和面的方法,而不指定三维纹理坐标(方向)? 有没有办法将2D纹理换行模式设置为像CLAMP_TO_EDGE_OF_OTHER_TEXTURE这样的边缘模式? 有没有其他的方法来使二维立方体纹理无缝? 任何其他的建议来处理这个问题? 提前致谢!

glGenerateMipmap中的GL_INVALID_OPERATION(不完整立方体贴图)

我正在尝试学习OpenGL,并使用SOIL来加载图像。 我有以下一段代码: GLuint texID = 0; bool loadCubeMap(const char * baseFileName) { glActiveTexture(GL_TEXTURE0); glGenTextures(1, &texID); glBindTexture(GL_TEXTURE_CUBE_MAP, texID); const char * suffixes[] = { "posx", "negx", "posy", "negy", "posz", "negz" }; GLuint targets[] = { GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z }; for (int i = 0; i < 6; i++) { int width, height; std::string […]

Cubemaps变成黑色的OpenGL GLSL Java LWJGL

最近我尝试添加立方体贴图到我的3D渲染引擎。 带有立方体贴图的对象现在变成完全黑色的。 这是我如何加载我的立方体贴图: public static int loadCubeMap(String filename) { int id = GL11.glGenTextures(); GL13.glActiveTexture(GL13.GL_TEXTURE0); GL11.glBindTexture(GL13.GL_TEXTURE_CUBE_MAP, id); for(int i = 0; i < CUBEMAP_NAMES.length; i++) { TextureData data = decodeTextureFile(CUBEMAPS_LOCATION + filename + "/" + CUBEMAP_NAMES[i]); GL11.glTexImage2D(GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL11.GL_RGBA, data.getWidth(), data.getHeight(), 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, data.getBuffer()); } GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); GL11.glTexParameteri(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_WRAP_S, […]

glFramebufferTexture2D给立方体贴图纹理造成损坏

我正在使用glFramebufferTexture2D与立方体贴图纹理,但它在纹理中给腐败。 draw_cube()函数完美的工作,当我在默认的帧缓冲区绘制。 GLenum types[]={GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z }; GLuint Fboid; glGenTextures(1, &id1); nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glGenTextures(1, &id1);")); glBindTexture(*target11, id1); nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glBindTexture(*target11, id1);")); glGenFramebuffers(1, &Fboid); nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glGenFramebuffers(1, &Fboid);")); GLint fl=0; switch(*target11) { case GL_TEXTURE_CUBE_MAP: for(int i=0;i<6;i++) { glTexImage2D(types[i], 0, GL_RGBA_16_SNORM,32,32, 0, GL_RGBA, GL_BYTE,0); } glTexParameteri(*target11, GL_TEXTURE_MIN_FILTER,GL_NEAREST); nResult |= GL_ERROR_CHECK((GL_NO_ERROR, "glTexParameteri(*target11, […]

在NVidia卡上绘制立方体贴图和纹理arrays不起作用

我有阴影贴图预览小问题。 绑定阴影framebuffer后,我绑定适当的纹理存储深度,然后呈现整个场景。 当我在着色器中读取这些值来计算阴影时,所有testing的计算机上的预期效果都如我所愿。 但是当我想在二维四边形上画这个纹理时,我只能在AMD卡上工作。 在NVidia我所有的是白色的空的领域。 这只发生在立方体贴图和数组纹理上。 这里是屏幕: 创建帧缓冲区: if(!_s_buffer)glGenFramebuffers(1, &_s_buffer); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, _s_buffer); glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, _depth.get(), 0); // set anything to framebuffer to avoid "framebuffer incomplete" error glDrawBuffer(GL_NONE); glReadBuffer(GL_NONE); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); 这个问题可能是由于使用了一个framebuffer来创建立方体贴图和数组纹理,并在代码中切换它们(一次深度附件是立方体贴图 – glFramebufferTexture2D,textarget设置为正确的立方体贴图面 – 另一次是数组贴图 – glFramebufferTextureLayer) 。 你可以帮我吗? 我正在寻找解决scheme,但没有结果。 也许你遇到了这样的问题。 如果需要更多的代码,我可以发布它。