我目前正在使用Bresenham的算法绘制线条,但它们(当然)厚度为一个像素.我的问题是绘制任意厚度线条的最有效方法是什么?
我使用的语言是C.
我在Mac OS X上设置了一个OpenGL 3.2 Core上下文.我希望能够在屏幕上绘制一些厚厚的黑色.在以前版本的OpenGL中,我可以设置
glLineWidth(10.0f);
Run Code Online (Sandbox Code Playgroud)
我会得到一个10像素宽的线.但是当我检查3.2 Core中的线宽范围时
GLint range[2];
glGetIntegerv(GL_ALIASED_LINE_WIDTH_RANGE, range);
glGetIntegerv(GL_SMOOTH_LINE_WIDTH_RANGE, range);
Run Code Online (Sandbox Code Playgroud)
对于别名线,我得到1的值,对于平滑线,我得到0-1的值.如何在屏幕空间中创建一个10.0像素宽的线?除了使每个线段成为矩形之外,还有一种简单的方法来绘制它吗?
在我的OpenGL应用程序中,它不会让我画一个大于十个像素宽的线.有没有办法让它绘制超过十个像素?
void OGL_Renderer::drawLine(int x, int y, int x2, int y2, int r, int g, int b, int a, int line_width)
{
glColor4ub(r, g, b, a);
glLineWidth((GLfloat)line_width);
glBegin(GL_LINES);
glVertex2i(x, y);
glVertex2i(x2, y2);
glEnd();
glLineWidth(1.0f);
}
Run Code Online (Sandbox Code Playgroud) 我只是想在屏幕上画一条线。我正在使用 OpenGL 4.6。我发现的所有教程都使用了glVertexPointer,据我所知,它已被弃用。
我知道如何使用缓冲区绘制三角形,所以我用一条线尝试了这一点。它没有用,只是显示黑屏。(我正在使用 GLFW 和 GLEW,并且我正在使用我已经在三角形上测试过的顶点+片段着色器)
// Make line
float line[] = {
0.0, 0.0,
1.0, 1.0
};
unsigned int buffer; // The ID, kind of a pointer for VRAM
glGenBuffers(1, &buffer); // Allocate memory for the triangle
glBindBuffer(GL_ARRAY_BUFFER, buffer); // Set the buffer as the active array
glBufferData(GL_ARRAY_BUFFER, 2 * sizeof(float), line, GL_STATIC_DRAW); // Fill the buffer with data
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), 0); // Specify how the buffer is converted to vertices …Run Code Online (Sandbox Code Playgroud)