gpt4 book ai didi

c - 使用顶点缓冲区对象为 OpenGL 中的基元赋予颜色

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:23 26 4
gpt4 key购买 nike

我正在用 C 编写一个程序,使用 OpenGL 来绘制一些图元(直线、圆等)。我已经成功地使用缓冲区对象来存储图元的顶点,并因此绘制它们。但我现在似乎被卡住了,因为我不知道如何设置它们的颜色。部分程序是我老师给我的,所以我知道颜色属性必须使用这个结构来指定:

typedef struct {
float r;
float g;
float b;
float a;
} vec4;

我知道我应该使用一个 vec4 数组来存储颜色值,所以我声明了一个这样的变量。第一个是 vec2 数组,用于存储原始顶点。

vec2 vertices[10000];
vec4 colours[10000];

(据我所知)用于设置顶点缓冲区限制的函数如下所示:

void initShaders(void) 
{
GLuint buffer;
GLuint loc;
GLuint vao;

/*Create and initialize a program object with shaders */
idProgram = initProgram("ass1vshader.glsl", "ass1fshader.glsl");

/*installs the program object as part of current rendering state */
glUseProgram(idProgram);

/*Creat a vertex array object */
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);

/*Create buffer in the shared display list space and */
/* bind it as GL_ARRAY_BUFFER */
glGenBuffers( 1, &buffer);
glBindBuffer( GL_ARRAY_BUFFER, buffer);
glBufferData( GL_ARRAY_BUFFER, sizeof(vertex)+sizeof(colours), NULL,GL_STATIC_DRAW);

/*Initialize attribute vPosition in program */
loc = glGetAttribLocation( idProgram, "vPosition");
glEnableVertexAttribArray(loc);
glVertexAttribPointer(loc, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)BUFFER_OFFSET(0));

/*Get location of the uniform attribute 'u_proj_matrix' */
idProjection = glGetUniformLocation(idProgram, "u_proj_matrix");

/*Set graphics attributes */
glLineWidth(3.0);
glPointSize(1.0);
glClearColor(1.0, 1.0, 1.0, 1.0);

}

如您所见,我已将顶点缓冲区大小初始化为“顶点”和“颜色”的组合大小。

我还了解到片段着色器在着色过程中起着重要作用。它看起来像这样:

#version 140

in vec4 color;
out vec4 fColor;

void
main()
{
fColor = color;
}

有人能告诉我如何为我的基元着色吗?我希望我提供的信息足够。

最佳答案

一种方法是使用颜色数组。您可以通过调用 glColorPointer() 来完成此操作与处理 glVertexPointer() 的方式相同。

此外,我不知道这是否只是一个拼写错误,或者您是否确实有此错误,但您写道:

glBufferData( GL_ARRAY_BUFFER, sizeof(vertex)+sizeof(colours), NULL,GL_STATIC_DRAW);

但是,您的顶点数组被命名为“vertices”而不是“vertex”(至少根据您之前的声明)。如果它编译正常,那么它可能意味着你有另一个名为顶点的变量或数据结构,但它并没有按照你的想法进行。

并且由于您的数据不是交错的(您有单独的顶点和颜色数据),我认为您需要为它们使用单​​独的缓冲区。如果它们在一个结构中,您可以使用单个数组,并适本地设置步幅,但由于它们没有交错,我不确定您尝试做的事情是否有效。

关于c - 使用顶点缓冲区对象为 OpenGL 中的基元赋予颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220327/

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