我正在使用SIFT算法,并希望在不同的图像关键点之间画线。我已经实现了这一点,但是所有的线都是同样的颜色,因此不可读。
我想要实现的是为每条线设置随机颜色,但是每条线只有1个颜色。
我必须使用着色器来完成这个操作,所以我将LINES和POINTS(即颜色)发送到同一个着色器中,但是我不知道我的代码有什么问题(当我尝试执行我的代码时会崩溃。编辑:不是我的代码出了问题(显然是...),而是错误导致了崩溃,就像我有一个分段错误一样。所以我认为我的错误是由于我的颜色数组分配位置错误引起的(因为没有这个数组也可以工作))
我的代码:
我想要实现的是为每条线设置随机颜色,但是每条线只有1个颜色。
我必须使用着色器来完成这个操作,所以我将LINES和POINTS(即颜色)发送到同一个着色器中,但是我不知道我的代码有什么问题(当我尝试执行我的代码时会崩溃。编辑:不是我的代码出了问题(显然是...),而是错误导致了崩溃,就像我有一个分段错误一样。所以我认为我的错误是由于我的颜色数组分配位置错误引起的(因为没有这个数组也可以工作))
我的代码:
std::vector<GLfloat> points;
std::vector<glm::vec3> colors;
GLuint VAO, VBO[2];
void setupLines() {
glGenVertexArrays(1, &VAO);
glGenBuffers(2, &VBO[0]);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO[0]);
glBufferData(GL_ARRAY_BUFFER, points.size() * sizeof(GLfloat), &points[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);
glBindBuffer(GL_ARRAY_BUFFER, VBO[1]);
glBufferData(GL_ARRAY_BUFFER, colors.size() * sizeof(glm::vec3), &colors[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);
glBindBuffer(GL_ARRAY_BUFFER,0);
glBindVertexArray(0);
glBindTexture(GL_TEXTURE_2D, 0);
}
void draw() {
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO[0]);
glDrawArrays(GL_LINES, 0, points.size());
//The error occurs here, it seems...
glBindBuffer(GL_ARRAY_BUFFER, VBO[1]);
glDrawArrays(GL_POINTS, 0, colors.size());
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
//for each points, we create the same colors 2by 2 so lines (that are 2 points) have the same colors
void addColor() {
for (int i = 0; i < points.size()/2; ++i) {
float a = rand() / (float)RAND_MAX;
float b = rand() / (float)RAND_MAX;
float c = rand() / (float)RAND_MAX;
colors.push_back(glm::vec3(a, b, c));
colors.push_back(glm::vec3(a, b, c));
}
}
我的顶点着色器:
#version 330 core
layout (location = 0) in vec2 aTexCoord;
layout (location = 1) in vec3 color;
out vec2 TexCoord;
out vec3 Col;
void main()
{
TexCoord = vec2(aTexCoord.xy);
Col = color;
}
然后我在片元着色器中使用Col来进行颜色处理。
这样做是正确的吗?
std::vector<GLfloat>
,而colors是一个std::vector<glm::vec3>
,它们的大小相同。但也许这是错误的... - Raph Schim