gpt4 book ai didi

c++ - 使用 OpenGL 绘制点数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:26 25 4
gpt4 key购买 nike

为什么在这个程序中由 glVertex3f 绘制的四个点在指定的位置渲染,而不是四个数组点在窗口中心只渲染一个?

#include <GL/glew.h>
#include <GL/glut.h>

#include <iostream>
#include <vector>

using namespace std;

struct point3 {
GLfloat x, y, z;
};

vector<point3> Vertices(4);

void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
GLuint abuffer;
glGenVertexArrays(1, &abuffer);
glBindVertexArray(abuffer);
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
Vertices = {{0.3f, 0.3f, 0.5f}, {0.6f, 0.6f, 0.5f}, {0.6f, 0.3f, 0.5f}, {0.3f, 0.6f, 0.5f}};
glBufferData(GL_ARRAY_BUFFER, Vertices.size() * sizeof(Vertices[0]), &Vertices[0], GL_STATIC_DRAW);
glVertexPointer(3, GL_FLOAT, 0, &Vertices[0]);
glDrawArrays(GL_POINTS, 0, Vertices.size());
glFlush();
glBegin(GL_POINTS);
glVertex3f(0.25f, 0.25f, 0.5f);
glVertex3f(0.25f, 0.75f, 0.5f);
glVertex3f(0.75f, 0.75f, 0.5f);
glVertex3f(0.75f, 0.25f, 0.5f);
glEnd();
glFlush();
}

void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

}

int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(0, 0);
glutCreateWindow("simple OpenGL example");
glutDisplayFunc(display);
GLenum err = glewInit();
if (GLEW_OK != err) {
cerr << "Error: " << glewGetErrorString(err) << endl;
}
cout << "Status: Using GLEW" << glewGetString(GLEW_VERSION) << endl;
init();
glutMainLoop();
}

最佳答案

您尚未启用该属性以实际使用该数组。你这样做:

  • (OpenGL 2) glEnableClientState(GL_VERTEX_ARRAY)(或 GL_COLOR_ARRAY 等)
  • (OpenGL 3) glEnableVertexArray(attributeId)

否则,您使用 glVertexPointer (GL2) 或 glVertexAttribPointer (GL3) 指向的内容将不会被实际使用。

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

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