Glsl 使用gouraud着色处理输出nothing

Glsl 使用gouraud着色处理输出nothing,glsl,processing,shader,gouraud,Glsl,Processing,Shader,Gouraud,对不起,我是opengl es和处理方面的新手 下面的处理和着色器仅输出背景 冯·普沙德·古劳德 rocket=loadShape(“rocket.obj”); 设置填充(颜色(800,0,0)); Gouraud=loadShader(“gouraudfragment.glsl”、“gouraudvertex.glsl”); Phong=loadShader(“phongfragment.glsl”、“phongvertex.glsl”); background(0); pushMatrix

对不起,我是opengl es和处理方面的新手 下面的处理和着色器仅输出背景

冯·普沙德·古劳德

rocket=loadShape(“rocket.obj”);
设置填充(颜色(800,0,0));
Gouraud=loadShader(“gouraudfragment.glsl”、“gouraudvertex.glsl”);
Phong=loadShader(“phongfragment.glsl”、“phongvertex.glsl”);
background(0);
pushMatrix();
着色器(古罗);
翻译(130,高度/2.0);
rotateY(rc);
rotateX(0.4);
仰泳();
填充(#800080);
盒子(100);
rc+=(0.02+speedCube);
rc*=dirCube;
popMatrix();
pushMatrix();
着色器(古罗);
平移(宽度/2,高度/2+100,-200);
rotateZ(PI);
rotateY(rr);
形状(火箭,100100);
rr+=(0.02+速度火箭);
rr*=定向火箭;
popMatrix();
顶点着色器

可变向量3n;
可变电压3伏;
不同的vec4扩散;
可变vec4规格;
属性向量4位置;
属性向量3正常;
统一mat4模型视图;
均匀mat4投影矩阵;
一致mat3正规矩阵;
均匀vec4光位;
均匀vec3光环境;
均匀vec3光漫反射;
均匀vec3光镜;
均匀浮动镜面电源;
void main()
{
vec4弥漫性;
vec4规范;
vec4环境;
v=vec3(模型视图*位置);
N=归一化(法线矩阵*法线);
gl_位置=投影矩阵*位置;
vec3 L=标准化(lightPosition.xyz-v);
vec3 E=标准化(-v);
vec3 R=标准化(反射(-L,N));
环境=vec4(lightAmbient,100.0);
漫反射=vec4(钳位(光漫反射*最大值(点(N,L),0.0,1.0),100.0);
规格=vec4(夹具(光镜面反射*功率(最大值(点(R,E),0.0),0.3*镜面功率),0.0,1.0),100.0);
颜色=环境光+漫反射光+等级库;
}
片段着色器

void main()
{
gl_FragColor=颜色;
}
请帮忙! 在应用gouraud着色之前

在应用gouraud着色后


处理加载obj和绘制立方体并应用gouraud着色器,但之后仅显示背景,加载的obj和立方体消失。没有显示

着色器甚至不编译和链接。顶点着色器有1个
variable
输出(
color
),因此framgent着色器需要输入
variable vec4颜色

改变vec4颜色;
设置剪辑空间位置时,必须通过模型视图和投影矩阵变换顶点坐标:

gl_Position=projectionMatrix*modelview*Position;
v
N
的类型规格缺失,
ambient
diffuse
spec
的类型是
vec4
而不是
vec3

顶点着色器:

属性向量4位置;
属性向量3正常;
可变的vec4颜色;
统一mat4模型视图;
均匀mat4投影矩阵;
一致mat3正规矩阵;
均匀vec4光位;
均匀vec3光环境;
均匀vec3光漫反射;
均匀vec3光镜;
均匀浮动镜面电源;
void main()
{
vec3 v=vec3(模型视图*位置);
vec3 N=规格化(法线矩阵*法线);
gl_位置=投影矩阵*模型视图*位置;
vec3 L=标准化(lightPosition.xyz-v);
vec3 E=标准化(-v);
vec3 R=标准化(反射(-L,N));
vec4环境=vec4(lightAmbient,100.0);
vec4漫反射=vec4(钳位(光漫反射*最大值(点(N,L),0.0),0.0,1.0),100.0);
vec4规格=vec4(夹紧(光反射*功率(最大值(点(R,E),0.0),0.3*镜面功率),0.0,1.0),100.0);
颜色=环境光+漫反射光+等级库;
}
片段着色器:

改变vec4颜色;
void main()
{
gl_FragColor=颜色;
}
当然,您必须至少设置一个环境光源。 您也可以使用或。
但请注意,着色器只能处理1个光源。1光源的增益越大

OpenGL错误1282位于顶端endDraw():操作无效

如果要使用多个光源,则必须在顶点着色器中为
光位置
光环境
光漫反射
光镜面反射
使用均匀阵列。见()