LearnOpenGL笔记(2)三角形
这是学习LearnOpenGL CN教程的笔记,包括我遇到的问题和我的烂笔头。文章名与网站小节对应。
------------------------------------分割线--------------------------------------------------------------------------------------------
摆张重要的图先,蓝色的是可以编写着色器控制的部分。

着色器在C++字符串中的形式

"#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"
"}\n";
绘制流程
//初始化缓冲数组对象
unsigned int VAO; //顶点数组对象VAO
unsigned int VBO; //顶点缓冲对象VBO
//创建VAO
glGenVertexArrays(, &VAO);
//绑定VAO
glBindVertexArray(VAO); //创建VBO
glGenBuffers(, &VBO); //生成vbo和缓冲ID
//缓冲绑定
glBindBuffer(GL_ARRAY_BUFFER, VBO);
//将数据传输到当前绑定缓冲
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
//第四个参数:如何管理给定的数据
// GL_STATIC_DRAW :数据不会或几乎不会改变。
// GL_DYNAMIC_DRAW:数据会被改变很多。
// GL_STREAM_DRAW :数据每次绘制时都会改变。 //解析顶点数据,设置顶点属性指针
glVertexAttribPointer(, , GL_FLOAT, GL_FALSE, * sizeof(float), (void*));
glEnableVertexAttribArray();
//创建着色器程序
//顶点着色器
unsigned int vertexShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER);
//附加
glShaderSource(vertexShader, , &vertexShaderSource, NULL);
//编译
glCompileShader(vertexShader);
//检测失败
int success;
char infoLog[];
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
if (!success)
{
glGetShaderInfoLog(vertexShader, , NULL, infoLog);
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
}
//片段着色器
unsigned int fragmentShader;
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, , &fragmentShaderSource, NULL);
glCompileShader(fragmentShader); //片段着色器
unsigned int fragmentShaderY;
fragmentShaderY = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShaderY, , &fragmentShaderYellowSource, NULL);
glCompileShader(fragmentShaderY); shaderProgram = glCreateProgram();
//附加
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
//链接
glLinkProgram(shaderProgram);
shaderYellowProram = glCreateProgram();
//附加
glAttachShader(shaderYellowProram, vertexShader);
glAttachShader(shaderYellowProram, fragmentShaderY);
//链接
glLinkProgram(shaderYellowProram);
//链接成功后,释放着色器对象
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
glDeleteShader(fragmentShaderY);
//在循环渲染中绘制
//渲染循环
while (!glfwWindowShouldClose(window)) {
//渲染指令
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT); glUseProgram(shaderProgram);
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, , ); //交换颜色缓冲,绘制显示
glfwSwapBuffers(window);
}
LearnOpenGL笔记(2)三角形的更多相关文章
- LearnOpenGL 你好,三角形[转]--附源码
原地址:你好,三角形 你好,三角形 原文 Hello Triangle 作者 JoeyDeVries 翻译 Django 校对 Geequlim 译注 在学习此节之前,建议将这三个单词先记下来: 顶点 ...
- LearnOpenGL笔记(1)搭建环境
之前有写过Unity Shader,但不过是东拼西凑,对其中的原理可以说完全不清楚,现在准备好好从opengl开始,学习这基础又重要的内容. LearnOpenGL CN是一个超超超炒鸡好的openG ...
- OpenGL超级宝典笔记——画三角形(转)
http://my.oschina.net/sweetdark/blog/161002 学习了画线的知识,我们可以使用GL_LINE_LOOP来画闭合的多边形.但是使用这种方式画出来的只有线框,多边形 ...
- LearnOpenGL笔记(3)着色器
GLSL向量的一些操作 vec2 someVec; vec4 differentVec = someVec.xyxx; vec3 anotherVec = differentVec.zyw; vec4 ...
- LearnOpenGL学习笔记(一)画个三角形
开始学习OpenGL,参考的是著名的LearnOpenGL这个网站,在这里做一些总结性的记录,只是方便自己日后查找或者记录自己的一些拓展思考,关于OpenGL的具体内容请移步: https://lea ...
- OpenGL学习笔记(1) 画一个三角形
最近找实习有一丢丢蛋疼,沉迷鬼泣5,四周目通关,又不想写代码,写篇笔记复习一下,要好好学图形学啊 用OpenGL画一个三角形 项目的简介 记录一下跟着learnOpenGL学习的过程 笔记里的代码放在 ...
- OpenSceneGraph 笔记--如何导出三角形数据
OpenSceneGraph 笔记--如何导出三角形数据 转载:http://blog.csdn.net/pizi0475/article/details/5384389 在OpenSceneGrap ...
- Directx11学习笔记【十】 画一个简单的三角形
本篇笔记要实现的是在屏幕上渲染出一个三角形,重点要学习的是渲染一个几何体的流程方式. 为了渲染几何图形,需要一个顶点缓存和一个描述顶点布局的输入层,还有着色器(主要是顶点着色器和像素着色器),下面来看 ...
- LearnOpenGL学习笔记(二)纹理
开始学习OpenGL,参考的是著名的LearnOpenGL这个网站,在这里做一些总结性的记录,只是方便自己日后查找或者记录自己的一些拓展思考,关于OpenGL的具体内容请移步: https://lea ...
随机推荐
- odoo10学习笔记九:Odoo10 API
转载请转载原文地址:https://www.cnblogs.com/ygj0930/p/11189315.html 一:纪录集API model中的数据是以集合的形式使用的,因此可以使用集合运算来操作 ...
- [小程序]微信小程序登陆并获取用户信息
1.小程序js端调用框架登陆API,获取到一个临时code,拿着这个code去调用自己的服务端接口 2.在自己的服务器端,使用app_id app_secrect code可以获取到用户的openid ...
- 其他综合-Kickstart无人值守安装系统CentOS 7
Kickstart无人值守安装系统CentOS 7 1.概述 1.1 关于PXE Preboot Execution Environment 翻译过来就是预启动执行环境:简称 PXE :传统安装操作系 ...
- 使用Visual Studio学习C语言
注明:安装的是社区版,只写大部分步骤,做笔记之用.详细还需要看B站教程,https://www.bilibili.com/video/av59608520 一.安装软件 1.安装Visual Stud ...
- javascript加载XML字符串或文件
1. 加载XML文件 方法1:ajax方式.代码如下: var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObje ...
- 201871010131-张兴盼《面向对象程序设计(java)》第十五周学习总结
博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...
- 批处理简单命令 start
start 命令 调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用. 如:start calc.exe 即可打开Windows的计算器. 常用参数: MIN 开始时窗口最小化 S ...
- 洛谷1439:最长公共子序列(nlogn做法)
洛谷1439:最长公共子序列(nlogn做法) 题目描述: 给定两个序列求最长公共子序列. 这两个序列一定是\(1\)~\(n\)的全排列. 数据范围: \(1\leq n\leq 10^5\) 思路 ...
- [HNOI2012]集合选数(构造,状态压缩,DP)
神仙题. 莫名其妙的就试一试把所有数放进一个类似矩阵的东西里面. 首先把 \(1\) 放到左上角,然后在每个数的右边放它的 \(3\) 倍(大于 \(n\) 就不用放了),下面放它的 \(2\) 倍( ...
- css设置不可复制
-moz-user-select:none; /* Firefox私有属性 */ -webkit-user-select:none; /* WebKit内核私有属性 */ -ms-user-selec ...