如何使用glColor4f()和glDrawArrays(GL_LINES, 0,2)绘制彩色线?
How do I draw a colored line with glColor4f() and glDrawArrays(GL_LINES, 0, 2)
我有以下程序,我不知道为什么glColor4f()
调用没有导致glDrawArrays()
输出的红线,有人能告诉我我做错了什么吗?由于某种原因,输出了一条白线。glColor4f()
在现代版本的GL中不再支持了吗?如果是这样的话,怎样才能正确的给线条上色呢?
我所有的谷歌搜索都让我发现我应该打电话:
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
但是,在添加了这些调用之后,我没有看到任何差异。
#include <vector>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>
int main(int argc, char *argv[]) {
if(!glfwInit()) {
return EXIT_FAILURE;
}
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
GLFWwindow* window = glfwCreateWindow(800, 600, "Line Intersection", NULL, NULL);
if(!window) {
glfwTerminate();
return EXIT_FAILURE;
}
glfwMakeContextCurrent(window);
glewExperimental = GL_TRUE;
if(glewInit() != GLEW_OK) {
glfwTerminate();
return EXIT_FAILURE;
}
if(!GLEW_VERSION_3_2) {
glfwTerminate();
return EXIT_FAILURE;
}
static const glm::vec3 arr[] = {
glm::vec3(0,0,0),
glm::vec3(0,0.8f,0)
};
const glm::vec3* first = arr;
const glm::vec3* last = arr + sizeof(arr) / sizeof(arr[0]);
std::vector<glm::vec3> vertexBufferData (first, last);
static GLuint vertexBufferId;
glGenBuffers(1, &vertexBufferId);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBufferData[0]) * vertexBufferData.size(), &vertexBufferData[0], GL_STATIC_DRAW);
GLuint vertexArrayId;
glGenVertexArrays(1, &vertexArrayId);
glBindVertexArray(vertexArrayId);
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
while(!glfwWindowShouldClose(window)){
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glColor4f(1.0f,0.0f,0.0f,1.0f);
glDrawArrays(GL_LINES, 0, vertexBufferData.size());
glDisableVertexAttribArray(0);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return EXIT_SUCCESS;
}
您已经选择了一个Core配置文件。
Core中没有免费的,你必须提供一个顶点和片段着色器
相关文章:
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 彩色图像的卤化物处理平均值
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- SFML 文本未绘制在窗口上
- 如何在快板的屏幕中显示子位图的绘制?
- 如何绘制自定义形状的元素?
- 直接X 11:在屏幕上绘制一个简单的彩色矩形
- 如何使用Legacy OpenGL绘制不同的彩色线条
- 使用 VBO 绘制不同宽度的彩色线条
- 在灰度 (B/W) 图像上绘制彩色点
- 如何使用glColor4f()和glDrawArrays(GL_LINES, 0,2)绘制彩色线?
- 用XFT库绘制彩色字符串的更快方法是什么?