目录
相关文章
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();
}