日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

plsqlfor循环输出三角形_glium指南-03-移动我们的三角形

發(fā)布時(shí)間:2024/9/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 plsqlfor循环输出三角形_glium指南-03-移动我们的三角形 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原地址: https://github.com/glium/glium/blob/master/book/tuto-03-animated-triangle.md

移動(dòng)我們的三角形

上一節(jié)我們畫了個(gè)三角形, 這一節(jié)我們打算試著讓它動(dòng)起來. 記住OpenGL不像繪畫軟件. 如果我們想改變屏幕上顯示的內(nèi)容, 我們必須再繪制一次, 然后用新繪制的內(nèi)容替換掉已經(jīng)存在的內(nèi)容. 還好我們已經(jīng)寫好了一個(gè) loop 循環(huán), 它正不斷地在窗口中重復(fù)繪制, 因此我們所寫的代碼幾乎會(huì)立即反映到窗口上.

比較naive的方法

第一個(gè)方法是創(chuàng)建一個(gè)名為 t 的變量并用它來表示移動(dòng)中的每一步. 我們將在每次循環(huán)時(shí)更新 t 的值, 然后把它加到三角形的坐標(biāo)值上:

let mut t: f32 = -0.5; let mut closed = false; while !closed {// 更新 `t`t += 0.0002;if t > 0.5 {t = -0.5;}// 創(chuàng)建形狀然后把 `t` 加到每個(gè)頂點(diǎn)的x坐標(biāo)上let vertex1 = Vertex { position: [-0.5 + t, -0.5] };let vertex2 = Vertex { position: [ 0.0 + t, 0.5] };let vertex3 = Vertex { position: [ 0.5 + t, -0.25] };let shape = vec![vertex1, vertex2, vertex3];let vertex_buffer = glium::VertexBuffer::new(&display, &shape).unwrap();// 繪制let mut target = display.draw();target.clear_color(0.0, 0.0, 1.0, 1.0);target.draw(&vertex_buffer, &indices, &program, &glium::uniforms::EmptyUniforms,&Default::default()).unwrap();target.finish().unwrap();events_loop.poll_events(|event| {match event {glutin::Event::WindowEvent { event, .. } => match event {glutin::WindowEvent::CloseRequested => closed = true,_ => ()},_ => (),}}); }

如果你運(yùn)行這段代碼, 你就能看見我們的三角形從左邊移動(dòng)到右邊, 然后又跳回左邊.

在上個(gè)世紀(jì)90年代, 很多游戲開發(fā)者都是這樣做的. 在你的圖形比較簡(jiǎn)單時(shí)(例如一個(gè)三角形), 這個(gè)方法確實(shí)好用. 但是一旦你的圖形變得復(fù)雜, 例如某些有幾千個(gè)多邊形組成的3D模型, 這個(gè)方法的效率會(huì)變得特別低. 原因如下:

  • 每次繪制時(shí), CPU都會(huì)花大量時(shí)間來計(jì)算坐標(biāo)(每個(gè)模型的每個(gè)頂點(diǎn)都進(jìn)行一次計(jì)算的話, 每次繪制你將進(jìn)行成百上千次計(jì)算).
  • 將我們的形狀的頂點(diǎn)數(shù)據(jù)從內(nèi)存上傳到顯卡內(nèi)存也要花費(fèi)時(shí)間. GPU會(huì)等待所有數(shù)據(jù)上傳完畢再開始繪制工作, 而等待的這段時(shí)間都被浪費(fèi)掉了.

Uniform變量

還記得頂點(diǎn)著色器嗎? 頂點(diǎn)著色器輸入每個(gè)頂點(diǎn)的屬性, 輸出頂點(diǎn)在窗口中的位置. 之前, 我們?cè)诔绦蛑凶屓切雾旤c(diǎn)坐標(biāo)值增加然后將計(jì)算的結(jié)果上傳到GPU中, 現(xiàn)在我們把這件事交給GPU來做.

現(xiàn)在把程序改回上一節(jié)結(jié)束時(shí)的樣子, 不過依然保留 t :

let vertex1 = Vertex { position: [-0.5, -0.5] }; let vertex2 = Vertex { position: [ 0.0, 0.5] }; let vertex3 = Vertex { position: [ 0.5, -0.25] }; let shape = vec![vertex1, vertex2, vertex3];let vertex_buffer = glium::VertexBuffer::new(&display, &shape).unwrap();let mut t: f32 = -0.5; let mut closed = false; while !closed {// 更新 `t`t += 0.0002;if t > 0.5 {t = -0.5;}// 繪制let mut target = display.draw();target.clear_color(0.0, 0.0, 1.0, 1.0);target.draw(&vertex_buffer, &indices, &program, &glium::uniforms::EmptyUniforms,&Default::default()).unwrap();target.finish().unwrap();events_loop.poll_events(|event| {match event {glutin::Event::WindowEvent { event, .. } => match event {glutin::WindowEvent::CloseRequested => closed = true,_ => ()},_ => (),}}); }

然后, 我們稍微修改一下頂點(diǎn)著色器的代碼:

let vertex_shader_src = r#"#version 140in vec2 position;uniform float t;void main() {vec2 pos = position;pos.x += t;gl_Position = vec4(pos, 0.0, 1.0);} "#;

你也許注意到了, 這不就是我們之前在rust代碼里寫的操作嗎, 只不過這次這段代碼是在GPU上執(zhí)行的. 我們?cè)谥鞯拇a中添加了一個(gè)用 uniform 關(guān)鍵字聲明的變量. uniform變量是一個(gè)全局變量, 它的值是在繪制時(shí), 由 draw 函數(shù)傳遞給GPU. 現(xiàn)在, 我們可以用 uniform! 宏來實(shí)現(xiàn):

target.draw(&vertex_buffer, &indices, &program, &uniform! { t: t },&Default::default()).unwrap();

使用uniform變量解決了之前第一種方法的兩個(gè)問題. CPU不必進(jìn)行任何計(jì)算, 而且不必上傳整個(gè)形狀的頂點(diǎn)的數(shù)據(jù)給GPU, 只需上傳 t 的值(一個(gè)單精度浮點(diǎn)數(shù))就行了.

總結(jié)

以上是生活随笔為你收集整理的plsqlfor循环输出三角形_glium指南-03-移动我们的三角形的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文在线a√在线 | 国自产拍偷拍精品啪啪一区二区 | 吃瓜网今日吃瓜 热门大瓜 色婷在线 | 射美女 | 色在线播放 | 欧美日韩国产一区二区三区在线观看 | 日本精品在线一区 | 九草在线观看 | 超污网站在线观看 | 手机在线看a | 日产电影一区二区三区 | 天天操天天摸天天干 | 欧美一级免费黄色片 | 久久久久久久久蜜桃 | 成人熟女一区二区 | 性欧美jzjz2| 精品久久久中文字幕 | 久久国产网 | 成人一二三四区 | 农村妇女av| 久久久久亚洲av无码专区首jn | videosex抽搐痉挛高潮 | 五月天激情国产综合婷婷婷 | 日日干日日操 | 18被视频免费观看视频 | a级免费网站 | 王者后宫yin肉h文催眠 | 日韩国产91 | 精品视频免费观看 | 天天av天天 | 视频区小说区图片区 | 中文字幕免费在线看线人 | 综合狠狠开心 | 香港三级在线视频 | 日韩精品你懂的 | 麻豆剧场 | 日韩视频一二三 | av色在线观看 | 99热热99| 男男做爰猛烈叫床爽爽小说 | 日韩一区二区三区视频在线 | 久久国产一区二区三区 | 韩日产理伦片在线观看 | 台湾佬成人中文网222vvv | 日本免费网 | 欧美高清视频一区二区三区 | 这里只有久久精品 | 国产青青草 | free性娇小hd第一次 | 五月激情四射网 | 秋霞在线一区二区 | 青青操久久 | 播色网 | 美女黄色免费网站 | 亚洲综合图区 | 色噜噜一区二区三区 | 久久精品这里有 | 潮喷失禁大喷水aⅴ无码 | 在线观看成人 | 国产传媒中文字幕 | 337p亚洲精品色噜噜噜 | 大乳丰满人妻中文字幕日本 | 日本一级黄色 | 无套内谢大学处破女www小说 | 国产日韩欧美不卡 | 色妹av| 亚洲精品女人 | 日韩精品一区不卡 | 亚洲大色 | 国产精品不卡在线观看 | 特淫毛片 | 操操日日 | 美少妇av | 国产第六页 | 少妇不卡视频 | 亚洲理论视频 | 国产成人精品亚洲精品色欲 | 免费在线日韩av | 成人特级毛片69免费观看 | 韩日一区二区三区 | 瑟瑟视频在线免费观看 | 久久免费公开视频 | 六月激情网 | 国产美女作爱全过程免费视频 | 精品无码av一区二区三区不卡 | 久久亚洲综合国产精品99麻豆精品福利 | 热久久国产 | 中文字幕在线看 | 亚洲看片| 久久国产欧美日韩精品 | 97理伦| 欧美丰满美乳xxx高潮www | 在线免费成人 | 蜜臀av免费一区二区三区水牛 | 四虎国产| 正在播放木下凛凛88av | 久久久精品一区二区涩爱 | 曰韩在线 | 亚洲美女毛片 |