openGL学习笔记02--绘制顶点

xiaoxiao2021-02-28  48

// tutorial2.cpp : 定义控制台应用程序的入口点。 /* 这里一定要注意include的顺序 #include "stdafx.h"一定要放在最顶端! #include <GL/glew.h>一定要放在#include <GL/freeglut.h>之前!! */ #include "stdafx.h" #pragma comment(lib, "glew32.lib") #include <GL/glew.h> #include <ogldev_math_3d.h> #include <GL/freeglut.h> GLuint VBO;//定义一个全局的GLuint引用变量,来操作顶点缓冲器对象--GLuint 就是正整形,和C里面的unsigned int 一样 static void RenderSceneCB(){ glClear(GL_COLOR_BUFFER_BIT);//清空颜色缓存 glEnableVertexAttribArray(0);//开启顶点属性 glBindBuffer(GL_ARRAY_BUFFER, VBO);//绑定缓冲区 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);//管线如何在缓冲区内部解释数据,第一个参数指定索引,第二个参数构成属性的分量个数(X,Y,Z共3个)第三个参数指定每个分量的数据类型 第四个指定在管线使用前是否与要规范化 第五个参数表示两个相同属性的间隔(步长) 第六个参数缓存区中存储数据的偏移值 glDrawArrays(GL_POINTS, 0, 2);绘制 第一个参数:绘制类型为gl_points 画点,第二个参数 第一个顶点的索引值 第三个参数 画点个数, glDisableVertexAttribArray(0);//当不需要使用顶点时 禁用顶点 glutSwapBuffers(); } static void CreateVertexBuffer() { // 创建含有一个顶点的顶点数组 Vector3f Vertices[2]; // 画两个点 Vertices[0] = Vector3f(0.0f, 0.0f, 0.0f); Vertices[1] = Vector3f(0.1f, 0.1f, 0.1f); // 创建缓冲器---glGenBuffers(NUM_BUFFER,buffers); glGenBuffers(1, &VBO); // 绑定GL_ARRAY_BUFFER缓冲器 glBindBuffer(GL_ARRAY_BUFFER, VBO); //填充buffer数据 gl_static_draw/gl_dynamic_draw 指定画的方式 glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW); } int main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); glutInitWindowSize(1024, 768); glutInitWindowPosition(100, 100); glutCreateWindow("Tutorial 02"); glutDisplayFunc(RenderSceneCB); GLenum res = glewInit(); if (res != GLEW_OK){ fprintf(stderr, "Error '%s'\n", glewGetErrorString(res)); return 1; } // 缓存清空后的颜色值 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 创建顶点缓冲器 CreateVertexBuffer(); // 通知开始GLUT的内部循环 glutMainLoop(); return 0; }
转载请注明原文地址: https://www.6miu.com/read-2628677.html

最新回复(0)