<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 第四課:彩色立方體 # 第四課:彩色立方體 歡迎來到第四課!你將學到: - 畫立方體,代替單調的三角形 - 加上絢麗的色彩 - 學習深度緩存(Z-Buffer) ## 畫立方體 立方體有六個方形表面,而OpenGL只支持畫三角形,因此需要畫12個三角形,每面兩個。我們用定義三角形頂點的方式來定義這些頂點。 ``` <pre class="calibre16">``` <span class="token2">// Our vertices. Tree consecutive floats give a 3D vertex; Three consecutive vertices give a triangle.</span> <span class="token2">// A cube has 6 faces with 2 triangles each, so this makes 6*2=12 triangles, and 12*3 vertices</span> static const GLfloat g_vertex_buffer_data<span class="token1">[</span><span class="token1">]</span> <span class="token">=</span> <span class="token1">{</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token2">// triangle 1 : begin</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token2">// triangle 1 : end</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token2">// triangle 2 : begin</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token2">// triangle 2 : end</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f<span class="token1">,</span><span class="token">-</span><span class="token6">1.0</span>f<span class="token1">,</span> <span class="token6">1.0</span>f <span class="token1">}</span><span class="token1">;</span> ``` ``` OpenGL的緩沖區由一些標準的函數(glGenBuffers, glBindBuffer, glBufferData, glVertexAttribPointer)來創建、綁定、填充和配置;這些可參閱第二課。繪制的函數調用也沒變,只需改繪制的點的個數: ``` <pre class="calibre16">``` <span class="token2">// Draw the triangle !</span> <span class="token3">glDrawArrays</span><span class="token1">(</span>GL_TRIANGLES<span class="token1">,</span> <span class="token6">0</span><span class="token1">,</span> <span class="token6">12</span><span class="token">*</span><span class="token6">3</span><span class="token1">)</span><span class="token1">;</span> <span class="token2">// 12*3 indices starting at 0 -> 12 triangles -> 6 squares</span> ``` ``` 這段代碼,有幾點要解釋: - 現在為止,三維模型都是固定的:要改就要改源碼,重新編譯,然后祈望不會錯。我們將在第七課中學習如何加載動態模型。 - 實際上,每個頂點至少被寫了三次(在以上代碼中搜索“-1.0f,-1.0f,-1.0f”看看)。這是可怕的內存浪費。我們將在第九課中學習怎樣優化。 現在,你有了畫一個白色立方體的所有必備條件。讓著色器運行起來,至少試試吧:) ## 添加顏色 Adding colors 顏色,從概念上說,像極了位置:它就是數據。OpenGL中,它們都是“屬性”。事實上,之前已在glEnableVertexAttribArray()和glVertexAttribPointer()用過屬性設置了。現在我們加上顏色屬性,代碼很相似的。 首先,聲明顏色:每個頂點一個RGB(紅綠藍)三元組。這里用隨機的方式生成的,所以結果可能看起來不那么好;但你可以調整得更好,例如:把頂點的位置作為顏色值。 ``` <pre class="calibre16">``` <span class="token2">// One color for each vertex. They were generated randomly.</span> static const GLfloat g_color_buffer_data<span class="token1">[</span><span class="token1">]</span> <span class="token">=</span> <span class="token1">{</span> <span class="token6">0.583</span>f<span class="token1">,</span> <span class="token6">0.771</span>f<span class="token1">,</span> <span class="token6">0.014</span>f<span class="token1">,</span> <span class="token6">0.609</span>f<span class="token1">,</span> <span class="token6">0.115</span>f<span class="token1">,</span> <span class="token6">0.436</span>f<span class="token1">,</span> <span class="token6">0.327</span>f<span class="token1">,</span> <span class="token6">0.483</span>f<span class="token1">,</span> <span class="token6">0.844</span>f<span class="token1">,</span> <span class="token6">0.822</span>f<span class="token1">,</span> <span class="token6">0.569</span>f<span class="token1">,</span> <span class="token6">0.201</span>f<span class="token1">,</span> <span class="token6">0.435</span>f<span class="token1">,</span> <span class="token6">0.602</span>f<span class="token1">,</span> <span class="token6">0.223</span>f<span class="token1">,</span> <span class="token6">0.310</span>f<span class="token1">,</span> <span class="token6">0.747</span>f<span class="token1">,</span> <span class="token6">0.185</span>f<span class="token1">,</span> <span class="token6">0.597</span>f<span class="token1">,</span> <span class="token6">0.770</span>f<span class="token1">,</span> <span class="token6">0.761</span>f<span class="token1">,</span> <span class="token6">0.559</span>f<span class="token1">,</span> <span class="token6">0.436</span>f<span class="token1">,</span> <span class="token6">0.730</span>f<span class="token1">,</span> <span class="token6">0.359</span>f<span class="token1">,</span> <span class="token6">0.583</span>f<span class="token1">,</span> <span class="token6">0.152</span>f<span class="token1">,</span> <span class="token6">0.483</span>f<span class="token1">,</span> <span class="token6">0.596</span>f<span class="token1">,</span> <span class="token6">0.789</span>f<span class="token1">,</span> <span class="token6">0.559</span>f<span class="token1">,</span> <span class="token6">0.861</span>f<span class="token1">,</span> <span class="token6">0.639</span>f<span class="token1">,</span> <span class="token6">0.195</span>f<span class="token1">,</span> <span class="token6">0.548</span>f<span class="token1">,</span> <span class="token6">0.859</span>f<span class="token1">,</span> <span class="token6">0.014</span>f<span class="token1">,</span> <span class="token6">0.184</span>f<span class="token1">,</span> <span class="token6">0.576</span>f<span class="token1">,</span> <span class="token6">0.771</span>f<span class="token1">,</span> <span class="token6">0.328</span>f<span class="token1">,</span> <span class="token6">0.970</span>f<span class="token1">,</span> <span class="token6">0.406</span>f<span class="token1">,</span> <span class="token6">0.615</span>f<span class="token1">,</span> <span class="token6">0.116</span>f<span class="token1">,</span> <span class="token6">0.676</span>f<span class="token1">,</span> <span class="token6">0.977</span>f<span class="token1">,</span> <span class="token6">0.133</span>f<span class="token1">,</span> <span class="token6">0.971</span>f<span class="token1">,</span> <span class="token6">0.572</span>f<span class="token1">,</span> <span class="token6">0.833</span>f<span class="token1">,</span> <span class="token6">0.140</span>f<span class="token1">,</span> <span class="token6">0.616</span>f<span class="token1">,</span> <span class="token6">0.489</span>f<span class="token1">,</span> <span class="token6">0.997</span>f<span class="token1">,</span> <span class="token6">0.513</span>f<span class="token1">,</span> <span class="token6">0.064</span>f<span class="token1">,</span> <span class="token6">0.945</span>f<span class="token1">,</span> <span class="token6">0.719</span>f<span class="token1">,</span> <span class="token6">0.592</span>f<span class="token1">,</span> <span class="token6">0.543</span>f<span class="token1">,</span> <span class="token6">0.021</span>f<span class="token1">,</span> <span class="token6">0.978</span>f<span class="token1">,</span> <span class="token6">0.279</span>f<span class="token1">,</span> <span class="token6">0.317</span>f<span class="token1">,</span> <span class="token6">0.505</span>f<span class="token1">,</span> <span class="token6">0.167</span>f<span class="token1">,</span> <span class="token6">0.620</span>f<span class="token1">,</span> <span class="token6">0.077</span>f<span class="token1">,</span> <span class="token6">0.347</span>f<span class="token1">,</span> <span class="token6">0.857</span>f<span class="token1">,</span> <span class="token6">0.137</span>f<span class="token1">,</span> <span class="token6">0.055</span>f<span class="token1">,</span> <span class="token6">0.953</span>f<span class="token1">,</span> <span class="token6">0.042</span>f<span class="token1">,</span> <span class="token6">0.714</span>f<span class="token1">,</span> <span class="token6">0.505</span>f<span class="token1">,</span> <span class="token6">0.345</span>f<span class="token1">,</span> <span class="token6">0.783</span>f<span class="token1">,</span> <span class="token6">0.290</span>f<span class="token1">,</span> <span class="token6">0.734</span>f<span class="token1">,</span> <span class="token6">0.722</span>f<span class="token1">,</span> <span class="token6">0.645</span>f<span class="token1">,</span> <span class="token6">0.174</span>f<span class="token1">,</span> <span class="token6">0.302</span>f<span class="token1">,</span> <span class="token6">0.455</span>f<span class="token1">,</span> <span class="token6">0.848</span>f<span class="token1">,</span> <span class="token6">0.225</span>f<span class="token1">,</span> <span class="token6">0.587</span>f<span class="token1">,</span> <span class="token6">0.040</span>f<span class="token1">,</span> <span class="token6">0.517</span>f<span class="token1">,</span> <span class="token6">0.713</span>f<span class="token1">,</span> <span class="token6">0.338</span>f<span class="token1">,</span> <span class="token6">0.053</span>f<span class="token1">,</span> <span class="token6">0.959</span>f<span class="token1">,</span> <span class="token6">0.120</span>f<span class="token1">,</span> <span class="token6">0.393</span>f<span class="token1">,</span> <span class="token6">0.621</span>f<span class="token1">,</span> <span class="token6">0.362</span>f<span class="token1">,</span> <span class="token6">0.673</span>f<span class="token1">,</span> <span class="token6">0.211</span>f<span class="token1">,</span> <span class="token6">0.457</span>f<span class="token1">,</span> <span class="token6">0.820</span>f<span class="token1">,</span> <span class="token6">0.883</span>f<span class="token1">,</span> <span class="token6">0.371</span>f<span class="token1">,</span> <span class="token6">0.982</span>f<span class="token1">,</span> <span class="token6">0.099</span>f<span class="token1">,</span> <span class="token6">0.879</span>f <span class="token1">}</span><span class="token1">;</span> ``` ``` 緩沖區的創建、綁定和填充方法和之前一樣: ``` <pre class="calibre16">``` GLuint colorbuffer<span class="token1">;</span> <span class="token3">glGenBuffers</span><span class="token1">(</span><span class="token6">1</span><span class="token1">,</span> <span class="token">&</span>colorbuffer<span class="token1">)</span><span class="token1">;</span> <span class="token3">glBindBuffer</span><span class="token1">(</span>GL_ARRAY_BUFFER<span class="token1">,</span> colorbuffer<span class="token1">)</span><span class="token1">;</span> <span class="token3">glBufferData</span><span class="token1">(</span>GL_ARRAY_BUFFER<span class="token1">,</span> <span class="token3">sizeof</span><span class="token1">(</span>g_color_buffer_data<span class="token1">)</span><span class="token1">,</span> g_color_buffer_data<span class="token1">,</span> GL_STATIC_DRAW<span class="token1">)</span><span class="token1">;</span> ``` ``` 配置也一樣: ``` <pre class="calibre16">``` <span class="token2">// 2nd attribute buffer : colors</span> <span class="token3">glEnableVertexAttribArray</span><span class="token1">(</span><span class="token6">1</span><span class="token1">)</span><span class="token1">;</span> <span class="token3">glBindBuffer</span><span class="token1">(</span>GL_ARRAY_BUFFER<span class="token1">,</span> colorbuffer<span class="token1">)</span><span class="token1">;</span> <span class="token3">glVertexAttribPointer</span><span class="token1">(</span> <span class="token6">1</span><span class="token1">,</span> <span class="token2">// attribute. No particular reason for 1, but must match the layout in the shader.</span> <span class="token6">3</span><span class="token1">,</span> <span class="token2">// size</span> GL_FLOAT<span class="token1">,</span> <span class="token2">// type</span> GL_FALSE<span class="token1">,</span> <span class="token2">// normalized?</span> <span class="token6">0</span><span class="token1">,</span> <span class="token2">// stride</span> <span class="token1">(</span>void<span class="token">*</span><span class="token1">)</span><span class="token6">0</span> <span class="token2">// array buffer offset</span> <span class="token1">)</span><span class="token1">;</span> ``` ``` 現在,頂點著色器中,我們已能訪問這個額外的緩沖區: ``` <pre class="calibre16">``` <span class="token2">// Notice that the "1" here equals the "1" in glVertexAttribPointer</span> <span class="token3">layout</span><span class="token1">(</span>location <span class="token">=</span> <span class="token6">1</span><span class="token1">)</span> <span class="token4">in</span> vec3 vertexColor<span class="token1">;</span> ``` ``` 本例將不會在頂點著色器里做花哨的玩意,只是簡單地過渡到片斷著色器: ``` <pre class="calibre16">``` <span class="token2">// Output data ; will be interpolated for each fragment.</span> out vec3 fragmentColor<span class="token1">;</span> void <span class="token3">main</span><span class="token1">(</span><span class="token1">)</span><span class="token1">{</span> <span class="token1">[</span><span class="token1">.</span><span class="token1">.</span><span class="token1">.</span><span class="token1">]</span> <span class="token2">// The color of each vertex will be interpolated</span> <span class="token2">// to produce the color of each fragment</span> fragmentColor <span class="token">=</span> vertexColor<span class="token1">;</span> <span class="token1">}</span> ``` ``` 片斷著色器中,要再次聲明片斷顏色: ``` <pre class="calibre16">``` <span class="token2">// Interpolated values from the vertex shaders</span> <span class="token4">in</span> vec3 fragmentColor<span class="token1">;</span> ``` ``` …然后把它的值賦給輸出顏色: ``` <pre class="calibre16">``` <span class="token2">// Output color = color specified in the vertex shader,</span> <span class="token2">// interpolated between all 3 surrounding vertices</span> color <span class="token">=</span> fragmentColor<span class="token1">;</span> ``` ``` 于是得到: ![](https://box.kancloud.cn/2015-11-02_5636f303ab2c9.png) 額,好丑。為了搞清楚,我們先看看各畫一個看起來“遠”和“近”的三角形,會發生什么: ![](https://box.kancloud.cn/2015-11-02_5636f303bd5dc.png) 似乎挺好。現在畫“遠”的三角形: ![](https://box.kancloud.cn/2015-11-02_5636f303ce1b6.png) 它遮住了“近”三角形!它本應該畫在“近”三角形后面的!我們的立方體就有這個問題:一些理應被遮擋的面,因為繪制時間晚,實際可見。我們將用深度緩存(Z-Buffer)算法解決它。 *便簽1*: 如果你沒發現問題,把相機放到(4,3,-3)試試 *便簽2*: 如果“類似于位置,顏色是一種屬性”,那為什么顏色要聲明 vec3 fragmentColor,而位置不需要?實際上,位置有點特殊:它是唯一必須賦初值的(否則OpenGL不知道在哪畫三角形)。所以在頂點著色器里, gl\_Position是內置變量。 ## 深度緩存(Z-Buffer)The Z-Buffer 該問題的解決方案是:在緩沖區中存儲每個片斷的深度(即“Z”值);而每次畫片斷時,先確保當前片斷確實比先前畫的片斷更近。 你可以自己實現,但讓硬件自己去做更簡單: ``` <pre class="calibre16">``` <span class="token2">// Enable depth test</span> <span class="token3">glEnable</span><span class="token1">(</span>GL_DEPTH_TEST<span class="token1">)</span><span class="token1">;</span> <span class="token2">// Accept fragment if it closer to the camera than the former one</span> <span class="token3">glDepthFunc</span><span class="token1">(</span>GL_LESS<span class="token1">)</span><span class="token1">;</span> ``` ``` 這就解決之前所有問題了。 ![](https://box.kancloud.cn/2015-11-02_5636f303dd9ff.png) ## 練習 - 在不同的位置畫立方體和三角形。你需要生成兩個MVP矩陣,在主循環中做兩次繪制調用,但只需一個著色器。 - 自己生成顏色值。一些提示:隨機生成,使每次運行顏色都不同;依據頂點的位置;將前二者結合;或其他的創新想法。若你不了解C,參考以下語法: ``` <pre class="calibre16">``` static GLfloat g_color_buffer_data<span class="token1">[</span><span class="token6">12</span><span class="token">*</span><span class="token6">3</span><span class="token">*</span><span class="token6">3</span><span class="token1">]</span><span class="token1">;</span> <span class="token4">for</span> <span class="token1">(</span>int v <span class="token">=</span> <span class="token6">0</span><span class="token1">;</span> v <span class="token"><</span> <span class="token6">12</span><span class="token">*</span><span class="token6">3</span> <span class="token1">;</span> v<span class="token">++</span><span class="token1">)</span><span class="token1">{</span> g_color_buffer_data<span class="token1">[</span><span class="token6">3</span><span class="token">*</span>v<span class="token">+</span><span class="token6">0</span><span class="token1">]</span> <span class="token">=</span> your red color here<span class="token1">;</span> g_color_buffer_data<span class="token1">[</span><span class="token6">3</span><span class="token">*</span>v<span class="token">+</span><span class="token6">1</span><span class="token1">]</span> <span class="token">=</span> your green color here<span class="token1">;</span> g_color_buffer_data<span class="token1">[</span><span class="token6">3</span><span class="token">*</span>v<span class="token">+</span><span class="token6">2</span><span class="token1">]</span> <span class="token">=</span> your blue color here<span class="token1">;</span> <span class="token1">}</span> ``` ``` - 完成上面習題后,試令顏色在每幀都改變。你需要在每一幀都調用glBufferData。請確保已先綁定(glBindBuffer)了合適的緩沖區!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看