OpenGL——着色器画一个点

一、 绘制

在窗口中间画一个像素点:
在这里插入图片描述

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>using namespace std;#define numVAOs 1GLuint renderingProgram;
GLuint vao[numVAOs];GLuint
createShaderProgram ()
{const char *vshaderSource = "#version 460 \n""void main(void) \n""{ gl_Position = vec4(0.0, 0.0, 0.0, 1.0); }";const char *fshaderSource = "#version 460 \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
display (GLFWwindow *window, double currTime)
{glUseProgram (renderingProgram);glDrawArrays (GL_POINTS, 0, 1);
}void
init (GLFWwindow *window)
{renderingProgram = createShaderProgram();glGenVertexArrays (numVAOs, vao);glBindVertexArray (vao[0]);
}int
main (int argc, char *argv[])
{if (!glfwInit()) {return -1;}glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 4);glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 6);GLFWwindow *window = glfwCreateWindow (600, 600, "Chapter2 - program1", nullptr, nullptr);glfwMakeContextCurrent (window);int errorCode = glewInit();if (errorCode != GLEW_OK) {cerr << "Error: " << glewGetErrorString (errorCode) << endl;return -1;}glfwSwapInterval (1);init (window);while (!glfwWindowShouldClose (window)) {display (window, glfwGetTime());glfwSwapBuffers (window);glfwPollEvents();}glfwDestroyWindow (window);glfwTerminate();return 0;
}

点太小了很难看见,可以把它调大点:

void
display(GLFWindow *window, double currTime)
{glUseProgram(renderingProgram);glPointSize(30);glDrawArrays(GL_POINTS, 0, 1);
}

现在,栅格化阶段从顶点着色器收到顶点时,会设置像素的颜色,组成一个尺寸为30像素的点。
在这里插入图片描述

二、预定义变量说明

1. gl_Position

内置变量gl_Position用来设置顶点在3D空间中的坐标位置,并将其发送到下一个管线阶段。
GLSL数据类型vec4用来存储四元组,适合用来存储坐标,四元组的前3个值分别表示x、y、z坐标,第4个值在这里设为1.0(暂时不用了解)。

本例中,顶点坐标被硬编码为原点。

2. gl_FragCord

还可以用预定义变量gl_FragCord来控制颜色,
修改着色器代码:

	fshaderSource  = R"(
#version 460
out vec4 color;
void main(void)
{if(gl_FragCoord.x < 295)color = vec4(1.0, 0.0, 0.0, 1.0);elsecolor = vec4(0.0, 0.0, 1.0, 1.0);
}
)";

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/421080.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL的增删改查CRUD练习知识点(day27)

1 学习目标 重点掌握插入单条记录的语法了解全表插入记录的语法重点掌握修改记录的语法重点掌握删除记录的语法重点掌握主键约束、外键约束了解检查约束、非空约束、唯一约束 2 数据类型 MySQL支持多种数据类型&#xff0c;大致可以分类三类&#xff1a;数值、日期和字符串。…

【Maven】Maven 下载安装教程(超详细)(day30)

1 学习目标 了解Spring了解SpringBoot重点掌握创建SpringBoot项目重点掌握聚合项目的创建了解Spring基于XML方法进行IOC和依赖注入了解Maven的概念重点掌握使用Maven构建项目重点掌握使用Maven进行依赖引入 2 Maven 2.1 概述 Maven是跨平台的项目管理工具。作为Apache组织中…

Python(一)-快速入门

第一个入门实例 print(hello python) 注释 #:单行注释""" """:多行注释 # 这是单行注释 # 输出一个喜欢读的课外书 print("我最喜欢读 追风筝的人")print("----------------------------")"""这是多…

Python爱心射线

系列目录 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…

004——双向链表和循环链表

目录 双向链表 双向链表的初始化&#xff08;与单链表类似&#xff09; 增&#xff1a; Ⅰ&#xff09;头插法 Ⅱ&#xff09;尾插法 Ⅲ&#xff09;中间插入 删 改 查 整体代码示例&#xff1a; 循环链表 循环单链表 ​编辑 循环双链表 双向链表 不同于单链表&…

2024年录屏神器大盘点,轻松捕捉屏幕精彩

现在讲解一些操作越来越便捷了&#xff0c;我 一般都是用录屏工具来边录制操作边讲解&#xff0c;这样可以更方便对方了解操作步骤。这次我就分享几款免费录屏工具一起来试试吧。 1.福晰录屏软件 链接&#xff1a;www.foxitsoftware.cn/REC/ 对于初次尝试录屏的新手来说&…

每天五分钟玩转深度学习框架PyTorch:获取神经网络模型的参数

本文重点 当我们定义好神经网络之后,这个网络是由多个网络层构成的,每层都有参数,我们如何才能获取到这些参数呢?我们将再下面介绍几个方法来获取神经网络的模型参数,此文我们是为了学习第6步(优化器)。 获取所有参数Parameters from torch import nn net=nn.Sequent…

Java | Leetcode Java题解之第397题整数替换

题目&#xff1a; 题解&#xff1a; class Solution {public int integerReplacement(int n) {int ans 0;while (n ! 1) {if (n % 2 0) {ans;n / 2;} else if (n % 4 1) {ans 2;n / 2;} else {if (n 3) {ans 2;n 1;} else {ans 2;n n / 2 1;}}}return ans;} }

UE5引擎工具链知识点

当我们提到“引擎工具链的开发”时&#xff0c;通常指的是为游戏开发或其他类型的软件开发创建一系列工具和技术栈的过程。这包括但不限于游戏引擎本身&#xff08;如Unity或Unreal Engine&#xff09;&#xff0c;以及围绕这些引擎构建的各种工具和服务&#xff0c;比如用于构…

CTFHub技能树-Git泄漏-Index

目录 一、Git索引&#xff08;Index&#xff09;的基本概念 二、解题过程 主旨&#xff1a;使用git泄漏恢复源代码 方法一&#xff1a;使用GitHack手动恢复 方法二&#xff1a;直接使用Git_Extract获取网站源代码拿去flag 当前大量开发人员使用git进行版本控制&#xff0c…

新书宣传:《量子安全:信息保护新纪元》

《量子安全&#xff1a;信息保护新纪元》 前言本书的看点本书的目录结语 前言 你好&#xff01; 这是我第一次发布类广告的博文&#xff0c;目的也很单纯&#xff0c;希望以作者的身份介绍一下自己出版的图书——《量子安全&#xff1a;信息保护新纪元》。此书于2024年7月出版…

【鸿蒙】HarmonyOS NEXT星河入门到实战1-开发环境准备

目录 一、达成目标 二、鸿蒙开发环境准备 2.1 开发者工作下载 2.2 解压安装 2.3 运行配置安装node.js和SDK 2.4 开始创建第一个项目 2.5 预览 2.5.1 预览遇到的问题&#xff08;报错&#xff09; 2.5.2 修改内容查看预览 三、备用下载地址&#xff08;如果下载是4.X版…

会声会影2024发布了没有? 会声会影2024更新哪些内容?

嘿&#xff0c;亲爱的的朋友们&#xff0c;今天我要跟大家安利一款让我彻底沉迷、不能自拔的神器 —— 会声会影2024&#xff01;如果你还在为视频编辑头疼&#xff0c;那么准备好迎接你的救星吧&#xff01; 会声会影2024是一款功能全面的视频编辑软件&#xff0c;它不仅能帮你…

基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,系统包含GUI操作界面&#xff0c;系统支持对文字,灰度图,彩色图,语音进行加解密。 2.测试软件版本以及…

人工智能在C/C++中的应用

随着技术的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们日常生活中不可或缺的一部分。从智能手机的语音助手到自动驾驶汽车&#xff0c;AI的应用无处不在。在众多编程语言中&#xff0c;C和C因其高性能和灵活性&#xff0c;成为实现复杂AI算法的理想选…

分类预测|基于雪消融优化BP神经网络的数据分类预测Matlab程序SAO-BP 多特征输入多类别输出 含基础程序

分类预测|基于雪消融优化BP神经网络的数据分类预测Matlab程序SAO-BP 多特征输入多类别输出 含基础程序 文章目录 一、基本原理二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 SAO-BP模型结合了雪消融优化算法&#xff08;SAO&#xff09;和BP神经网络。以下是详细…

Linux中使用node xxx.js启动进程后终端关闭进程会自动关闭的解决方案

原标题&#xff1a;在Linux中想要运行一个node程序&#xff0c;但随着终端关闭&#xff0c;其node进程会自动关闭的解决方案&#xff1a; 使用nohup 运行命令&#xff0c;其中的app.js是你要运行的js output.log是运行日志 nohup node app.js > output.log 2>&1 &…

一. rpc基本学习

1. 什么是rpc&#xff0c;为什么有了http还要rpc 我们常说的http&#xff0c;应该是说的http1&#xff0c;http只是应用层的一个协议 Rpc是一种调用方式&#xff0c;全称叫远程过程调用&#xff0c;对应本地调用&#xff0c;rpc是一种调用方式&#xff0c;不是一种协议 更具体…

Marin说PCB之在CST软件中如何搭建两端子电容器--02

上回书到说到李相赫同学在导入一颗新的两端子电容器物料的时候&#xff0c;发现其阻抗频率特性曲线太反常了&#xff1a; 和之前的Murata家的GRT033D70E105ME18这个物料放在一起比对一下&#xff1a; 上编文章中有一句话我不知道诸位道友们是否还有印象啊&#xff1f; Murata家…

断点回归模型

断点回归&#xff08;Regression Discontinuity Design, RDD&#xff09;是一种准实验设计方法&#xff0c;用于评估政策或其他干预措施的效果。这种方法利用了一个清晰的阈值或“断点”&#xff0c;在这个阈值上&#xff0c;处理状态&#xff08;例如是否接受某种干预&#xf…