【发布时间】:2015-11-02 22:38:29
【问题描述】:
我正在使用 OpenGL 开发一个简单的粒子系统;到目前为止,我已经编写了两个片段着色器来更新速度和位置以响应我的鼠标,它们似乎工作!我查看了这两个纹理,它们似乎都能正确响应(从随机噪声变为有序结构以响应我的鼠标)。
但是,我遇到了如何绘制粒子的问题。我对顶点着色器比较陌生(以前只使用过片段着色器);据我了解,通常的方式是这样的顶点着色器:
uniform sampler2DRect tex;
varying vec4 cur;
void main() {
gl_FrontColor = gl_Color;
cur = texture2DRect(tex, gl_Vertex.xy);
vec2 pos = cur.xy;
gl_Position = gl_ModelViewProjectionMatrix * vec4(pos, 0., 1.);
}
会根据位置缓冲区中的值将坐标转换到适当的位置。但是,当我运行它时遇到无法编译的 gl 错误——经过一些研究,似乎 gl_ModelViewProjectionMatrix 已被弃用。
既然不推荐使用模型视图矩阵,那么正确的方法是什么?我并不想用透视做任何花哨的事情,我只需要一个简单的纹理正交视图。
谢谢!
【问题讨论】:
-
如果您只需要一个普通的正交视图,为什么要使用矩阵?
-
仅设置
gl_Position = vec4(pos, 0., 1.);似乎不起作用——尽管我认为如果这应该是正确的,这可能是片段着色器问题!
标签: c++ glsl fragment-shader vertex-shader