OpenGL系列之二:绘制三角形

目录

相关文章

OpenGL系列之一:OpenGL第一个程序

实现效果

实现步骤

这里是以之前的第一个程序(OpenGL系列之一:OpenGL第一个程序)为基础。

1.添加模型视图矩阵

在Java_com_itfitness_opengldemo_GLRender_ndkResizeGL中添加代码

//添加模型视图矩阵
glMatrixMode(GL_MODELVIEW);
//重置当前指定的矩阵为单位矩阵
glLoadIdentity();
2.定义顶点结构体

创建CCGLPrimitivesDef.h



定义用于绘制的顶点结构体

#ifndef OPENGLDEMO_CCGLPRIMITIVESDEF_H
#define OPENGLDEMO_CCGLPRIMITIVESDEF_H

struct CCFloat7{
    float x;
    float y;
    float z;
    float r;
    float g;
    float b;
    float a;
};
#endif //OPENGLDEMO_CCGLPRIMITIVESDEF_H
3.绘制三角形

在Java_com_itfitness_opengldemo_GLRender_ndkPaintGL函数中添加如下代码

    //定义三角型的点
    CCFloat7 vertexTriangle[] = {
            {-1,-0.7,0,1.0,0.0,0.0,1.0},
            {0,0.7,0,0.0,1.0,0.0,1.0},
            {1,-0.7,0,0.0,0.0,1.0,1.0},
    };

    //设置绘制颜色为绿色
    glColor4f(0.0,1.0,0.0,1.0);
    //启动一组顶点坐标
    glEnableClientState(GL_VERTEX_ARRAY);

    // 指定绘制的定点数组
    // 第一个参数:绘制几个点
    // 第二个参数:类型为float
    // 第三个参数:第一个点到第二个点之间的步长(也就是结构体的长度)
    // 第四个参数:绘制数据的地址
    glVertexPointer(3,GL_FLOAT,sizeof(CCFloat7),vertexTriangle);

    //绘制上面指定的数组
    // 第一个参数:从哪个开始
    // 第二个参数:绘制几个
    glDrawArrays(GL_TRIANGLES,0,3);

    //关闭一组顶点坐标
    glDisableClientState(GL_VERTEX_ARRAY);

最后再展示下完整的CCOpenGLRender.cpp文件内容

#include 
#include 
#include 
#include "CCGLPrimitivesDef.h"

extern "C"
JNIEXPORT void JNICALL
Java_com_itfitness_opengldemo_GLRender_ndkInitGL(JNIEnv *env, jobject thiz) {
    //清空颜色
    glClearColor(1.0,0,0,1.0);
    //清空深度缓存
    glClearDepthf(1.0);
    //开启深度测试
    glEnable(GL_DEPTH_TEST);
    //什么情况下使用深度测试
    glDepthFunc(GL_LEQUAL);
}
extern "C"
JNIEXPORT void JNICALL
Java_com_itfitness_opengldemo_GLRender_ndkPaintGL(JNIEnv *env, jobject thiz) {
    //清空颜色缓冲区或深度缓冲区
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    //定义三角型的点
    CCFloat6 vertexTriangle[] = {
            {-1,-0.7,0,1.0,0.0,0.0},
            {0,0.7,0,0.0,1.0,0.0},
            {1,-0.7,0,0.0,0.0,1.0},
    };

    //设置绘制颜色为绿色
    glColor4f(0.0,1.0,0.0,1.0);
    //启动一组顶点坐标
    glEnableClientState(GL_VERTEX_ARRAY);

    // 指定绘制的定点数组
    // 第一个参数:绘制几个点
    // 第二个参数:类型为float
    // 第三个参数:第一个点到第二个点之间的步长(也就是结构体的长度)
    // 第四个参数:绘制数据的地址
    glVertexPointer(3,GL_FLOAT,sizeof(CCFloat6),vertexTriangle);

    //绘制上面指定的数组
    // 第一个参数:从哪个开始
    // 第二个参数:绘制几个
    glDrawArrays(GL_TRIANGLES,0,3);

    //关闭一组顶点坐标
    glDisableClientState(GL_VERTEX_ARRAY);
}
extern "C"
JNIEXPORT void JNICALL
Java_com_itfitness_opengldemo_GLRender_ndkResizeGL(JNIEnv *env, jobject thiz, jint width,
                                                   jint height) {
    //设置窗口大小
    glViewport(0,0,width,height);
    //投影矩阵
    glMatrixMode(GL_PROJECTION);
    //重置投影矩阵
    glLoadIdentity();
    //摄像机
    glOrthof(-1,1,-1,1,0,1000);

    //添加模型视图矩阵
    glMatrixMode(GL_MODELVIEW);
    //重置当前指定的矩阵为单位矩阵
    glLoadIdentity();
}

你可能感兴趣的:(OpenGL系列之二:绘制三角形)