当前位置: 首页 > news >正文

着色器的认识

知识了解:

着色器:

        顶点着色器: 用来描述顶点的特性,如位置、颜色等,其中,顶点:是指二维或三维空间中的一个点比如交点或者端点。

        片元着色器:用来进行逐片元处理操作,比如光照、颜色叠加等,其中,片元:可以理解为像素,逐片元处理就是逐个对像素进行处理。

初始化着色器:

        initShaders (gl, vshader, fshader):在WebGL系统内部建立和初始化着色器。

                gl:指定渲染上下文

                vshader:指定顶点着色器程序代码(字符串)

                fshader:指定片元着色器程序代码(字符串)

html页面和JavaScript脚本:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>测试</title><script src="./lib/webgl-utils.js"></script><script src="./lib/webgl-debug.js"></script><script src="./lib/cuon-utils.js"></script><script src="./js/helloPoint.js"></script>
</head><body onload="main()"><canvas id="canvas" width="400" height="400"></canvas>
</body></html>

// helloPoint.js
// 6-13行是是顶点着色器程序(GLS ES语言):作为字符串被存储在变量vshader_source中。其中顶点着色器程序本身从main()开始运行,和c语言程序一样。
// (逐点操作)顶点着色器: 用来描述顶点的特性,如位置、颜色等
// 顶点:是指二维或三维空间中的一个点比如交点或者端点
/*** GLSE中的数据类型* @type float:表示浮点数* @type vec4:表示由四个浮点数组成的矢量。矢量可译为向量,是既有大小又有方向的量* 齐次坐标使用如下的符号描述:(x,y,z,w)。齐次坐标(x,y,z,w)等价于三维坐标(x/w,y/w,z/w)。所以如果齐次坐标的第4个分量是1,你就可以将它当做三维坐标来使用。w的值必须是大于等于0的。如果w趋近于0,那么它所表示的点将趋近无穷远,所以在齐次坐标系中可以有无穷的概念。齐次坐标的存在,使得用矩阵乘法来描述顶点变换成为可能,三维图形系统在计算过程中,通常使用齐次坐标来表示顶点的三维坐标。* @type vec3:表示由三个浮点数组成的矢量* 注意,如果向某类型的变量赋一个不同类型的值,就会出错。*/
var vshader_source = `
void main(){// 设置点的位置,必需赋值,否则无法正常工作gl_Position = vec4(0.0,0.0,0.0,1.0);// 设置点的大小尺寸,这个是可选的,默认是1.0gl_PointSize = 10.0;
}
`
// 17-22行是是片元着色器程序(GLS ES语言):作为字符串被存储在变量fshader_source中
// (逐片元操作)片元着色器:用来进行逐片元处理操作,比如光照、颜色叠加等
// 片元:可以理解为像素,逐片元处理就是逐个对像素进行处理
var fshader_source = `
void main(){//设置点颜色gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}
`
//以上着色器:以JavaScript字符串形式编写的着色器语言程序
// 以下是主程序(JavaScript语言)
function main () {// 获取canvas元素var canvas = document.getElementById('canvas')// 获取webGl绘图上下文var gl = getWebGLContext(canvas)if (!gl) {console.log('获取webGl绘图上下文失败')return}// 初始化着色器/*** initShaders (gl, vshader, fshader)* 在WebGL系统内部建立和初始化着色器。* 参数*  @param gl:指定渲染上下文*  @param vshader:指定顶点着色器程序代码(字符串)*  @param fshader:指定片元着色器程序代码(字符串)* 返回值* @return true:初始化着色器成功* @return false:初始化着色器失败*/// 可以简单理解gl_Position和gl_PointSize两个全局变量从顶点着色器传递到片元着色器if (!initShaders(gl, vshader_source, fshader_source)) {console.log('初始化着色器失败')return}// 设置<canvas>背景色gl.clearColor(0.0, 0.0, 0.0, 1.0)// 清空<canvas>gl.clear(gl.COLOR_BUFFER_BIT)// 绘制一个点// gl.drawArrays (mode, first, count)/*** gl.drawArrays (mode, first, count)* 执行顶点着色器,按照mode参数指定的方式绘制图形。* 参数* mode 指定绘制的方式,可接收以下常量符号:gl.POINTS,  gl.LINES, gl.LINE STRIP, gl.LINE LOOP, gl.TRIANGLES, gl.TRIANGLE STRIP, gl.TRIANGLE FAN * first 指定从哪个顶点开始绘制(整型数)* count 指定绘制需要用到多少个顶点(整型数)* 返回值 无 * 错误 * INVALID ENUM 传入的mode参数不是前述参数之一* INVALID VALUE  参数first或count是负数*/gl.drawArrays(gl.POINTS, 0, 1)
}

效果:

相关文章:

着色器的认识

知识了解&#xff1a; 着色器&#xff1a; 顶点着色器: 用来描述顶点的特性,如位置、颜色等&#xff0c;其中&#xff0c;顶点&#xff1a;是指二维或三维空间中的一个点比如交点或者端点。 片元着色器&#xff1a;用来进行逐片元处理操作&#xff0c;比如光照、颜色叠加等&…...

科技的成就(六十四)

591、《传奇》开始公开测试 "2001 年 9 月&#xff0c;《传奇》开始公开测试。《传奇》&#xff08;全称《热血传奇》&#xff09;是由韩国 WeMade 娱乐开发制作的大型多人在线角色扮演游戏&#xff0c;由 Delphi 编写。盛大网络于2001 年获得该游戏在中国的代理权。《传奇…...

银行信贷风控专题:Python、R 语言机器学习数据挖掘应用实例合集:xgboost、决策树、随机森林、贝叶斯等...

全文链接&#xff1a;https://tecdat.cn/?p38026 分析师&#xff1a;Fanghui Shao 在当今金融领域&#xff0c;风险管控至关重要。无论是汽车贷款违约预测、银行挖掘潜在贷款客户&#xff0c;还是信贷风控模型的构建&#xff0c;以及基于决策树的银行信贷风险预警&#xff0c;…...

〈壮志凌云:独行侠〉中的超高音速战机

电影《壮志凌云&#xff1a;独行侠》中使用的黑星&#xff08;Darkstar&#xff09;高超音速概念战机模型&#xff0c;虽然看起来像是科幻电影里的产物&#xff0c;但这架飞机实际上是由洛克希德马丁公司的臭鼬工厂&#xff08;Skunk Works&#xff09;设计&#xff0c;这是一家…...

k8s集群 ceph rbd 存储动态扩容

k8s 集群 rbd 扩容有两种方法&#xff0c;如下所示 通过StorageClass自动扩容 # kubectl get sc csi-rbd-sc -oyaml|grep allowVolumeExpansion allowVolumeExpansion: true如果搜索有如上字段&#xff0c;说明是可以自动扩容的&#xff0c;修改对应要扩容的 PVC容量&#xf…...

C语言笔记(指针题目)例题+图解

本文分为两部分 &#xff0c;第一部分为数组、字符串、字符指针在sizeof和strlen中的辨析&#xff0c;第二部分是一些笔试题目。若有错误&#xff0c;请批评指正。 目录 1.第一部分 1.1.数组名的使用 1.1.1一维整型数组在sizeof中的使用 1.1.2一维字符数组在sizeof中的使用…...

从零开始的 vue项目部署到服务器详细步骤(vue项目build打包+nginx部署+配置ssl证书)

从零开始的 vue项目部署到服务器详细步骤&#xff08;vue项目build打包nginx部署配置ssl证书&#xff09; 文章目录 从零开始的 vue项目部署到服务器详细步骤&#xff08;vue项目build打包nginx部署配置ssl证书&#xff09;一、前言二、vue项目部署前配置1、vite.config.js 增加…...

[OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来

前言 又到了一年一度大家最爱的探会文章&#xff0c;非常荣幸收到OceanBase官方的邀请参加2024 OceanBase 年度发布会&#xff0c;作为一个经常参加线下探会的博主&#xff0c;每一次体验都有所不同&#xff0c;每一次新技术的突破都让人感到无比兴奋。同时&#xff0c;作为数…...

项目:抽奖系统

文章目录 1. 项目&#xff1a;抽奖系统 1. 项目&#xff1a;抽奖系统 from faker import Fakerfk Faker(localezh_CN)name_list [] for i in range(100):name_list.append(fk.name()) print(name_list)import randomclass MyFrame(wx.Frame):def __init__(self):wx.Frame.__…...

synchronized进阶原理

synchronized进阶原理 1.轻量级锁 轻量级锁的使用场景:如果一个对象虽然有多个线程访问,但多线程访问的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化(如果出现竞争,操作系统会将轻量级锁升级为重量级锁)。轻量级锁对使用者是透明的(由操作系统控制),即语法仍是s…...

C++,STL 052(24.10.29)

内容 1.对map容器的大小进行操作。 2.map容器的交换操作。 运行代码 #include <iostream> #include <map>using namespace std;void printMap(map<int, int> &m) {for (map<int, int>::iterator it m.begin(); it ! m.end(); it){cout <<…...

git下载和配置

git是什么&#xff1f; Git是一种分布式版本控制系统&#xff0c;用于跟踪文件的变化&#xff0c;尤其是源代码。它允许多个开发者在同一项目上进行协作&#xff0c;同时保持代码的历史记录。Git的主要特点包括&#xff1a; 分布式&#xff1a;每个开发者都有项目的完整副本&a…...

Linux基础—基础命令及相关知识5(ubuntu网络配置)

网络的配置方法 centos网络配置 centos的网卡位置 /etc/sysconfig/network-scripts/ifcfg-ens33(centos网卡文件) bootproto表示获得IP地址的方式是静态的还是动态 onboot表示启动系统时是否激活该网络接口 设置IP地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;dns…...

使用 firewall-cmd 管理 Linux 防火墙

firewalld-cmd命令翻译<一> Linux 系统中&#xff0c;firewalld 是一个流行的动态防火墙管理工具&#xff0c; firewall-cmd 是它的命令行接口。通过 firewall-cmd&#xff0c;可以轻松地管理防火墙规则、配置区域&#xff08;zones&#xff09;、处理端口等。 这篇文章…...

鸿蒙OS试题

哪些是持续部署最佳实践? A. 灰度发布:先在小部分用户或区域进行部署&#xff0c;观察没问题后再全面推广 B.手工部署:持续部署可以采用手工部署的方式发布软件: 1、有一份非常详尽的文档&#xff0c;该文档描述了执行步骤及每个步骤中易出错的地方; 2、以手工测试来确认该…...

Flutter InkWell组件去掉灰色遮罩

当InkerWell组件内部获取到焦点时&#xff0c;会展示一层灰色遮罩 将focusColor属性设置为透明即可 Flutter InkWell焦点效果源码分析 问题描述 当 InkWell 组件获得焦点时&#xff0c;会显示一层灰色遮罩效果。需要找出这个效果是由哪些组件控制的&#xff0c;以及具体的…...

Android——metaData

获取元数据信息的步骤&#xff1a; 调用 getPackageManager 方法获得当前应用的包管理器调用包管理器的 getActivityInfo 方法获得当前活动的信息对象活动信息对象的 metaData 是 Bundle 包裹类型&#xff0c;调用包裹对象的 getString 即可获得指定名称的参数值 配置 metaDa…...

SLAM|1. 相机投影及相机畸变

一个能思考的人&#xff0c;才真是一个力量无边的人。——巴尔扎克 本章主要内容&#xff1a; 1.针孔相机模型 2.相机成像的几个坐标系图像 3.畸变及相机标定 本节主要介绍在照相机拍摄过程中&#xff0c;现实物体如何跟照片上的像素关联起来&#xff0c;具体涉及相机成像的物…...

nginx配置及虚拟主机

nginx配置及虚拟主机 一、http协议介绍1、网站类型2、涉及的软件3、http协议介绍 二、nginx安装、启动1、nginx介绍2、nginx安装3、nginx启动管理 三、nginx配置文件1、配置文件语法结构2、全局配置3、事件驱动模型的配置4、http的配置 四、虚拟主机配置1、类型2、基于名称的虚…...

ElasticSearch - Bucket Script 使用指南

文章目录 官方文档Bucket Script 官文1. 什么是 ElasticSearch 中的 Bucket Script&#xff1f;2. 适用场景3. Bucket Script 的基本结构4. 关键参数详解5. 示例官方示例&#xff1a;计算每月 T 恤销售额占总销售额的比率百分比示例计算&#xff1a;点击率 (CTR) 6. 注意事项与…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

Unity-ECS详解

今天我们来了解Unity最先进的技术——ECS架构&#xff08;EntityComponentSystem&#xff09;。 Unity官方下有源码&#xff0c;我们下载源码后来学习。 ECS 与OOP&#xff08;Object-Oriented Programming&#xff09;对应&#xff0c;ECS是一种完全不同的编程范式与数据架构…...

Redis专题-实战篇一-基于Session和Redis实现登录业务

GitHub项目地址&#xff1a;https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码&#xff1a;e34399f 基于Redis实现登录业务提交版本码&#xff1a;60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…...