c++ - OpenGL ES 绘制形状
问题描述
我正在学习 OpenGL ES 来渲染原生 android 开发。我可以画一个三角形。但是我不能画一个以上的三角形。我只想绘制一个矩形,但是如果我告诉 glVertexPointer 函数超过 3 个顶点,那么它就不会绘制。我尝试使用 GL_TRIANGLES 和 GL_TRIANGLE_STRIP。
我究竟做错了什么?
struct Quad
{
GLfloat Vertices[18];
const GLbyte nNumVerts;
Quad(GLfloat i_fWidth, GLfloat i_fHeight) : nNumVerts(6)
{
GLfloat wide = i_fWidth / 2;
GLfloat high = i_fHeight / 2;
Vertices[0] = -wide; Vertices[1] = high; Vertices[2] = 0.0f;
Vertices[3] = -wide; Vertices[4] = -high; Vertices[5] = 0.0f;
Vertices[6] = wide; Vertices[7] = -high; Vertices[8] = 0.0f;
Vertices[9] = -wide; Vertices[10] = high; Vertices[11] = 0.0f;
Vertices[12] = wide; Vertices[13] = -high; Vertices[14] = 0.0f;
Vertices[15] = wide; Vertices[16] = high; Vertices[17] = 0.0f;
}
};
void Renderer::Render()
{
glClear(GL_COLOR_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
// If I change "m_Quad.nNumVerts" to '3' instead of '6' it will draw a triangle
// Anything higher than '3' and it doesn't draw anything
glVertexPointer(m_Quad.nNumVerts, GL_FLOAT, 0, m_Quad.Vertices);
glDrawArrays(GL_TRIANGLES, 0, m_Quad.nNumVerts);
eglSwapBuffers(m_pEngine->pDisplay, m_pEngine->pSurface);
}
解决方案
的第一个参数glVertexPointer
是每个顶点的值的数量,3
在这种情况下应该保留。
glVertexPointer(3, GL_FLOAT, 0, m_Quad.Vertices);
推荐阅读
- python - Google Cloud Video Intelligence 以编程方式检查每月免费使用情况
- swift - 在 SwiftUI 中为日记应用程序制作日期查看器的解决方案
- reactjs - 如何根据键从 Typescript 中的 Dictionary 数据结构中删除一个条目?
- r - 使用数字数据在 ggplot 中制作条形图
- python - Gunicorn Workers 对性能没有影响
- laravel - Laravel-phpunit 测试抛出错误 - 没有活动事务
- hive - 如何将 01/23/2020 11:37:23 PM 更改为 ISO 日期格式
- algorithm - 这些嵌套循环的大 O 是什么
- entity-framework - 如何在 Entity Framework Core 中创建运行时迁移
- php - 测试 API 调用,它调用另一个 URL