gpt4 book ai didi

c++ - 使用 VBO 的 OpenGL 绘图

转载 作者:行者123 更新时间:2023-11-28 03:14:16 25 4
gpt4 key购买 nike

我正在尝试编写一个小的 Opengl 程序来仅使用顶点缓冲区对象(不使用 VAO)绘制单个三角形,但是每当我想编译它时,它只会显示蓝屏

这是我的代码

#include <iostream>
#include <GLUT/glut.h>
#include <OpenGL/gl3.h>

GLuint VBO;
GLuint VAO;

void display();

float vertex[] = {-1.0, 0.0 , 0.0,
0.0 , 1.0 , 0.0 ,
1.0 , 0.0 , 0.0 };

int main (int argc, char *argv[])

{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE);
glutInitWindowSize(1000, 400);
glutInitWindowPosition(100, 100);
glutCreateWindow("My First GLUT/OpenGL Window");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}

void display()

{
glClearColor(0, 0, 1,1);
glClear(GL_COLOR_BUFFER_BIT);

glGenBuffers(1,&VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER,9 *sizeof(vertex),vertex, GL_STATIC_DRAW);

glEnableVertexAttribArray(0);

glVertexAttribPointer(0, 3,GL_FLOAT, GL_TRUE, 0, 0);


glDrawArrays(GL_TRIANGLES, 0, 3);

glDisableVertexAttribArray(0);

glutSwapBuffers();
};

最佳答案

三个问题:

  • 您的代码没有设置视口(viewport)(如果窗口恰好以 0×0 的大小创建并且稍后才调整大小,则初始视口(viewport)大小将为 0×0)。

  • 您对 sizeof 运算符的使用是错误的。 vertex 是静态分配的数组,因此 sizeof 运算符将返回顶点数组的总大小,而不仅仅是单个元素的大小。因此,在这种特殊情况下,只需 sizeof(vertex) 而不将其乘以 9 就足够了。

最后但同样重要的是,问题的真正原因:

  • 你的着色器在哪里?使用通用顶点属性,当然 OpenGL-3 强制要求您必须提供顶点和片段着色器的有效组合。没有这些,什么都不会呈现。

关于c++ - 使用 VBO 的 OpenGL 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17436029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com