c++ - 使用一个 glDrawArrays 命令绘制多个不同颜色的三角形
问题描述
我正在尝试在 OpenGL 中编写一些东西,我是一个初学者,对我犯的任何错误感到抱歉。
一般来说,我只想绘制两个不同颜色的三角形,我使用以下代码:
float vertices[] = {
-0.5f, -0.6f, 0.0f,
0.5f, -0.6f, 0.0f,
0.4f, 0.5f, 0.0f,
0.5f, 0.6f, 0.0f,
-0.5f, 0.6f, 0.0f,
-0.4f, -0.5f, 0.0f
};
void display() {
std::cout << "frame";
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set background color to black and opaque
glClear(GL_COLOR_BUFFER_BIT); // Clear the color buffer
// activate and specify pointer to vertex array
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertices);
// draw a cube
glColor3f(1.0f, 0.0f, 0.0f); // Red
glDrawArrays(GL_TRIANGLES, 0, 3);
//glColor3f(0.0f, 1.0f, 0.0f); // Green
glDrawArrays(GL_TRIANGLES, 3, 3);
glDisableClientState(GL_VERTEX_ARRAY);
glFlush(); // Render now
}
int main(int argc, char** argv) {
glutInit(&argc, argv); // Initialize GLUT
glutCreateWindow("OpenGL Setup Test"); // Create a window with the given title
glutInitWindowSize(320, 320); // Set the window's initial width & height
glutInitWindowPosition(50, 50); // Position the window's initial top-left corner
glutDisplayFunc(display); // Register display callback handler for window re-paint
glutMainLoop(); // Enter the infinitely event-processing loop
return 0;
}
现在..如果我. 想用我可以做的同一个命令绘制两个三角形
glDrawArrays(GL_TRIANGLES, 0, 6);
但随后它以相同的颜色绘制两个三角形。
有没有办法通过仍然只使用一个glDrawArrays()
命令以不同的颜色绘制每个三角形?
如果没有..还有其他命令我应该去吗?
谢谢你
解决方案
在glDrawArrays 的描述中是这样写的:
无需调用 GL 过程来传递每个单独的顶点属性,您可以使用 glVertexAttribPointer 来预先指定单独的顶点、法线和颜色数组,并使用它们通过一次调用 glDrawArrays 来构造图元序列。
那是你的解决方案吗?
推荐阅读
- javascript - Axios GET 调用在浏览器中有效,但在 Axios 中无效
- c# - 无法从 C# 调用非托管 C++
- objective-c - Objective-C:使 TextView 从顶部而不是底部展开
- html - CSS纵横比覆盖图像断点?
- ubuntu - MonoDevelop 缺少文件“Microsoft.CSharp.Core.targets”
- r - 允许用户以闪亮的方式上传 shapefile
- javascript - 在同一行的 2 个字段之间添加空格
- arrays - 如何将数据从对象传递给mongo中的其他对象
- java - Android / Firebase 实时数据库 - onChildRemoved 运行每个查询删除
- visual-studio-code - 为什么 vscode 会查看 node_modules 的本地 appdata?