C++ 在着色器内部从glOrtho切换到MVP矩阵后,将不会绘制任何内容
我以前用过正交透视法,它能正确地画出所有的东西。我在初始化期间使用了以下代码:C++ 在着色器内部从glOrtho切换到MVP矩阵后,将不会绘制任何内容,c++,opengl,glm-math,opengl-3,C++,Opengl,Glm Math,Opengl 3,我以前用过正交透视法,它能正确地画出所有的东西。我在初始化期间使用了以下代码: glViewport(0, 0, WIDTH, HEIGHT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, WIDTH, HEIGHT, 0, 0, 1); glMatrixMode(GL_MODELVIEW); 这个着色器: vec3 actualPos = inPos + cubeVert * (inMass * scale); gl_P
glViewport(0, 0, WIDTH, HEIGHT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, WIDTH, HEIGHT, 0, 0, 1);
glMatrixMode(GL_MODELVIEW);
这个着色器:
vec3 actualPos = inPos + cubeVert * (inMass * scale);
gl_Position = vec4(actualPos, 1.0);
Mass = inMass;
UV = cubeVert.xy + vec2(0.5, 0.5);
我一直在尝试切换到在着色器中使用MVP矩阵,但是我在屏幕上没有得到任何输出,除了我清除它的颜色
我用以下方法构建它:
glm::mat4 model(1.f);
glm::mat4 projection(1.f);
projection = glm::perspective(glm::radians(30.f), (float)WIDTH / (float)HEIGHT, 0.1f, 100.f);
glm::mat4 view(1.f);
view = glm::lookAt(glm::vec3(-10.f, -10.f, -10.f), glm::vec3(0.f, 0.f, 0.f), glm::vec3(0.f, 1.f, 0.f));
glm::mat4 MVP = projection * view * model;
然后在删除旧代码后,在初始化过程中应用它:
glViewport(0, 0, WIDTH, HEIGHT);
glUniformMatrix4fv(glGetAttribLocation(program, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
这是我当前的主绘图循环:
glClearColor(0.01f, 0.10f, 0.15f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(program);
glUniformMatrix4fv(glGetAttribLocation(program, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE0, texture);
glUniform1i(sampler, 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, VBOcube);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, (void*)0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, AMOUNT * sizeof(Body), NULL, GL_STREAM_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, AMOUNT * sizeof(Body), bods);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Body), (void*)0);
glVertexAttribPointer(2, 1, GL_FLOAT, GL_FALSE, sizeof(Body), (void*)sizeof(glm::vec3));
glVertexAttribDivisor(0, 0);
glVertexAttribDivisor(1, 1);
glVertexAttribDivisor(2, 1);
glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, AMOUNT);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
我尝试过移动相机,旋转相机,以防在视图外绘制对象,但我不确定此时是否绘制了任何内容。“MVP”
是一个统一的变量。要获得统一变量的位置索引,必须使用而不是
glLinkProgram(program);
GLint mvp_loc=glGetUniformLocation(程序,“mvp”):
glUseProgram(程序);
glUniformMatrix4fv(mvp_loc,1,GL_FALSE,glm::value_ptr(mvp));
你说得对,非常感谢。男孩真是太尴尬了。