我被幾何着色器卡在OpenGL-C++編程中。我想通過重複6次繪製一個旋轉的牆來創建簡單的立方體。這裏是我的頂點着色器(everyting在序言的#Version 330核心):C++,OpenGL - 幾何着色器
uniform mat4 MVP;
uniform mat4 ROT;
layout(location=0) in vec3 vertPos;
void main(){
vec4 pos=(MVP*ROT*vec4(vertPos,1));
pos.x/=1.5;
pos.y/=1.5;
gl_Position=pos;
}
現在幾何形狀着色器:
layout (triangles) in;
layout (triangle_strip, max_vertices = 6) out;
out vec4 pos;
void main(void)
{
pos=vec4(1,1,1,1);
for (int i = 0; i < 3; i++)
{
vec4 offset=vec4(i/2.,0,0,0);
gl_Position = gl_in[i].gl_Position+offset;
EmitVertex();
}
EndPrimitive();
}
現在片段着色器:
uniform mat4 MVP;
in vec4 pos;
out vec3 color;
void main(){
vec3 light=(MVP*vec4(0,0,0,1)).xyz;
vec3 dd=pos.xyz-light;
float cosTheta=length(dd)*length(dd);
color=vec3(1,0,0);
}
那麼,有一些垃圾,我也想把陰影放到我的立方體中,但是我發送座標時遇到了問題。主要的問題是 - 在這裏我得到我的縮放廣場(通過MVP矩陣),我甚至可以用基本界面(ROT矩陣)旋轉它,但是當我取消註釋我的「+偏移」線時,我得到一些混亂。我應該怎樣做6次重複清潔?
沒有什麼個人的,但請INDENT您的代碼 – MightyPork
大聲笑,甚至我的朋友都這樣說。我有特殊的腳本來刪除我的代碼中的所有縮進,我喜歡它乾淨。 –
真的嗎?這是一切*但乾淨! – MightyPork