【发布时间】:2019-05-11 12:03:37
【问题描述】:
当我想使用 gluLookat 并在它上面安装着色器时,当我关闭着色器时它不会移动“相机”,它可以正常工作。
我的着色器中是否缺少某些东西,我不知道是什么。
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.8, 0.8, 0.8, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.5,0,1,0.5,0,0,0,1,0);
glColor3f(0, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 6);
glDrawArrays(GL_LINES, 6, 6);
glDrawArrays(GL_TRIANGLES, 12,6);
glDrawArrays(GL_LINES, 18, 4);
glDrawArrays(GL_TRIANGLES, 22, 6);
glColor3f(1, 0.7, 0);
glDrawArrays(GL_TRIANGLES, 28, 6);
glFlush();
}
顶点着色器:
#version 450 core // 420, 330 core , compatibility
in vec4 position
out vec4 Color;
void main()
{
gl_Position = position;
}
片段着色器:
#version 450 core // 420, 330 core , compatibility
in vec4 Color;
layout(location=0) out vec4 fColor;
void main()
{
fColor = vec4(0,0,0,0);
}
将“相机”移动到我希望它在着色器打开的位置
【问题讨论】:
-
@Rabbid76 我到底要告诉着色器做什么,为什么我必须使用制服?
-
从技术上讲,您不必必须使用制服 - 任何将转换数据传输到着色器的方法都可以。 Uniforms 只是在这种情况下最明显的方式,并且或多或少直接等同于实现在模拟您在此处使用的超过 25 年的矩阵堆栈废话时在您背后执行的操作(已弃用)到现在十多年了)。
标签: c++ opengl glsl fragment-shader vertex-shader