对GLSL和OpenGL感到困惑
Confused about GLSL and OpenGL
所以我对OpenGL还很陌生,我一直在尝试GLSL,当然,我也遇到了一些问题。首先,我要注意的是,我目前只画一个奇异的三角形。其次,这里是我的(非常简单的)着色器:
// Vertex Shader
#version 330
in vec3 vertex_position;
void main()
{
gl_Position = vec4(vertex_position, 1.0);
}
和
// Fragment Shader
#version 330
out vec4 fragColour;
void main() {
fragColour = vec4(0.0, 1.0, 0.0, 1.0);
}
这样画一个三角形效果很好。太棒了现在我想编辑顶点着色器,这样就可以代替
gl_Position = vec4(vertex_position, 1.0)
我做
gl_Position = vec4(vertex_position, 2.0)
果不其然,它放大了我的三角形。所以我想,也许如果我从顶点着色器中提取Z,并将W设置为等于它,我可以获得深度感,所以我这样做了:
// Vertex Shader
#version 330
in vec3 vertex_position;
void main()
{
gl_Position = vec4(vertex_position, vertex_position.z);
}
但是,唉,当我运行这个程序时,它什么也没显示。如果人们想知道,下面是我的顶点:
float points[] = {
0.0f, 0.5f, 1.0f,
0.5f, -0.5f, 1.0f,
-0.5f, -0.5f, 1.0f
};
此外,我应该说,我注意到,由于某种原因,将float points[]
中的z值更改为0以外的任何值都会使三角形的该部分不可见。
w
坐标为0的"顶点"被认为是无限远的,因此不会显示。0的w
用于表示方向,而不是点。
将w
设置为等于z
将消除任何深度感。点[x, y, z, w]
的实际三维坐标是[ x/w, y/w, z/w ]
(这是齐次坐标的原理)。
通常,将w
固定为1.0,并通过x
、y
和z
设置顶点位置。
相关文章:
- Opengl 3.1 GLSL 140 在 C++ 年输出白色在片段着色器中
- imageLoad glsl 在计算着色器 OpenGL 4.3 中始终返回 0
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- OpenGL GLSL 片段着色器中的随机数
- 从固定函数迁移到 GLSL OpenGL:我应该如何修改我的视图(lookAt)矩阵和透视矩阵?
- OpenGL GLSL 纹理函数始终返回 vec4(1,1,1,1),白色三角形
- OpenGL,GLSL片段着色器无法读取Sampler2D纹理
- 即使 OpenGL、SDL 和 GLSL 都没有抛出错误,也没有绘制多边形
- 深度检查OpenGL(GLSL)
- 使用 OpenGL/GLSL 1.2 更改纹理色调
- Opengl-glsl 單虛擬光
- Opengl/glsl 尝试编写用于绘制四边形的着色器,但不确定如何处理屏幕纵横比的变化
- OpenGL GLSL 着色器版本
- 使用深度纹理OpenGL/GLSL的深度遮挡(3.3/330)
- 帮助调试OpenGL glsl着色器或使用它的代码
- Qt5 OpenGL GLSL版本错误
- opengl / glsl / sdl代码中的c++访问冲突
- c++/OpenGL/GLSL,带有"random"伪影的纹理
- Mac上的OpenGL GLSL着色器无法编译
- 将位置写入纹理OpenGL/GLSL