OpenGL安装教程

OpenGL安装教程OpenGL 安装教程一 安装前准备 1 VS20172 GLFW 下载链接 建议下载 32 位 3 GLAD 下载链接点击下面的 generate 会看到一个 glad zip 直接下载即可 二 安装步骤 1 首先 VS2017 创建一个 CPP 工程 和正常创建工程一样 2 右键打开工程所在文件夹 3 将 glad 文件夹下的 include 文件夹复制到刚才打开的文件夹下 并且也将 glfw 下 include 文件夹下的 GLFW 文件夹复制到刚刚的 include 文件夹下 在刚刚打开的工程目录下新建 lib 文件夹 将 g

OpenGL安装教程

#include  
     #include"glad/glad.h"//!!!注意这里,/前面的是h文件的上级目录,可能每个人安装不同,也有不同 #include"GLFW/glfw3.h" using namespace std; 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); } } //vertex shader const GLchar* vertexShader_Code = "#version 330 core\n" "layout(location=0) in vec3 aPos;\n" "void main()\n" "{\n" "gl_Position=vec4(aPos.x,aPos.y,aPos.z,1.0);\n" "}"; const GLchar* fragmentShader_Code = "#version 330 core\n" "out vec4 FragColor;\n" "void main()\n" "{\n" "FragColor=vec4(1.0f, 0.5f, 0.2f, 1.0f);\n" "}"; int main() { 
    //三角顶点 float vertices[] = { 
    -0.5f,-0.5f,0.0f,//左下角 0.5f,-0.5f,0.0f,//右下角 0.0f, 0.5f,0.0f//顶端角 }; glfwInit();//初始化 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//配置GLFW glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//配置GLFW glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", nullptr, nullptr); glfwSetKeyCallback(window, key_callback); if (window == nullptr) { 
    cout << "Failed to create GLFW window" << endl; glfwTerminate();//terminate the glfw(end the glfw) return -1; } glfwMakeContextCurrent(window);//设置当前openGL上下 if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { 
    cout << "Failed to initialize GLAD" << endl; return -1; } //data int isSuccess; char infoLog[512]; //vertexShader data unsigned int vertexShader; vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexShader_Code, NULL); glCompileShader(vertexShader); /*编译是否通过*/ glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &isSuccess); if (!isSuccess) { 
    glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); cout << "ERROR::VertexShader::Compile_failed" << infoLog << endl; } else { 
    cout << "SUCCESS::VertexShader" << endl; } //fragmentShader Data unsigned int fragmentShader; fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentShader_Code, NULL); glCompileShader(fragmentShader); /*编译是否通过*/ glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &isSuccess); if (!isSuccess) { 
    glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); cout << "ERROR::FragmentShader::Compile_failed" << infoLog << endl; } else { 
    cout << "SUCCESS::FragmentShader" << endl; } //Shader Pragram unsigned int shaderProgram; shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glLinkProgram(shaderProgram); glGetProgramiv(shaderProgram, GL_LINK_STATUS, &isSuccess); if (!isSuccess) { 
    glGetShaderInfoLog(shaderProgram, 512, NULL, infoLog); cout << "ERROR::ShaderProgram::Link_failed" << infoLog << endl; } else { 
    cout << "SUCCESS::ShaderProgram" << endl; glUseProgram(shaderProgram); glDeleteShader(vertexShader); glDeleteShader(fragmentShader); } //vectices data unsigned int VAO; unsigned int VBO; glGenVertexArrays(1, &VAO);//获得一个顶点数组对象 glBindVertexArray(VAO); glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); while (!glfwWindowShouldClose(window)) { 
    glfwPollEvents();//检查有没有触发事件 glClearColor(0.27f, 0.27f, 0.27f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(shaderProgram); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 3); glfwSwapBuffers(window);//双缓冲(替换窗口的每一个像素值) } glfwTerminate(); return 0; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201955.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午8:13
下一篇 2026年3月20日 上午8:13


相关推荐

  • Android定时器「建议收藏」

    Android定时器「建议收藏」定时器Timertimer=newTimer();TimerTasktimerTask=newTimerTask(){@Overridepublicvoidrun(){Log.v("jiangwangli","开始运行");}…

    2022年7月25日
    10
  • 单片机交通信号灯控制系统设计_交通灯控制电路设计图

    单片机交通信号灯控制系统设计_交通灯控制电路设计图交通信号灯控制系统设计 作为一个硬件程序设计民工,最近一直在学习python,写个爬虫,排个序,再画个界面,其实还是挺好玩的。然而这不是我的主业啊!!!-_-|||下学期开学就要找工作了,明天刚好是新的一个月,还是滚回去调我的FPGA吧。今天先更新一个很小很小的例子作为开端,这是前几天xxx给我出的一道很随意的题目,主要是看面对一个项目…

    2026年3月7日
    4
  • pycharm更换源(换源)(镜像源)

    pycharm更换源(换源)(镜像源)参考文章 Pycharm 软件更换 pip 默认安装源为国内安装源

    2026年3月27日
    2
  • SpringBoot的序列化和反序列化

    SpringBoot的序列化和反序列化序列化与反序列化1、认识序列化与反序列化Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。2、为什么要实现对象的序列化和反序列化?(1)我们创建的Java对象被存储在Java堆中,当程序运行结束后,这些对象会被JVM回收。但在现实的应用中,可能会要求在程序运行结束之后还能读取这些对象,并在以后检索数据,这时就需要用到序列化。(2)当Java对象通过网络进行传输的时候。因为数据只能够以二进制的形式在网络中进行传输,因此当把对象通过网络发送

    2022年6月25日
    238
  • 有哪些免费的方法能将PDF导出成JPG图片?

    有哪些免费的方法能将PDF导出成JPG图片?根据不同的应用场合,有时需要将PDF文件导出成图片使用,有哪些能够免费将PDF转成JPG的方法呢?下面分享两种方法你一定用的上。方式一:在线转换首先打开百度或其他搜索器输入speedpdf进行搜索,然后打开这款在线转换工具,接着选择首页中的PDFtoJPG;(网页可以翻译成中文)第二步:然后根据上传文件页面的提示选择需要转换的PDF文件,可以批量选择多个文档上传;第三步:点击文档后的convert按钮即可开始转换,转换完成后点击下载即可。(下载后是一个压缩包解压即可)方式二:编辑器导出

    2022年5月15日
    40
  • webmagic ajax,webmagic 爬虫 分页

    webmagic ajax,webmagic 爬虫 分页importus codecraft webmagic Page importus codecraft webmagic Site importus codecraft webmagic Spider importus codecraft webmagic processor PageProcesso importus codecraft webmagic selector JsonP

    2025年8月15日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号