- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 VBO 呈现我存储的数据。然而,实际上并没有渲染任何东西,尽管 glGetError() 没有抛出任何错误;
void Model::initDrawing()
{
glewInit();
glGenBuffers(1, &_bufferID);
glBindBuffer(GL_ARRAY_BUFFER, _bufferID);
const GLsizeiptr vertex_size = sizeof(_modelMesh->vertices);
const GLsizeiptr normal_size = sizeof(_modelMesh->vertices);
glBufferData(GL_ARRAY_BUFFER, vertex_size+normal_size, 0, GL_STATIC_DRAW);
GLvoid * vbo_buffer = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
memcpy(vbo_buffer, &_modelMesh->vertices[0], vertex_size);
vbo_buffer += vertex_size;
memcpy(vbo_buffer, &_modelMesh->normals[0], normal_size);
glUnmapBuffer(GL_ARRAY_BUFFER);
glVertexPointer(4, GL_FLOAT, 0, (GLvoid*)((char*)NULL));
glNormalPointer(GL_FLOAT, 0, (GLvoid*)((char*)NULL+vertex_size));
}
void Model::draw()
{
glBindBuffer(GL_ARRAY_BUFFER, _bufferID);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glDrawElements(GL_TRIANGLE_STRIP, _modelMesh->vertices.size(), GL_UNSIGNED_INT, (GLvoid*)((char*)NULL));
GLenum err;
while ((err = glGetError()) != GL_NO_ERROR)
{
cerr << "OpenGL error: " << err << endl;
}
}
其中 Mesh *_modelMesh
由(除其他外)组成:
std::vector<Vertex4f> vertices;
std::vector<Normal3f> normals;
它们只是 GLfloat
类型的 vector :
typedef struct _vertex4f {
Vertex3f vertex;
GLfloat weight;
} Vertex4f;
typedef struct _vertex3f {
GLfloat x, y, z;
} Vertex3f;
定义 vector 和法线是否足以进行绘图?
我在渲染时也使用了光。
最佳答案
一方面,您的位置和法线大小不正确。
它们的大小应该类似于 _modelMesh->vertices.size () * sizeof (GLfloat) * 4
和 _modelMesh->normals.size () * sizeof (GLfloat) * 3
分别。它们的大小不同。
您也不想使用 sizeof (_modelMesh->vertices)
,因为 vertices
是一个模板化容器。这不会给你它包含的元素的大小,只是实例化的大小 std::vector <Vertex4f>
对象(可能是几个指针)。
最后,我在这段代码中没有看到任何地方将任何内容绑定(bind)到 GL_ELEMENT_ARRAY_BUFFER
.
同样,glBindBuffer(GL_ARRAY_BUFFER, _bufferID);
在 Model::draw (...)
中没有必要,因为唯一一次绑定(bind)到 GL_ARRAY_BUFFER
的东西重要的是你什么时候打电话gl...Pointer (...)
.从那时起,如果有任何内容绑定(bind)到GL_ARRAY_BUFFER
,那么什么都没有关系。 ;它的唯一目的是告诉 Pointer 命令指针相对于哪个缓冲区的内存。
关于c++ - VBO什么都不画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970598/
我想以 headless 模式(屏幕上根本没有 GUI)将 JPanel 绘制到 BufferedImage 中。 final JPanel panel = createPanel(); panel.
我是 Canvas 的新手,正在尝试创建看起来逼真的 float 粒子动画。 目前,我正在创建 400 个随机散布在 400x400 Canvas 上的粒子。 然后,在每个 requestAnimat
有没有办法在悬停时停止悬 float 画? :hover 这是一个显示动画的链接: https://codepen.io/youbiteme/pen/RprPrN 最佳答案 只需为您的 svg 悬停添
我想在谷歌地图上绘制覆盖图,其中除了特定点周围 1.5 公里半径以外的所有内容都被遮蔽了。为此,我尝试使用带有大量边框的圆圈,所以我会在边框中放置透明中心和覆盖颜色来实现这一点,但它无法渲染。
我正在尝试通过扩展类 UIView 来创建自定义 View ,该类可以在自定义 View 的中心显示一个圆圈。为了添加自定义绘图,我重写了 draw(_ rect: CGRect) 方法,如下所示。
我是一名优秀的程序员,十分优秀!