gpt4 book ai didi

c++ - OpenGL:带着色器的 glColor3f() 和 glVertex3f()

转载 作者:行者123 更新时间:2023-12-02 18:24:32 26 4
gpt4 key购买 nike

我可以在着色器中使用 glColor3f()、glVertex3f() 或其他 API 函数吗?我写了一个着色器来绘制彩色立方体,它工作得很好。我的顶点着色器和片段着色器看起来像这样

#vertext shader
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
uniform mat4 model;
uniform mat4 view;
uniform mat4 proj;
out vec4 vertexColor;
void main()
{
gl_Position = proj * view * model * vec4(aPos.x, aPos.y, aPos.z, 1.0);
vertexColor = vec4(aColor, 1.0);
};

#fragment shader
#version 330 core
in vec4 vertexColor;
out vec4 FragColor;
void main(){
FragColor = vertexColor;
};

不,我尝试将 gl 函数与我的彩色立方体一起使用。假设我有一些像这样的绘制代码。

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, 0, -1, 0, 0, 0, 0, 1, 0);
glColor3f(1.0, 0.0, 0.0);
glLineWidth(3);
glBegin(GL_LINES);
glVertex3f(-1, -1, 0);
glVertex3f(1, 1, 0);

因为我使用 glUseProgram() 来使用我自己的着色器。上面的 gl 函数似乎没有按预期工作(坐标和颜色都是错误的)。像 glVertex3f() 这样的函数如何将顶点传递给着色器?使用 gl 函数绘制时,着色器应该是什么样子?

最佳答案

Can I use glColor3f(), glVertex3f() or other API functions with shader?

是的,你可以。

但是,您需要使用兼容性配置文件 OpenGL Context并且您仅限于 GLSL 1.20 顶点着色器和 Vertex Shader Built-In Attributes (例如gl_Vertexgl_Color)。您可以将 GLSL 1.20 顶点着色器与片段着色器结合起来。固定函数矩阵堆栈中的矩阵可以通过 Built-In Uniforms 访问就像gl_ModelViewProjectionMatrix
所有属性和制服均在 OpenGL Shading Language 1.20 Specification 中详细指定。 .

合适的顶点着色器可以如下所示:

#version 120

varying vec4 vertexColor;

void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
vertexColor = gl_Color;
};
#version 330

in vec4 vertexColor;
out vec4 FragColor;

void main(){
FragColor = vertexColor;
};

关于c++ - OpenGL:带着色器的 glColor3f() 和 glVertex3f(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70408799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com