2013-07-21 24 views
-3

因此,我開始在特定的(3.2)中使用新的OpenGL版本開發遊戲。 我使用着色器和VBOs。在較新版本的OpenGL上旋轉(如何在不使用glRotatef的情況下旋轉)

如何實現旋轉?(我以前只是使用glRotatef)我寧願通過程序而不是着色器,因爲我根本不理解着色器編碼..我甚至不知道從哪裏開始輪換,因爲我不知道它是如何開始的將工作..

注:我需要一個2D遊戲..我想旋轉自己周圍的三角形(即補四)一個簡單的方法..

走進詳細例子..

編輯:我的頂點着色器

#version 150 core 

in vec4 in_Position; 
in vec4 in_Color; 
in vec2 in_TextureCoord; 
in float in_angle; 

out vec4 pass_Color; 
out vec2 pass_TextureCoord; 

void main(void) { 
    mat4x4 roll=mat4x4(1.0); 
    roll[0][0]=cos(in_angle); 
    roll[0][1]=sin(in_angle); 
    roll[1][0]=-(sin(in_angle)); 
    roll[1][1]=cos(in_angle); 


    gl_Position = in_Position*roll; 

    pass_Color = in_Color; 
    pass_TextureCoord = in_TextureCoord; 
} 
+1

雖然你可以通過CPU做旋轉,但你真的應該學會使用着色器來做到這一點。着色器代碼並不難,最重要的可能只是您使用「統一」來設置將在逐漸變化的着色器中使用的值(例如旋轉)。 – thecoshman

回答

1

如果你只是想實現一個2D場景,我個人會提醒libgdx。但是回到主題:旋轉只能在着色器中完成。您必須根據線性代數http://en.wikipedia.org/wiki/Rotation_matrix轉換頂點。你所做的是實現一個矩陣類和所有的操作,如平移,旋轉和縮放,並將這個矩陣送到着色器。這個矩陣中最重要的部分是投影,但我客串,你只需要平行投影這是很容易:https://en.wikipedia.org/wiki/Parallel_projection

這是一個示範性頂點着色器:

uniform mat4 matrix; 
    void main(void) 
     { 
      gl_Position = matrix * gl_Vertex; 
     } 

這個shader乘以它把所有的頂點由矩陣。接下來你需要一個片段着色器:

void main(void) 
    { 
     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); 
    } 

你必須通過opengl API編譯並運行它。

+0

維基百科是一個很糟糕的來源,我非常討厭它。這就是我想要你添加的:以一個角度,將它變成一個旋轉矩陣,然後將它提供給你給我的着色器。例如:我有86度,我把它變成一個mat4對象,並傳遞給着色器。順便說一句,我從JBox2D得到我的學位,所以它肯定會是有效的程度。 – Gopgop

+0

(我希望你爲我上面所說的添加示例..)謝謝! – Gopgop

+0

你使用什麼樣的opengl綁定? – morpheus05

相關問題