画一个三角形

不用Shader头文件的版本

#include <iostream>
#define GLEW_STATIC
#include <GL/glew.h>
#include<GLFW/glfw3.h>
const GLint WIDTH = 800, HEIGHT = 600;//新建一个窗口,窗口的宽800, 高600//顶点着色器,一定有输出,是顶点的坐标信息
//顶点按逆时针顺序来画
const GLchar* vertexShaderSource = "#version 330 core\n"//版本
"layout(location = 0) in vec3 position;\n"  //着色器的位置参数信息。position变量名;vec3(三维向量)类型,向量的每个分量都是浮点型;in表示这个变量要从外界输入。location=0表示进1个参数;location=1表示进两个参数。
"void main()\n"
"{\n"
"gl_Position = vec4(position.x, position.y, position.z, 1.0f);\n"  //gl_Position预保留的变量,包含顶点信息,不需要定义;齐次坐标器(增加一维,达到矩阵移动目的)
"}";//边缘着色器
const GLchar* fragmentShaderSource = "#version 330 core\n"
"out vec4 color;\n"//四个参数
"void main()\n"
"{\n"
"color = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"  //用 = 进行赋值
"}";int main()
{glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Learn OpenGL xxxxxxx", nullptr, nullptr);int screenWidth, screenHeight;glfwGetFramebufferSize(window, &screenWidth, &screenHeight);if (window == nullptr) {std::cout << "Failed to create GLFW window" <<std::endl;glfwTerminate();return  -1;}glfwMakeContextCurrent(window);glewExperimental = GL_TRUE;if (glewInit() != GLEW_OK) {std::cout << "Failed to initialize GLEW" <<std::endl;glfwTerminate();return -1;}// import and compile the shaderGLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);glCompileShader(vertexShader);GLint success;GLchar infoLog[512];glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);if (!success) {glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n"<< infoLog << std::endl;}GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);glCompileShader(fragmentShader);glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);if (!success) {glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n"<< infoLog << std::endl;}//creat the program and link the programGLuint shaderProgram = glCreateProgram();glAttachShader(shaderProgram, vertexShader);glAttachShader(shaderProgram, fragmentShader);glLinkProgram(shaderProgram);glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);if (!success) {glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);std::cout << "ERROR::SHADER::PROGRAM::LINK_FAILED\n"<< infoLog << std::endl;}glDeleteShader(vertexShader);glDeleteShader(fragmentShader);//TriangleGLfloat vertices[] ={-0.5f,-0.5f,0.0f,0.5f,-0.5f,0.0f,0.0f,0.5f,0.0f};//VAO将数据和显存中的物理地址相对应,数据放在VBO里,VAO与VBO成对出现//一组数据有不同的解读方式,可能有多个VAO,一个VAO一定要对应一个VBOGLuint VAO, VBO;glGenVertexArrays(1, &VAO);//创建VAOglGenBuffers(1, &VBO);glBindVertexArray(VAO);//glBindBuffer(GL_ARRAY_BUFFER, VBO);//把顶点数据传输到显存的物理地址上glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);// 参数“0”对应VAO的第一行,参数“3”和“ GL_FLOAT”输入三个浮点型,“ GL_FALSE”表示不需要进行标准化//“3 * sizeof(GLfloat)”表示步长,“(GLvoid*)0”第一个起始点在哪找glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);//允许使用glEnableVertexAttribArray(0);//解绑,与绑定顺序相反glBindBuffer(GL_ARRAY_BUFFER, 0);glBindVertexArray(0);while (!glfwWindowShouldClose(window)) {glViewport(0, 0, screenWidth, screenHeight);glfwPollEvents();glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);glUseProgram(shaderProgram);glBindVertexArray(VAO);glDrawArrays(GL_TRIANGLES, 0, 3);glBindVertexArray(0);glfwSwapBuffers(window);}glDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glfwTerminate();return 0;
}

计算机图形学(二)——画一个三角形1.0相关推荐

  1. 计算机图形学二维变换知识点,计算机图形学 二维变换及二维.ppt

    计算机图形学 二维变换及二维 第三章 二维变换及二维观察 本章主要内容 3.1二维图形的基本变换 3.2窗口视图变换 3.3复合变换 3.4二维图形裁剪 3.5本章小结 3.1 二维图形的基本变换 3 ...

  2. D3D11_Chili_Tutorial(2):画一个三角形

    文章目录 11:D3D初始化篇-- COM(Component Object Model) 12:D3D架构 / 交换链 13:初始化设备 14:调试层 15:智能指针 16:画一个三角形(上集) 1 ...

  3. 【Vulkan学习记录-基础篇-1】用Vulkan画一个三角形

    好久没有更新过博客了,上半年一直忙着找实习的事情,不过现在已经入职一段时间了,也可以抽出时间来继续整理一些内容,所以最近会尽量变得勤快一点来写博客. Vulkan是新一代的图形API,具有跨平台.高性 ...

  4. css画一个三角形,梯形,平行四边形

    一 使用css简单的画一个三角形 1. 先来看看border的划分 .demo{width:100px;height:100px;border:3px red solid;} 2. 当盒子的宽度为0会 ...

  5. [html] 使用svg画一个三角形

    [html] 使用svg画一个三角形 效果 Screen Shot 2020-11-13 at 14 39 20 说明 svg 定义svg元素 viewBox 定义svg的画布大小,0 0 100 1 ...

  6. 使用CSS画一个三角形

    效果图 全部代码 <!DOCTYPE html> <html> <head><title></title><style type=&q ...

  7. [css] CSS画一个三角形,CSS绘制空心三角形

    1.不同理解的边框 <div class="border"></div> .border {width: 50px;height: 50px;border: ...

  8. 计算机图形学 顶点定义_在计算机图形学中定义一个圆

    计算机图形学 顶点定义 After studying the implementation of lines in computer graphics, we will now be dealing ...

  9. 用css画一个三角形

    用css画一个三角形 HTML: <div id="delta"></div> CSS: #delta{width: 0;height: 0;border- ...

  10. 如何用CSS画一个三角形?

    hello,大家好,最近在看前端的八股,里面有这样一道题,如何用CSS画出三角形?我想以这个题为例,仔细讲一下这个题的技巧,以及对这道题拓展一下,即如何画出圆形和椭圆形? 首先,如何用CSS画一个三角 ...

最新文章

  1. iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
  2. 【并发编程】线程等待、通知(wait/notify)
  3. 流媒体开发之开源项目live555---live555 server 编译 包括更改帧率大小
  4. .NET生成漂亮桌面背景
  5. 关于AM335X移植SDIO WIFI的简易教程(转)
  6. 后缀的形容词_玩转英语词汇-词汇策略之形容词后缀
  7. mysql检索面试题目_MySQL面试题目二十七道整理
  8. vb.net word 自定义工具栏_Word|用这20个技巧办公从此告别龟速工作
  9. git 命令总结(转)
  10. 常见设计稿字体对应字重font-weight大小
  11. 详细的vsftpd配置文件讲解
  12. aliplayer播放器使用
  13. 怎么删除服务器的ibd文件,mysql数据库ibd文件
  14. xinput1_3.dll丢失怎么修复win10_有什么好的修复方法推荐?
  15. 傅里叶变换性质和常见信号的傅里叶变换
  16. css3 缩放scale()方法
  17. elementUI table 修改表格背景色,去除单元格底部横线
  18. Vue UI组件库(Element UI库)
  19. 更新win11后vmware出错,VMware Workstation 不可恢复错误: (vcpu-0)
  20. 耗时一周整体,这4款黑科技电脑软件,功能强大到离谱

热门文章

  1. 柯特斯公式的matlab代码,牛顿-柯特斯公式C语言的实现.pdf
  2. discuz wooyun-2010-080723
  3. 什么是短信接口API
  4. HyperSnap编辑捕获图像,hypersnap截动图
  5. pandas38 df.assign添加修改列( tcy)
  6. 微信公众号模板消息 换行
  7. 圆锥曲线万能弦长公式_圆锥曲线焦点弦长公式.doc
  8. SQL Server添加字段注释表注释comments,Oracle与Sql Server添加注释语法区别
  9. java socket唯一标识符_java Socket
  10. 使用mbw测试内存带宽性能