簡體   English   中英

片段着色器不會在 OpenGL GLSL 中創建像光一樣的漸變

[英]Fragment shader not creating gradient like light in OpenGL GLSL

我試圖了解如何使用着色器操作我的渲染。 我沒有更改場景的投影矩陣,但我繪制了一個頂點 = {-0.5, -0.5} {0.5, -0.5} {0, 0.5} 的三角形。 然后我將一個“光”的 vec2 position 傳遞給我的片段着色器的制服,我想基本上從三角形的右上角照亮我的三角形(lightPos = (0.5,0.5))

這是一張非常糟糕的圖畫,描繪了所有東西的位置。

我用油漆做的可怕圖像

這就是我在三角形中的目標(有點……它不需要從白色到藍色,它只需要在靠近光的地方更亮,在更遠的地方更暗)

示例圖片

這是着色器

#version 460 core

in vec3 oPos;
out vec4 fragColor;

uniform vec3 u_outputColor;
uniform vec2 u_lightPosition;

void main(){

float intensity =  1 / length(oPos.xy - u_lightPosition);
vec4 col = vec4(u_outputColor, 1.0f);
fragColor = col * intensity; 
} 

這是編譯着色器的基本代碼(大部分都被抽象出來了,所以它相當簡單)

/* Test data for shader program. */
program.init("passthrough.vert", "passthrough.frag");
program.setUniformVec3("u_outputColor", 0.3f, 0.3f, 0.8f);
program.setUniformVec2("u_lightPosition", 0.5f, 0.5f);



GLfloat vertices[9] = {-0.5f, -0.5, 0,    0,0.5f,0,    0.5, -0.5, 0};

這是頂點着色器:

#version 460 core

layout (location = 0) in vec3 aPos;
out vec3 oPos;

void main(){
    gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}

我運行的每一個測試,看看為什么我不能讓它工作似乎告訴我,如果有輕微的顏色變化,它會將整個三角形變成不同的陰影。 所有測試都在整個事物上顯示一種顏色的三角形; 完全沒有漸變。 我希望三角形是一個漸變,靠近光線更亮,遠離它更暗。 這讓我發瘋了,因為我已經在這樣一個簡單的事情上堅持了 3 個小時,而且似乎我編寫的任何代碼都會一次修改所有 3 個頂點,就好像它們在完全相同的位置一樣。 我把數學寫出來了,我強烈地覺得這應該可行。 非常感謝任何幫助。

編輯

解決方案后的三角形解決了我的問題:

在此處輸入圖像描述

試試這個為你的頂點着色器:

#version 460 core

layout (location = 0) in vec3 aPos;
out vec3 oPos;

void main(){
    oPos.xyz  = aPos.xyz; // ADD THIS LINE
    gl_Position = vec4(aPos.xyz, 1.0);
}

您的版本從不寫入oPos ,因此片段着色器獲取 a) 隨機值,或者在您的情況下為 b) vec3(0,0,0) 由於您的顏色計算基於:

float intensity =  1 / length(oPos.xy - u_lightPosition);

這與基本相同

float intensity =  1 / length(-1*u_lightPosition);

所以顏色只取決於光線position。

您可以通過將片段顏色設置為oPos來調試和驗證這一點:

vec4 col = vec4(oPos.xy, oPos.z + 0.5, 1.0f);

如果在頂點着色器中正確設置了oPos ,那么片段着色器中的這條線將顯示一個 RGB 漸變。 如果oPos設置不正確,您會看到 50% 藍色。

始終檢查從 OpenGL 返回的錯誤和日志。 應該發出一個警告,讓你直接解決這個問題。

另外,我很驚訝你的整個三角形沒有被剪裁,因為頂點的z0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM