7、三角形旋转

三角形旋转

效果

旋转前

旋转后

代码

复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        var webgl;
        // 旋转前
        // let vsString = `
        // attribute vec3 a_position;
        // uniform float angle;
        // void main(){
        //     gl_Position=vec4(a_position,1.0);
        // }
        // `
        // 旋转后
        let vsString = `
        attribute vec3 a_position;
        uniform float angle;
        void main(){
            gl_Position=vec4(a_position.x*cos(angle)-a_position.y*sin(angle),a_position.x*sin(angle)+a_position.y*cos(angle),0,1.0);
        }
        `
        let fsString = `
        void main(){
            gl_FragColor=vec4(0.0,0.0,1.0,1.0);
        }
        `
        function init() {
            initWebgl();
            initShader();
            initBuffer();
            draw();
        }
        function initWebgl() {
            let webglDiv = document.getElementById("webgl_canvas");
            webgl = webglDiv.getContext("webgl");
            webgl.viewport(0, 0, webglDiv.clientWidth, webglDiv.clientHeight)
        }
        function initShader() {
            let shaderVs = webgl.createShader(webgl.VERTEX_SHADER);
            let shaderFs = webgl.createShader(webgl.FRAGMENT_SHADER);
            webgl.shaderSource(shaderVs, vsString)
            webgl.shaderSource(shaderFs, fsString)
            webgl.compileShader(shaderVs)
            webgl.compileShader(shaderFs)
            // 检查着色器编译是否成功
            if (!webgl.getShaderParameter(shaderVs, webgl.COMPILE_STATUS)) {
                console.error("Vertex shader compilation failed:", webgl.getShaderInfoLog(shaderVs));
                return;
            }
            if (!webgl.getShaderParameter(shaderFs, webgl.COMPILE_STATUS)) {
                console.error("Fragment shader compilation failed:", webgl.getShaderInfoLog(shaderFs));
                return;
            }
            let program = webgl.createProgram();
            webgl.attachShader(program, shaderVs)
            webgl.attachShader(program, shaderFs)
            webgl.linkProgram(program)
            webgl.useProgram(program)
            webgl.program = program
        }
        function initBuffer() {
            let arr = [
                0.1, 0.4, 0,
                0.1, 0.5, 0,
                0.2, 0.4, 0
            ]
            let float = new Float32Array(arr)
            let buffer = webgl.createBuffer();
            webgl.bindBuffer(webgl.ARRAY_BUFFER, buffer)
            webgl.bufferData(webgl.ARRAY_BUFFER, float, webgl.STATIC_DRAW)

            //以下为给shader赋值
            let aPosition = webgl.getAttribLocation(webgl.program, "a_position")
            webgl.vertexAttribPointer(aPosition, 3, webgl.FLOAT, false, 0, 0)
            webgl.enableVertexAttribArray(aPosition)

            let uAngle = webgl.getUniformLocation(webgl.program, "angle")
            let angle1 = 90 * Math.PI / 180;
            webgl.uniform1f(uAngle, angle1)
        }
        function draw() {
            webgl.clearColor(1.0, 0.0, 0.0, 1.0)
            webgl.clear(webgl.COLOR_BUFFER_BIT)
            webgl.drawArrays(webgl.TRIANGLES, 0, 3)
        }
    </script>
</head>

<body onload="init()">
    <canvas id="webgl_canvas" width="500" height="500"></canvas>
</body>

</html>
相关推荐
sin°θ_陈8 小时前
前馈式3D Gaussian Splatting 研究地图(路线二):几何优先的前馈式 3DGS——前馈式 3DGS 如何重新拥抱多视图几何
深度学习·3d·webgl·三维重建·空间计算·3dgs·空间智能
星河耀银海2 天前
3D效果:HTML5 WebGL结合AI实现智能3D场景渲染
前端·人工智能·深度学习·3d·html5·webgl
点量云实时渲染-小芹2 天前
Unity模型数字孪生虚拟仿真webgl推流卡实时云渲染推流
unity·webgl·数字孪生·实时云渲染·虚拟仿真·云推流
WebGISer_白茶乌龙桃3 天前
基于 Cesium 的 GLB 建筑模型分层分房间点击拾取技术实现
前端·javascript·vue.js·webgl·cesium
sin°θ_陈3 天前
前馈式3D Gaussian Splatting 研究地图(路线一):像素对齐高斯的起点——pixelSplat 与 latentSplat 在解决什么
python·深度学习·3d·aigc·webgl·3dgs·空间智能
就是个名称3 天前
Chrome使用cesium.js或者three.js报错不支持webGL
javascript·chrome·webgl
烛阴4 天前
Three.js 场景完全入门指南:让你的 3D 场景不在乱成一团
webgl·three.js
EliseL5 天前
SuperMap iClient3D for WebGL 如何实时汇报相机位置天气情况
javascript·3d·html·webgl
ct9785 天前
Cesium的时间与时钟系统
gis·webgl·cesium
Jay-r5 天前
樱花雨特效 WebGL实现 短视频同款浪漫视觉效果(附源码下载)
开发语言·javascript·ecmascript·编程·webgl·代码·樱花雨