OpenGL奇怪的顶点着色器问题

o

在我开始提问之前,请先了解一下背景知识。我不久前才开始学习OpenGL,并且在这里我已经了解了大部分知识我实际上只过去了2个教程,是的,我知道我最终将不得不学习矩阵,但是到目前为止,还没有什么花哨的东西。因此,让我们继续吧。

好的,所以,我只是简化了程序,但不用担心,它仍然会产生同样的问题。对于我的示例,我们正在制作一个紫色三角形。我照例进行初始化GLFW和GLEW的操作,并创建一个带有以下提示的窗口:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_SAMPLES, 8);

然后创建我的窗口:

GLFWwindow* Window = glfwCreateWindow(640, 480, "Foo", NULL, NULL);
glfwMakeContextCurrent(Window);
glfwSwapInterval(0);

这些是我的顶点:

float Vertices[] = {
    0.0f, 0.5f, 1.0f,
    0.5f, -0.5f, 1.0f,
    -0.5f, -0.5f, 1.0f
};

我的着色器:

const char* vertex_shader =
    "#version 330\n"
    "in vec3 vp;"
    "void main () {"
    "  gl_Position = vec4 (vp, 1.0);"
    "}";


const char* fragment_shader =
    "#version 330\n"
    "out vec4 frag_colour;"
    "void main () {"
    "  frag_colour = vec4 (0.5, 0.0, 0.5, 1.0);"
    "}";

一切都很好,我编译了整个程序,瞧!紫色三角形!

Purple Triangle.png

顺便说一句,左上角的黄色计数器是FRAPS。

因此,无论如何,我的大脑有了这个很棒的主意(不是真的),如果我这样做的话,该怎么办:vec4(vp, vp.z)在顶点着色器中呢?我想,然后我就可以通过更改缓冲区中的z来获得某种深度。请注意,我并没有考虑替换透视图矩阵,这只是一种实验。请不要讨厌我

通过更改值,它起作用了,我得到了一个看起来像深度的东西,就像它越来越远了。看一下,我将最高顶点从1.0更改为6.0:

紫色三角形深度

现在是问题所在:我将值更改为999999999(9个9),我得到了:

紫色三角形深度2

似乎可以工作。与z = 6的差值很小。将其更改为999999999999999999999999(24个9)?没有不同。看一下自己:

我已经没有足够的想法来称呼我的图片了

所以这很奇怪。数量差异很大,但外观差异很小。准确性问题?349乘以24个9,得到相同的结果。踢法:将24个9乘以350,三角形消失。这让我感到惊讶,因为我认为这种变化将是可见的并且是渐进的。显然不是。但是,在顶点着色器中手动更改w而不是手动更改vp.z似乎会产生渐进的结果,而不是突然消失。我希望有人能对此有所启发。如果您走的很远,那么您就是一个读完我所有烂话的真棒人,为此,我谢谢您。

尼科·谢特勒(Nico Schertler)

您的模型可以看作是针孔摄像机的一种简单形式,其中深度方向的消失点是窗口中心。因此,如果平行于z轴的线延伸,则它们在中心会合。窗口中心代表无限深度的点。

将顶点的z(或w)分量从1更改为6是深度上的很大变化(该顶点距摄影机的距离是以前的6倍)。这就是为什么最终顶点比以前更靠近屏幕中心的原因。如果再次将z分量加倍,它将向屏幕中心稍微靠近一点(距离将减半)。但是显然它已经非常靠近中心了,因此这种变化几乎无法识别。999999 ...深度值也是如此。

您可以在大多数自然图像上观察到此属性,尤其是在道路上:

道路图片[来源:http//www.benetemps.com/road-warriors.htm ]

如果您沿着道路走-假设-5米,您将最终到达图像底部的某处。如果再走五米,您将继续到达图像中心。再过五米,您就更近了。但是您可以看到,屏幕上的距离越来越远,距离越来越短。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OpenGL奇怪的顶点着色器问题

来自分类Dev

顶点着色器的OpenGL属性名称

来自分类Dev

OpenGL调试,如何查看顶点着色器的结果

来自分类Dev

OpenGL顶点着色器变换,对象消失

来自分类Dev

在OpenGL的顶点着色器中获取元素ID

来自分类Dev

顶点着色器和片段着色器如何在OpenGL中通信?

来自分类Dev

顶点着色器或片段着色器中的OpenGL ES2.0 Lighting

来自分类Dev

OpenGL无法将变量从顶点着色器发送到片段着色器

来自分类Dev

OpenGL 4.X的顶点着色器如何处理大量顶点

来自分类Dev

OpenGL-从顶点着色器访问缓冲区中的下3个顶点

来自分类Dev

OpenGL-GLSL绘制3D GL_LINES顶点着色器与顶点

来自分类Dev

尝试在Win32 OpenGL中使用着色器,但顶点着色器什么也没画

来自分类Dev

带有顶点着色器和QGLShaderProgram的OpenGL HeightMap

来自分类Dev

将属性传递给OpenGL顶点着色器的行为异常

来自分类Dev

如何从顶点着色器中的vec3获取值?OpenGL 3.3

来自分类Dev

OpenGL性能:VBO /顶点着色器与glEnableClientState / glVertexPointer和glMultMatrix与glUniformMatrix

来自分类Dev

OpenGL ES 2.0 矢量转换无法通过矩阵乘法(在顶点着色器中)工作

来自分类Dev

OpenGL C++、立方体贴图、顶点着色器

来自分类Dev

在vertexShader中使用OpenGl未声明的标识符,我在顶点着色器中绘制三角形时遇到问题

来自分类Dev

顶点着色器中的边界框

来自分类Dev

顶点着色器无法编译。找不到错误

来自分类Dev

OpenglES 2.0顶点着色器属性

来自分类Dev

没有属性的顶点着色器

来自分类Dev

无法在Maya插件中编译顶点着色器

来自分类Dev

glsl顶点着色器glGetUniformLocation失败

来自分类Dev

“构造函数”的参数过多[顶点着色器]

来自分类Dev

在顶点着色器中移动/旋转形状

来自分类Dev

WebGL-丢弃顶点着色器标记的片段

来自分类Dev

GPU如何处理顶点着色器?

Related 相关文章

  1. 1

    OpenGL奇怪的顶点着色器问题

  2. 2

    顶点着色器的OpenGL属性名称

  3. 3

    OpenGL调试,如何查看顶点着色器的结果

  4. 4

    OpenGL顶点着色器变换,对象消失

  5. 5

    在OpenGL的顶点着色器中获取元素ID

  6. 6

    顶点着色器和片段着色器如何在OpenGL中通信?

  7. 7

    顶点着色器或片段着色器中的OpenGL ES2.0 Lighting

  8. 8

    OpenGL无法将变量从顶点着色器发送到片段着色器

  9. 9

    OpenGL 4.X的顶点着色器如何处理大量顶点

  10. 10

    OpenGL-从顶点着色器访问缓冲区中的下3个顶点

  11. 11

    OpenGL-GLSL绘制3D GL_LINES顶点着色器与顶点

  12. 12

    尝试在Win32 OpenGL中使用着色器,但顶点着色器什么也没画

  13. 13

    带有顶点着色器和QGLShaderProgram的OpenGL HeightMap

  14. 14

    将属性传递给OpenGL顶点着色器的行为异常

  15. 15

    如何从顶点着色器中的vec3获取值?OpenGL 3.3

  16. 16

    OpenGL性能:VBO /顶点着色器与glEnableClientState / glVertexPointer和glMultMatrix与glUniformMatrix

  17. 17

    OpenGL ES 2.0 矢量转换无法通过矩阵乘法(在顶点着色器中)工作

  18. 18

    OpenGL C++、立方体贴图、顶点着色器

  19. 19

    在vertexShader中使用OpenGl未声明的标识符,我在顶点着色器中绘制三角形时遇到问题

  20. 20

    顶点着色器中的边界框

  21. 21

    顶点着色器无法编译。找不到错误

  22. 22

    OpenglES 2.0顶点着色器属性

  23. 23

    没有属性的顶点着色器

  24. 24

    无法在Maya插件中编译顶点着色器

  25. 25

    glsl顶点着色器glGetUniformLocation失败

  26. 26

    “构造函数”的参数过多[顶点着色器]

  27. 27

    在顶点着色器中移动/旋转形状

  28. 28

    WebGL-丢弃顶点着色器标记的片段

  29. 29

    GPU如何处理顶点着色器?

热门标签

归档