【发布时间】:2019-11-02 05:48:27
【问题描述】:
IDE: xcode
系统: MacOS
我想要做什么
我的project [repo] 正处于我成功完成skybox [tutorial link] 工作的地步,但我正在努力处理assimp's model loading [tutorial link]。
问题
我没有收到任何错误。模型只是没有加载到窗口中,即使我在model.h [GitHub line link] 的相应行添加了cout << vertices.data() << endl; [GitHub line link],在它在main.cpp [GitHub line link] 中初始化之后,它正在打印0x106e6b000,所以模型顶点正在加载。
但是,除了背景颜色之外,窗口仍然是空的。 In the tutorial [YouTube video link with timestamp],我忠实地遵循,它正在工作。
我想要达到的目标:
我正在尝试渲染模型nanosuit.obj,它被证明是红色的。ourModel.Draw( shader );应该绘制它,但没有或它没有被显示。
出于某种原因,它没有显示,尽管没有找不到数据或触发异常的错误。
我很想提供一个 MCVE,但它的代码非常相互关联,因此是 GitHub 链接。
据我所知,这应该绘制模型,除非它抱怨。
// Draw the loaded model
glm::mat4 model;
model = glm::translate( model, glm::vec3( 0.0f, -1.75f, 0.0f ) ); // Translate it down a bit so it's at the center of the scene
model = glm::scale( model, glm::vec3( 0.2f, 0.2f, 0.2f ) ); // It's a bit too big for our scene, so scale it down
glUniformMatrix4fv( glGetUniformLocation( shader.Program, "model" ), 1, GL_FALSE, glm::value_ptr( model ) );
ourModel.Draw( shader );
我尝试过的东西:
- 旋转相机以检查模型是否在我的 FOV 之外渲染
- 玩转缩放
- 加载其他
.objs - 打印正在传递的变量,只是看到确实正在加载模型,只是没有显示
我试图不编码转储,因此行链接。如果您想要代码 sn-ps,请随时告诉我。至于为什么会这样,我有点迷失了。
编辑:
@Botje 建议我尝试以下方法:
-
modelLoading.frag[repo, line link] 应用红色而不是纹理,以尽量减少模型纹理出现问题的风险。无效。仍然没有模型。
void main( )
{
//color = vec4( texture( texture_diffuse, TexCoords ));
color = vec4( 1.0f, 0.0f, 0.0f, 1.0f);
}
- 在
model.h中,编辑cout << vertices.size() << endl;[repo, line link] 打印,这对于教程中的nanosuit.obj模型是正确的。我在那里有一颗行星,这不是教程的一部分,因此之前的0x106e6b000。我现在得到vertices.size():
156 15222 19350 78 6804 7248 8316
所以模型肯定在加载,只是没有渲染。问题一定是在模型加载之后渲染之前的某个地方。
【问题讨论】:
-
我不会依赖
vertices.data()为空数组的 NULL。最好检查.size() -
要尽可能多地排除其他因素,首先要修改片段着色器以分配平面颜色,而不是从纹理中读取。
color = vec4( 1.0f, 0.0f, 0.0f, 1.0f);如果这会在屏幕上产生红色形状,我认为您的问题可能在于您的片段着色器链接:modelLoading.frag需要texture_diffuse而 Mesh.h 第 87 行分配texture_diffuse1(请参见那里的“+ 号” .) -
@Botje 对问题进行了编辑。我应用了这两个建议,但到目前为止,窗口中没有显示任何内容。我还把教程中的“nanosuit.obj”扔了回去,它由多个部分组成。你可以在 repos res/models 中看到它。还是什么都没有。