环境
运行环境Mac,Xcode,OpenGL4.1,glew,glfw,glm,soil2
参考书籍:《计算机图形学编程c++版》
以下程序在我的本地都跑出结果了
展示出一个红色的窗口
| #include <GL/glew.h> |
| #include <GLFW/glfw3.h> |
| #include <iostream> |
| |
| using namespace std; |
| void init(GLFWwindow* window){ |
| } |
| |
| void display(GLFWwindow* window,double currentTime){ |
| glClearColor(1.0, 0.0, 0.0, 1.0); |
| glClear(GL_COLOR_BUFFER_BIT); |
| } |
| |
| int main(void){ |
| if(!glfwInit()){exit(EXIT_FAILURE);} |
| GLFWwindow* window = glfwCreateWindow(600,600,"Chapter2 - program1",NULL,NULL); |
| glfwMakeContextCurrent(window); |
| if(glewInit() != GLEW_OK){exit(EXIT_FAILURE);} |
| glfwSwapInterval(1); |
| |
| init(window); |
| glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); |
| glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); |
| while (!glfwWindowShouldClose(window)) { |
| display(window, glfwGetTime()); |
| glfwSwapBuffers(window); |
| glfwPollEvents(); |
| } |
| glfwDestroyWindow(window); |
| glfwTerminate(); |
| exit(EXIT_SUCCESS); |
| } |
| |
窗口中间显示一个蓝色的点
| #pragma clang diagnostic push |
| #pragma clang diagnostic ignored "-Wdocumentation" |
| |
| #include <GL/glew.h> |
| #include <GLFW/glfw3.h> |
| #include <iostream> |
| |
| #define numVAOs 1 |
| GLuint renderingProgram; |
| GLuint vao[numVAOs]; |
| |
| GLuint createShaderProgram(){ |
| const char *vshaderSource = |
| "#version 430 \n" |
| "void main(void) \n" |
| "{ gl_Position = vec4(0.0,0.0,0.0,1.0); }"; |
| |
| const char *fshaderSource = |
| "#version 430 \n" |
| "out vec4 color; \n" |
| "void main(void) \n" |
| "{color = vec4(0.0,0.0,1.0,1.0); }"; |
| GLuint vShader = glCreateShader(GL_VERTEX_SHADER); |
| GLuint fShader = glCreateShader(GL_FRAGMENT_SHADER); |
| |
| glShaderSource(vShader,1,&vshaderSource,NULL); |
| glShaderSource(fShader,1,&fshaderSource,NULL); |
| glCompileShader(vShader ); |
| glCompileShader(fShader); |
| |
| GLuint vfProgram = glCreateProgram(); |
| glAttachShader(vfProgram,vShader); |
| glAttachShader(vfProgram,fShader); |
| glLinkProgram(vfProgram); |
| |
| return vfProgram; |
| } |
| |
| void init(GLFWwindow* window){ |
| renderingProgram = createShaderProgram(); |
| glGenVertexArrays(numVAOs,vao); |
| glBindVertexArray(vao[0]); |
| } |
| |
| void display(GLFWwindow* window,double currentTime){ |
| glUseProgram(renderingProgram); |
| glDrawArrays(GL_POINTS,0,1); |
| } |
| |
| int main(void){ |
| if(!glfwInit()){exit(EXIT_FAILURE);} |
| GLFWwindow* window = glfwCreateWindow(600,600,"Chapter2 - program1",NULL,NULL); |
| glfwMakeContextCurrent(window); |
| glewExperimental = GL_TRUE; |
| if(glewInit() != GLEW_OK){exit(EXIT_FAILURE);} |
| glfwSwapInterval(1); |
| |
| init(window); |
| glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); |
| glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); |
| while (!glfwWindowShouldClose(window)) { |
| display(window, glfwGetTime()); |
| glfwSwapBuffers(window); |
| glfwPollEvents(); |
| } |
| glfwDestroyWindow(window); |
| glfwTerminate(); |
| exit(EXIT_SUCCESS); |
| } |
| |
绘制点、线、面
| #pragma clang diagnostic push |
| #pragma clang diagnostic ignored "-Wdocumentation" |
| |
| #include <GL/glew.h> |
| #include <GLFW/glfw3.h> |
| #include <iostream> |
| |
| void drawPoint() |
| { |
| |
| |
| glClearColor (0.0, 0.0, 0.0, 0.0); |
| |
| glClear(GL_COLOR_BUFFER_BIT); |
| |
| glPointSize(2.0f); |
| |
| glBegin(GL_POINTS); |
| |
| glColor3f(1.0, 0.0, 0.0); |
| |
| glVertex2f(0.0f,0.0f); |
| glVertex2f(0.5f,0.8f); |
| |
| glEnd(); |
| } |
| void drawLint() |
| { |
| |
| glClearColor (0.0, 0.0, 0.0, 0.0); |
| |
| glClear (GL_COLOR_BUFFER_BIT); |
| |
| glLineWidth(2); |
| glBegin(GL_LINES); |
| glColor3f(1.0,0.0,0.0); |
| |
| glVertex2f(-1.0,1.0); |
| glVertex2f(0.0,-0.5); |
| glEnd(); |
| } |
| |
| void drawTriangle() |
| { |
| glClearColor (0.0, 0.0, 0.0, 0.0); |
| glClear (GL_COLOR_BUFFER_BIT); |
| glBegin(GL_TRIANGLES); |
| |
| glColor3f(1.0, 0.0, 0.0); |
| glVertex3f(0.0, 1.0, 0.0); |
| |
| glColor3f(0.0, 1.0, 0.0); |
| glVertex3f(-1.0, -1.0, 0.0); |
| |
| glColor3f(0.0, 0.0, 1.0); |
| glVertex3f(1.0, -1.0, 0.0); |
| glEnd(); |
| } |
| int main(void) |
| { |
| GLFWwindow* window; |
| |
| |
| if (!glfwInit()) |
| return -1; |
| |
| |
| |
| window = glfwCreateWindow(480, 320, "Hello World", NULL, NULL); |
| if (!window) |
| { |
| |
| glfwTerminate(); |
| return -1; |
| } |
| |
| |
| |
| glfwMakeContextCurrent(window); |
| |
| |
| |
| while (!glfwWindowShouldClose(window)) |
| { |
| |
| |
| |
| |
| drawTriangle(); |
| |
| |
| glfwSwapBuffers(window); |
| |
| |
| |
| glfwPollEvents(); |
| } |
| |
| |
| glfwTerminate(); |
| return 0; |
| } |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探