2011-11-11 79 views
0

我在理解OpenGL中燈光如何工作時遇到了一些問題(尤其是理解預定義的變量,是否存在某個地方的列表?)。我一直在我的頂點着色器文件中弄亂我的shpere。所以我設法遮蔽了它,但我不知道我做了什麼。下面是代碼:問題了解OpenGL中的燈光

頂點着色器:

#version 330 
precision highp float; 

in vec3 in_Position; //declare position 
in vec3 in_Color; //color passed from the cpp file 

//mycode 
in vec3 in_Normal; 

// mvpmatrix is the result of multiplying the model, view, and projection matrices */ 
uniform mat4 MVP_matrix; 

vec3 ambient; 

out vec3 ex_Color; 

void main(void) { 

// Multiply the MVP_ matrix by the vertex to obtain our final vertex position (mvp was created in *.cpp) 

gl_Position = MVP_matrix * vec4(in_Position, 1.0); 

//mycode 
ambient = vec3(0.0f,0.1f,1.0f); // just a test vector 

ambient = ambient * in_Position ; // HERE IS WHAT I DONT GET! 

ex_Color = ambient; 

} 

我乘以在球面上的每個點與MVP矩陣,然後與周圍變量。

片段着色器:

#version 330 
precision highp float; 

in vec3 ex_Color; 
out vec4 gl_FragColor; 

void main(void) { 

gl_FragColor = vec4(ex_Color,1.0); 

} 

什麼是 「精密highp浮動;」呢?我知道頂點文件將顏色傳遞給片段着色器,然後該片段被「插入」。好的插值是如何工作的? Opengl如何知道在哪裏停止插值?

+5

「是否有他們的列表」是的。 [OpenGL規範。](http://www.opengl.org/registry/)真的,你需要不再問這些問題零碎,只是去[查看一個很好的教程](http://www.opengl。組織/維基/ Getting_started#Tutorials_and_How_To_Guides)。這類問題對任何人都沒有好處。你基本上在問:「OpenGL的整個部分是如何工作的?」 –

+0

@NicolBolas我知道這些教程,我只是沒有時間,而且大部分都使用自定義庫。所以我問這個問題。 –

+1

@TrtTrt:你不想花時間去正確學習,所以你要求我們爲你寫基本的教程。我不確定我是否理解你的邏輯。使用「自定義庫」有什麼問題?或者你相信你通過重新發明輪子獲得了一些東西?學習像圖形編程這樣複雜的事情需要能夠切實解決實際問題。這意味着使用圖書館來處理不重要的事情。 –

回答

5
ambient = ambient * in_Position ; // HERE IS WHAT I DONT GET! 

這讓我們兩個人。我不知道你打算如何完成這件事。這肯定會產生一種顏色。但它不會有任何實際意義。它當然不符合「照明」的標準。

「precision highp float;」是什麼意思?呢?

什麼都沒有。不在桌面OpenGL中。我真的不知道爲什麼有人把它放在那裏; precision highp是爲了兼容GL ES,但版本3.30着色器基本上與GL ES 2.0不兼容,因爲ES 2.0不使用in/out限定符和桌面GLSL 3.30。

好的插值是如何工作的?

太寬泛,無法在這裏回答。這是better answered here,這是我的更大的教程系列的一部分。

Opengl如何知道在哪裏停止插值?

三角形的邊緣。