二 、OpenGL初绘制四边形

2020-07-21  本文已影响0人  A慢慢懂

第一个OpenGL绘制的在红色的背景上绘制一个蓝色的四边形。程序的输出的结果如下。


第一个程序输出结果.png

代码如下:

#include <stdio.h>
#include "GLTools.h"
#include <glut/glut.h>
GLBatch triangleBatch;
GLShaderManager shaderManager;
//窗口大小改变时接受新的宽度和高度,其中0,0代表窗口中的左下角坐标,w,h代表像素
void ChangeSize(int w,int h)
{
    glViewport(0,0, w, h);
}
//为程序作为一次性的设置
void SetupRC()
{
    //设置背景颜色
    glClearColor(1.0f,0.0f,0.0f,1.0f);
    //初始化着色管理器
    shaderManager.InitializeStockShaders();
    //设置三角形,其中数组vVert包含
    GLfloat vVerts[] = {
        -0.5f,0.0f,0.0f,
        0.5f,0.0f,0.0f,
        0.0f,0.5f,0.0f,
        -0.5f,0.0f,0.0f,
        0.5f,0.0f,0.0f,
        0.0f,-0.5f,0.0f,
    };
    //批次处理
    triangleBatch.Begin(GL_TRIANGLES, 6);
    triangleBatch.CopyVertexData3f(vVerts);
    triangleBatch.End();
    //     GLfloat vVerts2[] = {
    //     -0.5f,0.0f,0.0f,
    //    0.5f,0.0f,0.0f,
    //         0.0f,-0.5f,0.0f,
    //          };
    //        //批次处理
    //        triangleBatch.Begin(GL_TRIANGLES, 3);
    //        triangleBatch.CopyVertexData3f(vVerts2);
    //        triangleBatch.End();
}
//开始渲染
void RenderScenen(void){
    //清除一个或一组特定的缓冲区
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
    //设置一组浮点数来表示红色
    GLfloat vRed[] = {0.0f,0.0f,1.0f,1.0f};
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
    triangleBatch.Draw();
    glutSwapBuffers();
}
int main(int argc,char* argv[])
{
    
    gltSetWorkingDirectory(argv[0]);
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
    
    glutInitWindowSize(600,600);
    glutCreateWindow("Triangle");
    
    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScenen);
    
    GLenum err = glewInit();
    if(GLEW_OK != err) {
        fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
        return 1;
    }
    SetupRC();
    glutMainLoop();
    return 0;
    
}

- 包含的头文件

一般在编写程序之前,都会需要函数和类定义的头文件。此次OpenGL包含了

#include <stdio.h>
#include "GLTools.h"
#include <glut/glut.h>

GLTools包含了大部分GLTools的独立函数。glut/glut.h则适用于APPLE平台中。

- 启动GLUT

一般main函数都是程序的入口

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

设置当前工作目录
gltSetWorkingDirectory(argv[0]);
初始化GLUT库
glutInit(&argc, argv);
然后再告诉GLUT库,创建窗口使用那种类型的显示模型
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
GLUT_DOUBLE为双缓冲窗口,
GLUT_RGBA为RGBA颜色模式,
GLUT_DEPTH为深度测试,
GLUT_STENCIL为模版测试。
接下来窗口大小和以Triangle为标题的窗口。

glutInitWindowSize(600,600);
glutCreateWindow("Triangle");

然后为窗口改变大小设置一个回调函数,再注册一个函数以包含OpenGL渲染代码

glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScenen);

在做渲染之前,检查确定驱动程序的初始化没有出现任何问题。

GLenum err = glewInit();
    if(GLEW_OK != err) {
        fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
        return 1;
    }

最后一项工作就是调用SetupRC。在这里可以进行渲染。

SetupRC();

最后,主循环结束并结束main函数。

上一篇下一篇

猜你喜欢

热点阅读