OpenGL-将立方体贴图的面渲染为四边形

livin_amuk

我需要将立方体映射的特定面渲染为四边形以进行调试。

这个类似的问题中,我收集到您使用三维纹理坐标,但是我需要一些信息来克服这一障碍。我现在所得到的只是黑色,有时甚至是完全不同的颜色。

到目前为止,我已经使用以下内容绘制了二维四边形。

GL.ActiveTexture(TextureUnit.Texture0);
GL.BindTexture(TextureTarget.Texture2D, textureID);

GL.BindVertexArray(VAO);
GL.DrawArrays(PrimitiveType.Triangles, 0, vertices.Length);

我需要在这里进行调整吗?这样做的一般方法是什么?

雷托·科拉迪(Reto Koradi)

需要进行一些更改,这些更改都非常简单。

纹理目标

当前使用的位置TextureTarget.Texture2D,您将TextureTarget.TextureCubeMap改为使用例如,假设您已经具有给定的多维数据集贴图纹理:

GL.BindTexture(TextureTarget.TextureCubeMap, textureID);

着色器代码中的采样器类型

在片段着色器中,当前定义了一个sampler变量,该变量看起来像这样:

uniform sampler2D Tex;

您将其修改为:

uniform samplerCube Tex;

纹理坐标

最大的变化与您的纹理坐标有关。用于多维数据集贴图的纹理坐标将包含3个分量,可以将其解释为方向向量。绘制与以原点为中心的多维数据集贴图相对应的多维数据集。然后,由纹理坐标给出的方向向量指向将要采样的纹理像素。

一种选择是修改由客户代码产生的顶点属性中的纹理坐标。您可以将它们扩展到3个组件,而不是以前的2个,并选择适当的值以隔离要渲染的面。

与其这样做,不如根据您已经传递给2D纹理的着色器代码的现有纹理坐标来计算新的纹理坐标,可能要容易得多。当前纹理坐标在两个坐标方向上都跨度为[0.0,1.0]的正方形时,您需要将该范围映射到多维数据集的面,其中多维数据集以原点为中心,并且扩展区为[-1.0,1.0 ]在每个坐标方向上。

为此,请使用-1.0或1.0作为与您要隔离的面部相匹配的坐标方向,然后将其他两个坐标的输入纹理坐标从[0.0,1.0]范围缩放/移动到[-1.0,1.0]范围指示。

假设您在2D纹理案例的着色器代码中具有以下内容:

uniform sampler2D Tex;
in vec2 TexCoord;
...
    vec4 val = texture(Tex, TexCoord);

然后,对于GL_TEXTURE_CUBE_MAP_POSITIVE_X脸部,使用1.0作为立方体纹理坐标的x坐标,并缩放/移动其余两个坐标:

uniform samplerCube Tex;
in vec2 TexCoord;
...
    vec2 mapCoord = 2.0 * TexCoord - 1.0;
    vec4 val = texture(Tex, vec3(1.0, mapCoord.xy));

GL_TEXTURE_CUBE_MAP_NEGATIVE_X脸部等效

    vec4 val = texture(Tex, vec3(-1.0, mapCoord.xy));

对于GL_TEXTURE_CUBE_MAP_POSITIVE_Y脸:

    vec4 val = texture(Tex, vec3(mapCoord.x, 1.0, mapCoord.y));

对于GL_TEXTURE_CUBE_MAP_NEGATIVE_Y脸:

    vec4 val = texture(Tex, vec3(mapCoord.x, -1.0, mapCoord.y));

对于GL_TEXTURE_CUBE_MAP_POSITIVE_Z脸:

    vec4 val = texture(Tex, vec3(mapCoord.xy, 1.0));

对于GL_TEXTURE_CUBE_MAP_NEGATIVE_Z脸:

    vec4 val = texture(Tex, vec3(mapCoord.xy, -1.0));

请注意,立方体贴图面的方向有点模棱两可。如果您对结果输出的方向有特定的期望,则可能必须置换/镜像上面代码中的某些值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OpenGL将纹理四边形渲染为(0,0)的单个像素?

来自分类Dev

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

来自分类Dev

OpenGL:渲染天空盒立方体贴图问题

来自分类Dev

动态立方体贴图 - opengl

来自分类Dev

渲染大量四边形的有效方法(LibGDX / OpenGL ES)

来自分类Dev

渲染大量四边形的有效方法(LibGDX / OpenGL ES)

来自分类Dev

从.obj文件在OpenGL中绘制四边形

来自分类Dev

在OpenGL中围绕坐标旋转四边形

来自分类Dev

在OpenGL中纹理四边形

来自分类Dev

通过纹理四边形的OpenGL字体

来自分类Dev

OpenGL:立方体贴图纹理,无UV贴图

来自分类Dev

如何用另一个四边形遮罩OpenGL四边形

来自分类Dev

使用OpenGL ES在iPhone上渲染到立方体贴图

来自分类Dev

OpenGL:天空盒/立方体贴图部分显示,三角形缺失

来自分类Dev

使用移动相机翻转OpenGL立方体贴图反射

来自分类Dev

使用移动相机翻转OpenGL立方体贴图反射

来自分类Dev

OpenGL 4.0立方体贴图问题

来自分类Dev

OpenGL黑色/空白立方体贴图纹理

来自分类Dev

如何在OpenGL中使用立方体贴图数组使用阴影贴图渲染多个点光源?

来自分类Dev

在openGl 3.1或更高版本上,我应该使用什么绘制四边形?

来自分类Dev

如何在OpenGL中正确纹理四边形

来自分类Dev

如何在openGL中纹理随机凸四边形

来自分类Dev

OpenGL-裁剪并奇怪拉伸的纹理四边形

来自分类Dev

OpenGL不会同时绘制带纹理和无纹理的四边形

来自分类Dev

在OpenGL中旋转四边形无法正确显示(rotatef)

来自分类Dev

OpenGL不会在启用GL_COLOR_ARRAY的情况下绘制四边形

来自分类Dev

OpenGL不会在启用GL_COLOR_ARRAY的情况下绘制四边形

来自分类Dev

绘制四边形时的OpenGL glColor3f(r,b,g)更改整个地图的颜色

来自分类Dev

使用立方体贴图(OpenGL / GLSL),点光源是否可能产生柔和阴影?

Related 相关文章

  1. 1

    OpenGL将纹理四边形渲染为(0,0)的单个像素?

  2. 2

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

  3. 3

    OpenGL:渲染天空盒立方体贴图问题

  4. 4

    动态立方体贴图 - opengl

  5. 5

    渲染大量四边形的有效方法(LibGDX / OpenGL ES)

  6. 6

    渲染大量四边形的有效方法(LibGDX / OpenGL ES)

  7. 7

    从.obj文件在OpenGL中绘制四边形

  8. 8

    在OpenGL中围绕坐标旋转四边形

  9. 9

    在OpenGL中纹理四边形

  10. 10

    通过纹理四边形的OpenGL字体

  11. 11

    OpenGL:立方体贴图纹理,无UV贴图

  12. 12

    如何用另一个四边形遮罩OpenGL四边形

  13. 13

    使用OpenGL ES在iPhone上渲染到立方体贴图

  14. 14

    OpenGL:天空盒/立方体贴图部分显示,三角形缺失

  15. 15

    使用移动相机翻转OpenGL立方体贴图反射

  16. 16

    使用移动相机翻转OpenGL立方体贴图反射

  17. 17

    OpenGL 4.0立方体贴图问题

  18. 18

    OpenGL黑色/空白立方体贴图纹理

  19. 19

    如何在OpenGL中使用立方体贴图数组使用阴影贴图渲染多个点光源?

  20. 20

    在openGl 3.1或更高版本上,我应该使用什么绘制四边形?

  21. 21

    如何在OpenGL中正确纹理四边形

  22. 22

    如何在openGL中纹理随机凸四边形

  23. 23

    OpenGL-裁剪并奇怪拉伸的纹理四边形

  24. 24

    OpenGL不会同时绘制带纹理和无纹理的四边形

  25. 25

    在OpenGL中旋转四边形无法正确显示(rotatef)

  26. 26

    OpenGL不会在启用GL_COLOR_ARRAY的情况下绘制四边形

  27. 27

    OpenGL不会在启用GL_COLOR_ARRAY的情况下绘制四边形

  28. 28

    绘制四边形时的OpenGL glColor3f(r,b,g)更改整个地图的颜色

  29. 29

    使用立方体贴图(OpenGL / GLSL),点光源是否可能产生柔和阴影?

热门标签

归档