当我试图用EOB显示.obj时,OpenGL崩溃了
OpenGL crash when i try to display a .obj with EOB
我正在制作一个3D对象查看器,我认为这是一个非常基本的opengl程序。但是我是opengl的新手,我发现了一个我无法解决的问题。
我使用的最后一个教程在这里:LearnOpenGL因此,我将显示的代码是从那里(模型加载部分),我使用Assimp加载对象。
有一些代码:
网格设置:
struct Vertex {
glm::vec3 position;
glm::vec3 normal;
glm::vec2 texCoords;
};
glGenVertexArrays(1, &this->m_VAO);
glGenBuffers(1, &this->m_VBO);
glGenBuffers(1, &this->m_EBO);
glBindVertexArray(this->m_VAO);
glBindBuffer(GL_ARRAY_BUFFER, this->m_VBO);
glBufferData(GL_ARRAY_BUFFER, this->m_vertices.size() * sizeof(Vertex),
&this->m_vertices[0], GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, this->m_EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, this->m_indices.size() * sizeof(GLuint),
&this->m_indices[0], GL_STATIC_DRAW);
// Vertex Positions
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)0);
// Vertex Normals
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, normal));
// Vertex Texture Coords
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, texCoords));
glBindVertexArray(0);
您可以在网站上查看完整的代码
画:
// Draw mesh
glBindVertexArray(model.get_VAO());
glDrawElements(GL_TRIANGLES, model.get_Indices_Size(), GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
着色器:
顶点——>
#version 130
in vec4 gxl3d_Position;
in vec4 gxl3d_Color;
smooth out vec4 VertexColor;
void main() {
gl_Position = gxl3d_Position;
VertexColor = vec4(0.5f, 0.0f, 0.0f, 1.0f);
}
片段->
#version 130
smooth in vec4 VertexColor;
void main() {
gl_FragColor = VertexColor;
}
当我运行这个,我可以检查从Assimp的最后一个顶点是不一样的,当我直接读取。obj,也许它是正常的?
所以最后我到达了一个"nouveau failed idel channel 0xcccc0000 Xorg 677"
如果有人有任何想法,谢谢!
在网格设置中有一件事是错误的。
// Vertex Positions
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)0);
// Vertex Normals
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, normal));
// Vertex Texture Coords
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex),
(GLvoid*)offsetof(Vertex, texCoords));
应该在
之后glBindBuffer(GL_ARRAY_BUFFER, this->m_VBO);
glBufferData(GL_ARRAY_BUFFER, this->m_vertices.size() * sizeof(Vertex),
&this->m_vertices[0], GL_STATIC_DRAW);
当VBO被绑定时,否则将属性指针设置为EBO而不是VBO。
如果你没有理由使用旧的GLSL版本,你应该把它调到330左右,并在vec3位置使用layout(location = 0)。
访问normal的实例:
#version 330
layout(location = 1) in vec3 normals;
etc
关于assimp我不知道。
祝你好运
相关文章:
- OpenGL 在 VMWare Fusion 版本 10.1.3 上安装的虚拟机 (Ubuntu 16.04) 上崩溃
- 使用 OpenGL 绘制 8 x 15 矩形网格C++ - 崩溃
- EGL 在第一次 opengl 函数调用时崩溃
- OpenGL在使用GLEW时崩溃
- OpenGL因大量计算而崩溃
- 创建OpenGL 4.3上下文崩溃GLX
- OpenGL 应用程序在启动时立即崩溃
- 带有OpenGL(freeglut)的SDL在调用glutBitmapCharacter时崩溃
- SDL_ttf和OpenGL正在输出看似随机的垃圾和崩溃
- OpenCL-绘制到OpenGL纹理崩溃
- OpenGL - 重新排序渲染方法后崩溃
- OpenGL glMultiDrawElements 在索引偏移量上崩溃
- C++ - OpenGL 在 glDrawElements() 上崩溃
- opengl 程序在 glBegin(GL_QUADS) 上崩溃
- OpenGL在尝试渲染高度图时在glDrawElements上崩溃
- 调用OpenGL函数时程序崩溃
- 当我试图用EOB显示.obj时,OpenGL崩溃了
- 对OpenGL中着色器的行为感到困惑——切换声明会导致错误和崩溃
- SDL OpenGL应用程序在发布模式下崩溃
- Opengl程序样本崩溃