纹理映射和照明顶点着色器错误Java OpenGL
我正在尝试将纹理映射到3D立方体,并尝试编写着色器,使其具有照明和纹理 我试着只写纹理着色器,它可以工作。 我还尝试了仅将3D值设置为红色的灯光着色器,该灯光着色器也可以工作。但当我试图将两者结合起来时,我遇到了问题。 我在下面提供了我的代码,但是我得到了一个错误 未编译附加的顶点着色器。无法链接着色器。 顶点着色器纹理映射和照明顶点着色器错误Java OpenGL,java,opengl,opengl-es,fragment-shader,vertex-shader,Java,Opengl,Opengl Es,Fragment Shader,Vertex Shader,我正在尝试将纹理映射到3D立方体,并尝试编写着色器,使其具有照明和纹理 我试着只写纹理着色器,它可以工作。 我还尝试了仅将3D值设置为红色的灯光着色器,该灯光着色器也可以工作。但当我试图将两者结合起来时,我遇到了问题。 我在下面提供了我的代码,但是我得到了一个错误 未编译附加的顶点着色器。无法链接着色器。 顶点着色器 #version 330 core layout(location = 0) in vec4 vPosition; layout(location = 1) in vec3 vN
#version 330 core
layout(location = 0) in vec4 vPosition;
layout(location = 1) in vec3 vNormal;
layout(location = 2) in vec2 VTexCoord;
out vec4 color;
out vec2 texCoord;
uniform mat4 ModelView;
uniform mat4 NormalTransform;
uniform mat4 Projection;
uniform vec4 LightPosition;
uniform vec4 AmbientProduct, DiffuseProduct, SpecularProduct;
uniform float Shininess;
void main()
{
// Transform vertex position into eye coordinates
vec3 ecPosition = (ModelView * vPosition).xyz;
// Here light position is defined in eye coordinates
vec3 L = normalize( LightPosition.xyz - ecPosition );
vec3 E = normalize( -ecPosition );
vec3 H = normalize( L + E );
// Transform vertex normal into eye coordinates
vec3 N = normalize((NormalTransform *vec4(vNormal,0)).xyz);
// Compute terms in the illumination equation
vec4 ambient = AmbientProduct;
float Kd = max( dot(L, N), 0.0 );
vec4 diffuse = Kd*DiffuseProduct;
float Ks = pow( max(dot(N, H), 0.0), Shininess );
vec4 specular = Ks * SpecularProduct;
if( dot(L, N) < 0.0 ) {
specular = vec4(0.0, 0.0, 0.0, 1.0);
}
gl_Position = Projection * ModelView * vPosition;
texCoord = vTexCoord;
color = ambient + diffuse + specular;
color.a = 1.0;
}
#version 330 core
in vec4 color;
in vec2 texCoord;
out vec4 fColor;
uniform sampler2D tex;
void main()
{
// fColor = texture( tex, texCoord );
vec4 t = texture( tex, texCoord );
fColor = 0.1*color + 0.9* t;
// fColor = color*(1-t) + vec4(0.8,0.5,0.3,1)* t;
}
编译链接
int vShader = gl.glCreateShader(GL_VERTEX_SHADER);
int fShader = gl.glCreateShader(GL_FRAGMENT_SHADER);
gl.glShaderSource(vShader, 1, vSource, null);
gl.glShaderSource(fShader, 1, fSource, null);
gl.glCompileShader(vShader);
gl.glCompileShader(fShader);
program = gl.glCreateProgram();
gl.glAttachShader(program, fShader);
gl.glAttachShader(program, vShader);
gl.glLinkProgram(program);
我已尝试获取日志文件
Internal exceptions (10 events):
Event: 0.035 Thread 0x0000000002950800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class; name or signature does not match> (0x000000076b78cf50) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\srv„;…їЎ?
Event: 0.035 Thread 0x0000000002950800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.prefetchRead(Ljava/lang/Object;J)V name or signature does not match> (0x000000076b78d238) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\j‘ћ·¬QЉё?
Event: 0.096 Thread 0x0000000002950800 Exception <a 'java/security/PrivilegedActionException'> (0x000000076b82b230) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp, line 1386]
Event: 0.096 Thread 0x0000000002950800 Exception <a 'java/security/PrivilegedActionException'> (0x000000076b82b440) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp, line 1386]
Event: 0.096 Thread 0x0000000002950800 Exception <a 'java/security/PrivilegedActionException'> (0x000000076b82efe8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp, line 1386]
Event: 0.096 Thread 0x0000000002950800 Exception <a 'java/security/PrivilegedActionException'> (0x000000076b82f1f8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp, line 1386]
Event: 0.103 Thread 0x0000000002950800 Exception <a 'java/io/FileNotFoundException'> (0x000000076b833d80) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jni.cpp, line 709]
Event: 0.140 Thread 0x0000000002950800 Exception <a 'java/lang/NoSuchFieldError': method resolution failed> (0x000000076bb8bcd8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\methodHandles.cpp, line 1146]
Event: 0.141 Thread 0x0000000002950800 Exception <a 'java/lang/NoSuchFieldError': method resolution failed> (0x000000076bb990a8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\methodHandles.cpp, line 1146]
Event: 0.175 Thread 0x0000000002950800 Exception <a 'java/io/FileNotFoundException'> (0x000000076bc2dc50) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jni.cpp, line 709]
我不确定,但问题可能是由日志文件中的异常引起的
Internal exceptions (10 events):
Event: 0.035 Thread 0x0000000002950800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class; name or signature does not match> (0x000000076b78cf50) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\srv„;…їЎ?
Event: 0.035 Thread 0x0000000002950800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.prefetchRead(Ljava/lang/Object;J)V name or signature does not match> (0x000000076b78d238) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\j‘ћ·¬QЉё?
Event: 0.096 Thread 0x0000000002950800 Exception <a 'java/security/PrivilegedActionException'> (0x000000076b82b230) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp, line 1386]
Event: 0.096 Thread 0x0000000002950800 Exception <a 'java/security/PrivilegedActionException'> (0x000000076b82b440) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp, line 1386]
Event: 0.096 Thread 0x0000000002950800 Exception <a 'java/security/PrivilegedActionException'> (0x000000076b82efe8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp, line 1386]
Event: 0.096 Thread 0x0000000002950800 Exception <a 'java/security/PrivilegedActionException'> (0x000000076b82f1f8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp, line 1386]
Event: 0.103 Thread 0x0000000002950800 Exception <a 'java/io/FileNotFoundException'> (0x000000076b833d80) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jni.cpp, line 709]
Event: 0.140 Thread 0x0000000002950800 Exception <a 'java/lang/NoSuchFieldError': method resolution failed> (0x000000076bb8bcd8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\methodHandles.cpp, line 1146]
Event: 0.141 Thread 0x0000000002950800 Exception <a 'java/lang/NoSuchFieldError': method resolution failed> (0x000000076bb990a8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\methodHandles.cpp, line 1146]
Event: 0.175 Thread 0x0000000002950800 Exception <a 'java/io/FileNotFoundException'> (0x000000076bc2dc50) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jni.cpp, line 709]
内部异常(10个事件):
事件:0.035线程0x0000000002950800异常(0x000000076b78cf50)在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\srv;上引发?
事件:0.035线程0x0000000002950800异常(0x000000076b78d238)在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\j'ћ·QЉё?
事件:0.096线程0x0000000002950800异常(0x000000076b82b230)在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp,第1386行]抛出
事件:0.096线程0x0000000002950800异常(0x000000076b82b440)在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp,第1386行]抛出
事件:0.096线程0x0000000002950800异常(0x000000076b82efe8)在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp,第1386行]抛出
事件:0.096线程0x0000000002950800异常(0x000000076b82f1f8)在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jvm.cpp,第1386行]抛出
事件:0.103线程0x0000000002950800异常(0x000000076b833d80)在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jni.cpp,第709行]抛出
事件:0.140线程0x0000000002950800异常(0x000000076bb8bcd8)在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\methodHandles.cpp,第1146行]抛出
事件:0.141线程0x0000000002950800异常(0x000000076bb990a8)在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\methodHandles.cpp,第1146行]抛出
事件:在[C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u66\5298\hotspot\src\share\vm\prims\jni.cpp,第709行]上引发0.175线程0x0000000002950800异常(0x000000076bc2dc50)
日志堆栈帧:
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j jogamp.opengl.gl4.GL4bcImpl.dispatch_glGetShaderInfoLog1(IILjava/lang/Object;IZLjava/lang/Object;IZJ)V+0
j jogamp.opengl.gl4.GL4bcImpl.glGetShaderInfoLog(IILjava/nio/IntBuffer;Ljava/nio/ByteBuffer;)V+123
j Basic.ShaderProg.loadShaders(Lcom/jogamp/opengl/GL3;)V+157
j Basic.ShaderProg.<init>(Lcom/jogamp/opengl/GL3;Ljava/lang/String;Ljava/lang/String;)V+16
j VCCW04$Renderer.init(Lcom/jogamp/opengl/GLAutoDrawable;)V+358
j jogamp.opengl.GLDrawableHelper.init(Lcom/jogamp/opengl/GLEventListener;Lcom/jogamp/opengl/GLAutoDrawable;Z)V+2
j jogamp.opengl.GLDrawableHelper.init(Lcom/jogamp/opengl/GLAutoDrawable;Z)V+81
j jogamp.opengl.GLAutoDrawableBase$1.run()V+26
j jogamp.opengl.GLDrawableHelper.invokeGLImpl(Lcom/jogamp/opengl/GLDrawable;Lcom/jogamp/opengl/GLContext;Ljava/lang/Runnable;Ljava/lang/Runnable;)V+197
j jogamp.opengl.GLDrawableHelper.invokeGL(Lcom/jogamp/opengl/GLDrawable;Lcom/jogamp/opengl/GLContext;Ljava/lang/Runnable;Ljava/lang/Runnable;)V+72
j com.jogamp.newt.opengl.GLWindow.display()V+90
j jogamp.opengl.GLAutoDrawableBase.defaultWindowResizedOp(II)V+206
j com.jogamp.newt.opengl.GLWindow.access$200(Lcom/jogamp/newt/opengl/GLWindow;II)V+3
j com.jogamp.newt.opengl.GLWindow$2.windowResized(Lcom/jogamp/newt/event/WindowEvent;)V+18
j jogamp.newt.WindowImpl.consumeWindowEvent(Lcom/jogamp/newt/event/WindowEvent;)V+234
j jogamp.newt.WindowImpl.sendWindowEvent(I)V+14
j jogamp.newt.WindowImpl.setVisibleActionImpl(Z)V+691
j jogamp.newt.WindowImpl$VisibleAction.run()V+8
j com.jogamp.common.util.RunnableTask.run()V+198
j jogamp.newt.DefaultEDTUtil$NEDT.run()V+221
v ~StubRoutines::call_stub
Java框架:(J=编译的Java代码,J=解释的,Vv=VM代码)
j jogamp.opengl.gl4.GL4bcImpl.dispatch_glgetshaderingfolog1(IILjava/lang/Object;IZLjava/lang/Object;IZJ)V+0
jjogamp.opengl.gl4.GL4bcImpl.glGetShaderInfoLog(IILjava/nio/IntBuffer;Ljava/nio/ByteBuffer;)V+123
j基本着色器程序加载着色器(Lcom/jogamp/opengl/GL3;)V+157
j Basic.ShaderProg.(Lcom/jogamp/opengl/GL3;Ljava/lang/String;Ljava/lang/String;)V+16
jvccw04$Renderer.init(Lcom/jogamp/opengl/GLAutoDrawable;)V+358
j jogamp.opengl.GLDrawableHelper.init(Lcom/jogamp/opengl/GLEventListener;Lcom/jogamp/opengl/GLAutoDrawable;Z)V+2
jjogamp.opengl.GLDrawableHelper.init(Lcom/jogamp/opengl/GLAutoDrawable;Z)V+81
jjogamp.opengl.GLAutoDrawableBase$1.run()V+26
j jogamp.opengl.gldrawableheloper.invokeGLImpl(Lcom/jogamp/opengl/GLDrawable;Lcom/jogamp/opengl/GLContext;Ljava/lang/Runnable;Ljava/lang/Runnable;)V+197
j jogamp.opengl.gldrawableheloper.invokeGL(Lcom/jogamp/opengl/GLDrawable;Lcom/jogamp/opengl/GLContext;Ljava/lang/Runnable;Ljava/lang/Runnable;)V+72
j com.jogamp.newt.opengl.GLWindow.display()V+90
jjogamp.opengl.GLAutoDrawableBase.defaultWindowResizedOp(II)V+206
jcom.jogamp.newt.opengl.GLWindow.access$200(Lcom/jogamp/newt/opengl/GLWindow;II)V+3
jcom.jogamp.newt.opengl.GLWindow$2.windowResized(Lcom/jogamp/newt/event/WindowEvent;)V+18
j jogamp.NENT.WindowImpl.ConsumerWindowEvent(Lcom/jogamp/NENT/event/WindowEvent;)V+234
j jogamp.NENT.WindowImpl.sendWindowEvent(一)V+14
j jogamp.NENT.WindowImpl.setVisibleActionImpl(Z)V+691
j jogamp.newt.WindowImpl$VisibleAction.run()V+8
j com.jogamp.common.util.RunnableTask.run()V+198
j jogamp.newt.DefaultEDTUtil$NEDT.run()V+221
v~StubRoutines::调用_stub
正如我之前所说,在使用is之前,我们必须检查着色器编译链接状态
我就是这样做的(OpenGL ES 2.0):
您还可以以更具信息性的方式显示消息框调用,如:
QMessageBox::warning(this, QString("Vertex shader compilation error."),
QString(infoLog), QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Yes);
QMessageBox::warning(this, QString("Fragment shader compilation error."),
QString(infoLog), QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Yes);
QMessageBox::warning(this, QString("Shader linkage error."),
QString(infoLog), QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Yes);
这样我们就可以大大缩小bug搜索的范围
我突然发现了一些关于这个bug的信息,看起来像这样。我想这只是Windows的问题。试着在Linux操作系统上构建你的应用程序
首先,必须在链接之前为指定rendertarget输出
glBindFragDataLocation(program, 0, "fColor");
你能发布hs_err_pid4376.log文件的内容吗?这是一个很长的文件,我什么都不懂。@Mykolais它真的是
glGetShaderInfoLog
的输出吗?我想调用该函数是一个错误,请确保保存消息的变量的内存没有问题……我已经尝试编译了你的着色器,但是在顶点着色器:vTexCoord
在声明中以不同的大小写开始。