国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

跟隨chatgpt學(xué)習(xí)如何使用GLSL進(jìn)行簡單的圖形渲染

這篇具有很好參考價值的文章主要介紹了跟隨chatgpt學(xué)習(xí)如何使用GLSL進(jìn)行簡單的圖形渲染。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1. 準(zhǔn)備一個HTML文件:創(chuàng)建一個新的HTML文件,將 HTML 文件命名為 `index.html`,并添加一個用于顯示圖形的<canvas>元素。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Simple WebGL Rendering</title>
    <style>
        body { margin: 0; }
        canvas { width: 100%; height: 100%; }
    </style>
</head>
<body>
    <canvas id="canvas"></canvas>
    <script src="script.js"></script>
</body>
</html>

2. 創(chuàng)建JavaScript文件:創(chuàng)建一個名為`script.js`的 JavaScript 文件來處理圖形的渲染邏輯。

// 獲取canvas元素
const canvas = document.getElementById("canvas");

// 創(chuàng)建WebGL上下文
const gl = canvas.getContext("webgl");

// 定義頂點(diǎn)著色器代碼
const vertexShaderSource = `
    attribute vec2 position;
    
    void main() {
        gl_Position = vec4(position, 0.0, 1.0);
    }
`;

// 創(chuàng)建頂點(diǎn)著色器
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSource);
gl.compileShader(vertexShader);

// 檢查頂點(diǎn)著色器是否編譯成功
if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
    console.error("Vertex shader compilation error:", gl.getShaderInfoLog(vertexShader));
}

// 定義片段著色器代碼
const fragmentShaderSource = `
    precision mediump float;
    
    void main() {
        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
    }
`;

// 創(chuàng)建片段著色器
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSource);
gl.compileShader(fragmentShader);

// 檢查片段著色器是否編譯成功
if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
    console.error("Fragment shader compilation error:", gl.getShaderInfoLog(fragmentShader));
}

// 創(chuàng)建著色器程序
const shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, vertexShader);
gl.attachShader(shaderProgram, fragmentShader);
gl.linkProgram(shaderProgram);

// 使用著色器程序
gl.useProgram(shaderProgram);

// 渲染圖形
const vertices = [-0.5, -0.5,
    0.5, -0.5,
    0.0, 0.5
];

const vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

const positionAttributeLocation = gl.getAttribLocation(shaderProgram, "position");
gl.enableVertexAttribArray(positionAttributeLocation);
gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);

gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, 3);

運(yùn)行成功頁面

跟隨chatgpt學(xué)習(xí)如何使用GLSL進(jìn)行簡單的圖形渲染,學(xué)習(xí),圖形渲染

一個簡單的glsl小實(shí)驗(yàn)成功了,不過我想要這個三角形動起來。

修改后的script代碼如下

// 獲取畫布元素和 WebGL 上下文
var canvas = document.getElementById("canvas");
var gl = canvas.getContext("webgl");

// 頂點(diǎn)著色器代碼
const vertexShaderSource = `
    attribute vec2 a_position;
    uniform vec2 u_translation;

    void main() {
        gl_Position = vec4(a_position + u_translation, 0, 1);
    }
`;

// 片段著色器代碼
const fragmentShaderSource = `
    precision mediump float;

    void main() {
        gl_FragColor = vec4(1, 0, 0, 1);
    }
`;

// 創(chuàng)建著色器程序
var program = createProgram(gl, vertexShaderSource, fragmentShaderSource);

// 獲取頂點(diǎn)位置 attribute 的位置
var positionAttributeLocation = gl.getAttribLocation(program, "a_position");

// 創(chuàng)建并綁定頂點(diǎn)緩沖區(qū)
var positionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);

// 定義一個簡單的三角形頂點(diǎn)位置數(shù)組
var positions = [
    0, 0,
    -0.5, -0.5,
    0.5, -0.5
];

gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);

// 設(shè)置頂點(diǎn)屬性指針
gl.enableVertexAttribArray(positionAttributeLocation);
gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);

// 清空畫布
gl.clearColor(0, 0, 0, 1);

// 設(shè)置著色器程序
gl.useProgram(program);

// 獲取著色器程序中 uniform 變量的位置
var translationUniformLocation = gl.getUniformLocation(program, "u_translation");

// 更新平移向量
function updateTranslation() {
    var time = new Date().getTime() * 0.001; // 獲取時間并轉(zhuǎn)換為秒
    var translation = [
        Math.sin(time), // x 軸上的移動,使用正弦函數(shù)模擬
        Math.cos(time)  // y 軸上的移動,使用余弦函數(shù)模擬
    ];
    gl.uniform2fv(translationUniformLocation, translation);
}

// 動畫循環(huán)
function animate() {
    // 清空畫布
    gl.clear(gl.COLOR_BUFFER_BIT);

    // 繪制三角形
    gl.drawArrays(gl.TRIANGLES, 0, 3);

    // 更新平移向量
    updateTranslation();

    // 請求下一次動畫循環(huán)
    requestAnimationFrame(animate);
}

// 開始動畫循環(huán)
animate();

// 創(chuàng)建著色器程序的函數(shù)
function createProgram(gl, vertexShaderSource, fragmentShaderSource) {
    // 創(chuàng)建頂點(diǎn)著色器和片段著色器
    var vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexShaderSource);
    var fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);

    // 創(chuàng)建著色器程序
    var program = gl.createProgram();

    // 附加著色器到著色器程序
    gl.attachShader(program, vertexShader);
    gl.attachShader(program, fragmentShader);

    // 鏈接著色器程序
    gl.linkProgram(program);

    // 檢查鏈接狀態(tài)
    var success = gl.getProgramParameter(program, gl.LINK_STATUS);
    if (success) {
        return program;
    }

    // 鏈接錯誤,打印錯誤信息
    console.log(gl.getProgramInfoLog(program));
    gl.deleteProgram(program);
}

// 創(chuàng)建著色器的函數(shù)
function createShader(gl, type, source) {
    // 創(chuàng)建著色器
    var shader = gl.createShader(type);

    // 附加著色器源代碼到著色器
    gl.shaderSource(shader, source);

    // 編譯著色器
    gl.compileShader(shader);

    // 檢查編譯狀態(tài)
    var success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
    if (success) {
        return shader;
    }

    // 編譯錯誤,打印錯誤信息
    console.log(gl.getShaderInfoLog(shader));
    gl.deleteShader(shader);
}

運(yùn)行成功截圖

跟隨chatgpt學(xué)習(xí)如何使用GLSL進(jìn)行簡單的圖形渲染,學(xué)習(xí),圖形渲染

跟隨chatgpt學(xué)習(xí)如何使用GLSL進(jìn)行簡單的圖形渲染,學(xué)習(xí),圖形渲染

他現(xiàn)在就是一個游來游去的紅色三角形了。太神奇了!~文章來源地址http://www.zghlxwxcb.cn/news/detail-802027.html

到了這里,關(guān)于跟隨chatgpt學(xué)習(xí)如何使用GLSL進(jìn)行簡單的圖形渲染的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何使用chatGPT進(jìn)行論文潤色(中英文均可)

    如何使用chatGPT進(jìn)行論文潤色(中英文均可)

    ChatGPT本質(zhì)是一個基于GPT3.5,應(yīng)用在對話場景的超大語言模型,在各種數(shù)據(jù)集上經(jīng)過訓(xùn)練而來的,很好的掌握了語言的“本質(zhì)”特征,自然可以進(jìn)行語言相關(guān)的工作,論文潤色只是小事情。 其實(shí)很簡單,只需要按照下面的模板就可以潤色啦: 模板:潤色下面的一段話:“(你

    2024年02月11日
    瀏覽(21)
  • 如何簡單的使用文心一言(高級版)(中國版ChatGPT)

    如何簡單的使用文心一言(高級版)(中國版ChatGPT)

    基于百度文心一言語言大模型的智能文本對話AI機(jī)器人API,支持聊天對話、行業(yè)咨詢、語言學(xué)習(xí)、代碼編寫等功能. 重要提示:建議使用https協(xié)議,當(dāng)https協(xié)議無法使用時再嘗試使用http協(xié)議 請求方式: POST 序號 參數(shù) 是否必須 說明 1 ques 是 你的問題 2 appKey 是 唯一驗(yàn)證AppKey, 可前往官

    2024年01月19日
    瀏覽(20)
  • C# GUI編程入門指南:學(xué)習(xí)如何使用C#創(chuàng)建圖形用戶界面

    C# GUI編程入門指南:學(xué)習(xí)如何使用C#創(chuàng)建圖形用戶界面 在本文中,我們將介紹如何使用C#編寫GUI程序。GUI(Graphical User Interface)是一種以圖形方式呈現(xiàn)信息和操作功能的界面,它使得用戶與計算機(jī)更加直觀和友好。C#是一種強(qiáng)大的編程語言,它提供了豐富的庫和工具來幫助我們

    2024年01月21日
    瀏覽(35)
  • 如何使用 ChatGPT/open ai 接口 進(jìn)行圖片生成(繪畫、圖片創(chuàng)作)

    如何使用 ChatGPT/open ai 接口 進(jìn)行圖片生成(繪畫、圖片創(chuàng)作)

    最近gpt大火,它除了聊天,其實(shí)還具備了繪畫功能,很多人不知道怎么用,下面文章介紹下。 在下面的案例中,輸入“請幫我畫一只可愛的動物”,返回的圖片如下: 1、科學(xué) shang wang 2、已經(jīng)注冊了GPT賬號,并且能夠正常使用。(這方面網(wǎng)上教程很多,這里就不重復(fù)了) 3、

    2024年02月11日
    瀏覽(16)
  • 【花雕學(xué)AI】如何避免ChatGPT封號,安全穩(wěn)定地使用ChatGPT的技巧和簡單過渡辦法

    【花雕學(xué)AI】如何避免ChatGPT封號,安全穩(wěn)定地使用ChatGPT的技巧和簡單過渡辦法

    37款傳感器與執(zhí)行器的提法,在網(wǎng)絡(luò)上廣泛流傳,其實(shí)Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實(shí)踐出真知(一定要動手做)的理念,以學(xué)習(xí)和交流為目的,這里準(zhǔn)備逐一動手嘗試系列實(shí)驗(yàn),不管成功(程序走通)

    2024年02月03日
    瀏覽(36)
  • chatgpt賦能python:使用Python來進(jìn)行搶購,如何輕松秒殺商品

    在現(xiàn)代社會,大量的人們使用電商平臺來完成他們的購物需求。然而,在瘋狂的購物節(jié)日時,例如\\\"雙11\\\",商品往往會被搶購一空。為此,許多人希望能夠使用自動化腳本,在秒級別內(nèi)完成商品的購買,以避免人工購物時的搶購高峰。 Python是一種優(yōu)秀的編程語言,因?yàn)樗梢?/p>

    2024年02月07日
    瀏覽(24)
  • Linux Docker圖形化工具Portainer如何進(jìn)行遠(yuǎn)程訪問

    Linux Docker圖形化工具Portainer如何進(jìn)行遠(yuǎn)程訪問

    Portainer 是一個輕量級的容器管理工具,可以通過 Web 界面對 Docker 容器進(jìn)行管理和監(jiān)控。它提供了可視化的界面,使得用戶可以更加方便地管理 Docker 容器、鏡像、網(wǎng)絡(luò)和數(shù)據(jù)卷等資源。下面介紹如何將本地Portainer 管理界面結(jié)合cpolar內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程任意瀏覽器訪問! 遠(yuǎn)程

    2024年02月08日
    瀏覽(28)
  • Linux Docker圖形化工具Portainer如何進(jìn)行遠(yuǎn)程訪問?

    Linux Docker圖形化工具Portainer如何進(jìn)行遠(yuǎn)程訪問?

    Portainer 是一個輕量級的容器管理工具,可以通過 Web 界面對 Docker 容器進(jìn)行管理和監(jiān)控。它提供了可視化的界面,使得用戶可以更加方便地管理 Docker 容器、鏡像、網(wǎng)絡(luò)和數(shù)據(jù)卷等資源。下面介紹如何將本地Portainer 管理界面結(jié)合cpolar內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程任意瀏覽器訪問! 遠(yuǎn)程

    2024年02月05日
    瀏覽(25)
  • 如何使用Java進(jìn)行機(jī)器學(xué)習(xí)?

    在Java中進(jìn)行機(jī)器學(xué)習(xí),可以使用各種開源機(jī)器學(xué)習(xí)庫和框架來實(shí)現(xiàn)。以下是一些常用的Java機(jī)器學(xué)習(xí)庫: Weka:Weka 是一個非常流行的機(jī)器學(xué)習(xí)庫,提供了大量的算法和工具,以及用于數(shù)據(jù)預(yù)處理、特征選擇和可視化的功能。 Deeplearning4j:Deeplearning4j 是一個用于深度學(xué)習(xí)的開源

    2024年02月10日
    瀏覽(27)
  • 【CHATGPT-3.5】如何使用ChatGPT的同時并學(xué)習(xí)記憶

    ChatGPT: ChatGPT可以為您提供答案和建議,但是它并不是一個完全替代您自己的大腦和記憶的工具。因此,以下是一些方法可以幫助您同時使用ChatGPT并進(jìn)行學(xué)習(xí)和記憶: 將ChatGPT作為學(xué)習(xí)的一個補(bǔ)充:ChatGPT可以為您提供信息和建議,但是請記住它只是一個工具,不能完全替代您

    2023年04月22日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包