我正在尝试使用法线渲染一个简单的立方体.我正在使用以下代码初始化着色器.
void initShader(const char* vertexShaderPath, const char* fragmentShaderPath){
cout<<"Initializing Shaders"<<endl<<"==="<<endl;
cout<<"Vertex shader ";
vs = loadShader(vertexShaderPath, GL_VERTEX_SHADER);
cout<<"Fragment shader ";
fs = loadShader(fragmentShaderPath, GL_FRAGMENT_SHADER);
cout<<"Creating program: ";
program = glCreateProgram();
if(0==program) cout<< "Failed"<<endl; else cout<< "OK"<<endl;
glAttachShader(program, vs);
glAttachShader(program, fs);
cout<<"Linking program: ";
glLinkProgram(program);
GLint linkstatus = 0;
glGetProgramiv(program, GL_LINK_STATUS, &linkstatus);
if(GL_TRUE==linkstatus) cout<<"OK"<<endl; else cout<<"Failed" <<endl;
cout<<endl<<endl<<"Memory status"<<endl<<"==="<<endl;
mvpmat = glGetUniformLocation(program,"mvpMatrix");
mvmat = glGetUniformLocation(program,"mvMatrix");
normalmat = glGetUniformLocation(program,"normalMatrix");
cout << "mvpMatrix: "<<mvpmat<<" mvMatrix: "<<mvmat<<" normalMatrix: " << normalmat<<endl;
}
Run Code Online (Sandbox Code Playgroud)
最后一个cout语句的输出如下所示(编译或链接期间没有错误).
mvpMatrix: 0 mvMatrix: -1 normalMatrix: 1
Run Code Online (Sandbox Code Playgroud)
这是我的顶点着色器代码
uniform mat4 mvpMatrix;
uniform mat4 mvMatrix;
uniform mat3 normalMatrix;
attribute vec3 vertex;
attribute vec3 normal;
varying vec3 outNormal;
varying vec3 outPos;
void main(){
gl_Position = mvpMatrix*vec4(vertex,1.0);
outPos = (mvMatrix*vec4(vertex,1.0)).xyz;
outNormal = normalize(normalMatrix*normal);
}
Run Code Online (Sandbox Code Playgroud)
我在代码中使用了所有mvpMatrix,mvMatrix和normalMatrix.因此,我真的很困惑为什么getUniformLocation()返回mvMatrix = -1?
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |