glDrawArrays在gl_triangle模式下不绘制任何东西
glDrawArrays does not draw anything in GL_TRIANGLES mode
我的问题是glDrawArray
命令停止工作。我写过几个程序,都用过这个命令。然而现在,我不知道为什么它不起作用。
但我仍然可以用GL_LINES
而不是GL_TRIANGLES
在屏幕上画线。
#include "Mesh.h"
#include <iostream>
Mesh::Mesh()
{
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &vbo);
size = 0;
}
void Mesh::AddVertices(const Vertex vertices[], int length)
{
size = length;
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
}
void Mesh::Draw()
{
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, Vertex::SIZE * 4, 0);
glDrawArrays(GL_TRIANGLES, 0, size);
glDisableVertexAttribArray(0);
}
Draw总是被Game类调用。我的顶点类:
#include "Vertex.h"
Vertex::Vertex(glm::vec3 pos)
{
this->pos = pos;
}
Vertex::Vertex(float x, float y, float z)
{
pos = glm::vec3(x, y, z);
}
glm::vec3 Vertex::GetPos() const
{
return pos;
}
void Vertex::SetPos(glm::vec3 pos)
{
this->pos = pos;
}
sizeof(vertices)
是sizeof(void*)
,因为在C或c++数组中的函数参数衰减为指针。您应该使用第二个参数中提供的length
,如果它的大小为字节。
我找到解决办法了。当我初始化我的OpenGL函数时,我意外地写了glFrontFace(GL_CW)
而不是glFrontFace(GL_CCW)
。
相关文章:
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 使用 glDepthFunc(GL_GREATER) 不会绘制任何内容
- OpenGL 3.3不能绘制任何东西
- DirectX不绘制任何内容
- OpenGL + SDL + glew 在成功初始化后不会绘制任何内容
- 为什么我的 openGL 顶点缓冲区对象不会绘制任何内容?
- Opengl 3.3 不会绘制任何东西。使用 GLSL 330 内核
- OpenGL - 重新绑定 glBindVertexArray 不会在屏幕上绘制任何内容
- 如何将顶点位置传递给顶点着色器.我写了一个着色器,它不会在屏幕上绘制任何内容
- glDrawElements不绘制任何东西
- OpenGL着色器没有绘制任何东西:/
- Android NDK中的OpenGL ES 2.0:没有绘制任何内容
- 为什么我的OpenGL 3.3应用程序没有绘制任何内容
- C++ + glut + OpenGL + gluSphere 不绘制任何东西
- 尝试将着色器与 Win32 OpenGL 一起使用,但顶点着色器不绘制任何内容
- glDrawArrays在gl_triangle模式下不绘制任何东西
- 在Android上使用gles2.0 egl ative活动时不会绘制任何内容
- DirectX:屏幕上没有绘制任何内容
- 无法使用GLEW(mac,c ++)在openGL中绘制任何内容
- Qt5应用程序不会在Ubuntu上绘制任何窗口