WEBGL(2):绘制单个点

news2024/9/25 11:21:49

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/glMatrix-0.9.6.min.js"></script>
    <script>
    	//顶点着色器
        let vertexstring = `
        attribute vec4 a_position;
        uniform     mat4    proj;
        void main(void){
            gl_Position =proj *  a_position;
            gl_PointSize=60.0;
        }
        `;
        //片元着色器
        let fragmentstring = `
        void main(void){
          gl_FragColor = vec4(0,0,1.0,1.0);
        }
        `;
        var projMat4 = mat4.create();
        var webgl;
        //
        function init() {
            initWebgl();
            initShader();
            initBuffer();
            draw();
        }
        //webgl初始化
        function initWebgl() {
            //获取webgl的容器对象
            let webglDiv = document.getElementById('myCanvas');
            //获取webGL对象
            webgl = webglDiv.getContext("webgl");
            //webGL视觉区域
            webgl.viewport(0, 0, webglDiv.clientWidth, webglDiv.clientHeight);
            //设置webgl投影坐标系
            mat4.ortho(0, webglDiv.clientWidth, webglDiv.clientHeight, 0, -1.0, 1.0, projMat4)
        }
        //Shader初始化
        function initShader() {
			//定义Shader
			//顶点shader
            let vsshader = webgl.createShader(webgl.VERTEX_SHADER);
            //片元shader
            let fsshader = webgl.createShader(webgl.FRAGMENT_SHADER);

			//	绑定shader
            webgl.shaderSource(vsshader, vertexstring);
            webgl.shaderSource(fsshader, fragmentstring);
			
			//	编译shader
            webgl.compileShader(vsshader);
            webgl.compileShader(fsshader);
            if (!webgl.getShaderParameter(vsshader, webgl.COMPILE_STATUS)) {
                var err = webgl.getShaderInfoLog(vsshader);
                alert(err);
                return;
            }
            if (!webgl.getShaderParameter(fsshader, webgl.COMPILE_STATUS)) {
                var err = webgl.getShaderInfoLog(fsshader);
                alert(err);
                return;
            }
            //创建shader
            let program = webgl.createProgram();
            //着色器绑定shader
            webgl.attachShader(program, vsshader);
            webgl.attachShader(program, fsshader)

            webgl.linkProgram(program);
            webgl.useProgram(program);

            webgl.program = program
        }
        //Buffer初始化 将数据绑定到shader
        function initBuffer() {
            let pointPosition = new Float32Array([100.0, 100.0, 0.0, 1.0]);
            let aPsotion = webgl.getAttribLocation(webgl.program, "a_position");
            webgl.vertexAttrib4fv(aPsotion, pointPosition);
            let uniformProj = webgl.getUniformLocation(webgl.program, "proj");
            webgl.uniformMatrix4fv(uniformProj, false, projMat4);
        }
        //webgl绘制
        function draw() {
            webgl.clearColor(0.0, 0.0, 0.0, 1.0);
            webgl.clear(webgl.COLOR_BUFFER_BIT | webgl.DEPTH_BUFFER_BIT);
            webgl.drawArrays(webgl.POINTS, 0, 1);
        }
    </script>
</head>

<body onload="init()">
    <canvas id='myCanvas' width="1024" height='768'></canvas>
</body>

</html>

效果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于微信小程序的社交用户交流系统

本文从管理员、用户的功能要求出发&#xff0c;微信小程序的社交系统中的功能模块主要是实现首页、个人中心、用户管理、用户技能管理、技能分类管理、交流论坛、系统管理。经过认真细致的研究&#xff0c;精心准备和规划&#xff0c;最后测试成功&#xff0c;系统可以正常使用…

RFID技术:工业稳定的关键

RFID 技术在工业领域的应用让生产和运营更加稳定高效。这种无线通信技术可以通过无线电波实现信息的读取和写入&#xff0c;使得数据采集、存储和传输变得更加便捷。在工业生产中&#xff0c;RFID 的应用可以帮助企业提高生产效率、降低成本、提高产品质量&#xff0c;从而让工…

Mike11;Mike21深度技能解析

数学模型在水环境评价、防洪评价和排污口论证等领域中有重要作用&#xff0c;随着人类活动的不断增加和环境问题的日益突出&#xff0c;对水资源和水环境的保护与管理变得至关重要。为了更好地理解和应对这些挑战&#xff0c;数学模型成为一种强大的工具&#xff0c;能够提供量…

<Cadence> PCB封装制作(一) 封装组成元素介绍制作表贴焊盘

目录 01 封装的组成元素 02 焊盘Design Layers组成 03 制作表贴焊盘 获取表贴器件&#xff08;0603电阻&#xff09;的相关信息 制作表贴器件&#xff08;0603电阻&#xff09;焊盘封装 04 文章总结 大家好&#xff0c;这里是程序员杰克。一名平平无奇的嵌入式软件工程师…

【100天精通python】Day49:python web编程_web框架,Flask的使用

目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3.1 Flask框架安装 3.2 第一个Flask程序 3.3 路由 3.3.1 基本路由 3.3.2 动态路由 3.3.3 HTTP 方法 3.3.4 多个路由绑定到一个视图函数 3.3.5 访问URL 参数的路由 3.3.6 带默认值的动态路由 3.3.7 带…

Cell | 超深度宏基因组!复原消失的肠道微生物

期刊&#xff1a;Cell IF&#xff1a;64.5 (Q1) 发表时间&#xff1a;2023.6 研究背景 不同的生活方式会影响微生物组组成&#xff0c;但目前微生物组的研究严重偏向于西方工业化人群&#xff0c;其中工业化人群的特点是微生物群多样性较低。为了理解工…

Kubernetes技术--k8s核心技术 configMap

1.概述 configMap最主要的作用是存储一些不加密的数据到/etcd,让pod以变量或者数据卷(volume)挂载到容器。 应用场景:配置文件、存储信息等 2.使用 -1.创建配置文件。 这里我们需要先编写一个配置文件。使用redis,如下所示:

普洛斯常熟东南数据中心获LEED金级认证及IDCC绿色算力基础设施奖

近日&#xff0c;普洛斯常熟东南数据中心获得美国绿色建筑评估标准体系LEED v4 BDC&#xff08;建筑设计与建造&#xff09;金级认证&#xff0c;并获评IDCC2023长三角区域绿色算力基础设施奖。以可持续发展理念为核心&#xff0c;该数据中心从设计规划、开发建设&#xff0c;到…

WebGL Varing变量的作用和内插过程,及执行Varing时涉及的图形装配、光栅化、颜色插值、片元着色器执行机制等详解

目录 前言 在 WebGL 或 OpenGL 中&#xff0c;“varying” 是一种用于在顶点着色器和片元着色器之间传递数据的特殊类型的变量。它允许在顶点着色器对数据进行处理后&#xff0c;在片元着色器中使用该处理后的数据进行进一步计算。 彩色三个点 ​编辑 彩色三个点示例代码…

Ant-Design-Pro-V5: ProTable前端导出excel表格。

Prtable表格中根据搜索条件实现excel表格导出。 代码展示&#xff1a; index.jsx import React, { useRef, useState, Fragment, useEffect } from react; import { getLecturerList, lecturerExportExcel } from /services/train/personnel; import { getOrgList, getSelec…

打击儿童性虐待,遭多家机构反对,苹果宣布停止开发CSAM检测计划

据报道&#xff0c;苹果公司曾计划在其iCloud云服务中引入一项儿童性虐待资料&#xff08;CSAM&#xff09;检测计划&#xff0c;但由于反对声浪日益高涨&#xff0c;该计划最终宣布停止开发。CSAM检测计划的原本目的是为了帮助阻止儿童性虐待资料的传播&#xff0c;保护儿童的…

实例418 通过串口发送数据

实例说明 现在大多数硬件设备均采用串口技术与计算机相连&#xff0c;因此串口的应用程序开发越来越普遍。例如&#xff0c;在计算机没有安装网卡的情况下&#xff0c;将本机上的一些信息数据传输到另一台计算机上&#xff0c;那么利用串口通信就可以实现。运行本程序&#xff…

QQ聊天记录在哪个文件夹?(针对iPhone用户的详细教程)

苹果手机的QQ聊天记录一般存放在哪里&#xff1f;问了很多朋友都不知道&#xff0c;试了网上很多方法都没用&#xff0c;大家还有其他解决方法吗&#xff1f; 很多iPhone用户都不知道QQ聊天记录保存在哪个文件夹&#xff0c;这是很正常的现象。因为iPhone手机本身是不具备【文件…

Gatling 入门

1.新建一个测试接口项目 里面代码非常简单&#xff0c;就一个hi接口&#xff1a; package com.example.gatlingdemo.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;import java.ti…

北京开发APP的费用明细

开发APP项目时&#xff0c;在功能确定后需要知道有哪些可能的费用&#xff0c;安排项目预算。北京开发APP的费用明细可能会包括以下几个部分&#xff0c;每个部分都会产生一些费用。今天和大家分享APP费用明细有哪些&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&…

地理测绘基础知识(4) 照射计算

照射计算&#xff0c;是一种常用的三维几何计算。已知一个光源的光强图&#xff0c;计算光源投射到地表各处的功率密度。这种计算需求可以直观的理解为计算已知位置、指向、聚光特性的手电筒&#xff0c;计算地表某地点强度。 本文的推导涉及很多旋转&#xff0c;很容易出错和…

ElasticSearch安装为Win11服务

在windows的环境下操作是Elasticsearch,并且喜欢使用命令行 &#xff0c;启动时通过cmd直接在elasticsearch的bin目录下执行elasticsearch ,这样直接启动的话集群名称会默elasticsearch&#xff0c;节点名称会随机生成。 停止就直接在cmd界面按CtrlC 其实我们也可以将elasticse…

Ansible学习笔记14

实现多台的分离实现&#xff1a; [rootlocalhost playbook]# cat example3.yaml --- - hosts: 192.168.17.105remote_user: roottasks:- name: create test1 directoryfile: path/test1/ statedirectory- hosts: 192.168.17.106remote_user: roottasks:- name: create test2 d…

Python—匹配字段

1. 「概述」 在日常开发中&#xff0c;经常需要对数据中的某些字段进行匹配&#xff0c;但这些字段可能存在微小的差异。例如&#xff0c;同一个招聘岗位的数据中&#xff0c;省份字段可能有“广西”、“广西壮族自治区”和“广西省”等不同的写法。为了处理这些情况&#xff…

二叉树的介绍

写在前面&#xff1a; 二叉树是数据结构课程中非常重要的内容&#xff0c;我们针对二叉树的概念、性质以及类型展开详细介绍。 一、概念 二叉树&#xff08;Binary Tree&#xff09;是n&#xff08;n>0&#xff09;个结点的有限集合&#xff0c;该集合或者空集&#xff0…