我正在通過一個book on OpenGL工作,我被卡在第三章。下面的代碼應該打開一個窗口並在中心繪製一個點。OpenGL和GLFW - 我需要着色器來繪製一個點嗎?
窗口出現,glClearColor
和glClear
似乎工作,但沒有點。 This answer我認爲我可能需要編譯和鏈接簡單的頂點和片段着色器。
這本書沒有提到它們,但是我需要着色器嗎?我是如何繪製點的?窗戶上有什麼東西?該書使用了一些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,但我打開固定管道上下文。
不,你不需要着色器,除非你使用OpenGL 3或4(你知道,因爲你必須要求),在這種情況下,一切都需要着色器。 – immibis
(在OpenGL 3中,他們使着色器成爲強制性的,這使得它們可以刪除大量非着色器的東西,大大簡化了OpenGL,但也使其難以開始) – immibis
啊哈,謝謝!我已經安裝了4.5,而這本書顯然是使用版本2.第六章是'可編程管道',它以3+開頭。 – Will