OpenGL 和 GLFW - 我需要着色器来绘制一个点吗?
OpenGL and GLFW - Do I need shaders to draw a point?
我正在写一本关于OpenGL的书,我被困在第三章。 下面的代码应该打开一个窗口并在中心绘制一个点。
窗口出现,glClearColor
和glClear
似乎在工作,但没有点。 这个答案让我相信我可能需要编译和链接简单的顶点和片段着色器。
这本书没有提到它们,但我需要着色器吗? 我是否错过了我画点的方式的其他东西? 窗户有东西? 这本书使用了一些WIN32
的东西进行窗口化,我使用的是Linux Mint 17.1
代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <GL/glew.h>
#include <GL/gl.h>
#include <GLFW/glfw3.h>
#include <GL/glut.h>
#define BUFFER_OFFSET(i) ( (char*)NULL + (i) )
static void error_callback(int error, const char* description) {
fputs(description, stderr);
}
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
int main(void) {
GLFWwindow* window;
glfwSetErrorCallback(error_callback);
if (!glfwInit()) {
exit(EXIT_FAILURE);
}
window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);
if (!window) {
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
glfwSetKeyCallback(window, key_callback);
if (glewInit()) {
glfwTerminate();
exit(EXIT_FAILURE);
}
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
float ratio;
int width, height;
glfwGetFramebufferSize(window, &width, &height);
ratio = width / (float) height;
glViewport(0, 0, width, height);
GLfloat vertex [] = {0.0f, 0.0f, -2.0f};
GLuint m_vertexBuffer;
glGenBuffers(1, &m_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 3, &vertex[0], GL_STATIC_DRAW);
while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));
glPointSize(10.0f);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_POINTS, 0, 1);
glDisableClientState(GL_VERTEX_ARRAY);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
另外,我正在编译g++ main.cpp -lGL -lglfw -lGLU -lGLEW
我已经安装了OpenGL 4.5,但正在打开一个固定的管道上下文。
从你的代码:
GLfloat vertex [] = {0.0f, 0.0f, -2.0f};
由于您使用固定函数 pipelione 并且从不设置任何矩阵,因此投影和 modelView 矩阵都将保留为默认值,并且点 (0, 0, -2) 位于查看体积之外。请尝试 (0, 0, 0)。
如果本书完全使用了这个代码和那个顶点坐标,你最好搜索另一个。您还应该考虑学习"现代"GL。十年前,固定功能管道基本上已经被 GL2.0 中的着色器所取代。
相关文章:
- 绘制一个对象,比较模具缓冲区的两个不同值
- 使用 glDrawElements 绘制一个 std::vector
- 如何在openGL C++中绘制一个空心圆
- Opencv,在图像中的对象周围绘制一个框
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- 直接X 11:在屏幕上绘制一个简单的彩色矩形
- 使用 C++ 库 GLEW 在 openGl 中绘制一个红色三角形
- 如何在 MFC 中围绕当前光标的位置绘制一个矩形
- Direct3D:尝试绘制一个三角形,但什么也没显示
- 绘制一个向量<glm::vec3> opengl c++
- 给定两组 xyz 坐标和一个 sag (a) 的值,我可以在 OpenGL 中的这些点之间绘制一个悬链线
- 使用 Win32 中的 HBITMAP 绘制一个二维数组,C++
- 无法用SDL2 GFX绘制一个填充的圆圈
- 用星号绘制一个矩形
- DirectX10仅绘制一个渲染目标
- OpenGL 和 GLFW - 我需要着色器来绘制一个点吗?
- 从点云中的质心绘制一个矢量
- 从几个十进制数中绘制一个十六进制数
- 编程难题 - 绘制一个倒三角形
- 如何绘制一个所有面都有不同纹理的立方体