OpenGL 基本图元

2020-07-18  本文已影响0人  徐徐图之哈哈

基本图元

截屏2020-07-13 17.55.48.png

基本图元事例

2500437-13ab305aadd4e3d2.png

void glPointSize(GLfloat size)
注意:并不是所有的点的大小都能够支持的,应该先确认指定点大小是否可用(用以下函数获得点大小的范围及它们之间的最小间隔)
GLfloat sizes[2];//存储支持的点大小范围
GLfloat step;//存储支持的点大小增量

//获取支持的点大小范围和步长(增量)
glGetFloatv(GL_POINT_SIZE_RANCE,sizes);
glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);

线

void glLineWidth(GLfloat width);

注意:

三角形

单独的三角形

1.png

环绕

2.png

注意:

//此函数可以改变以上的默认行为
glFrontFace(GL_CW);
GL_CW(此参数告诉OpenGL顺时针环绕的多边形将被认为是正面)
GL_CCW(此参数把多边形的正面重新恢复为逆时针环绕)

三角形带

3.png

思考:为什么使用三角形带而不分别指定每个三角形?

三角形扇

4.png

简单批次容器

注意:
OpenGL内部运行机制实际上比这要复杂得多(GLBatch类只是一个便利类)

GLTools使用

1.对批次进行初始化
//包含那种类型图元,顶点数,(可选)一组或二组纹理坐标
void GLBatch::Begin(GLenum primitive, GLuint nVerts, GLuint nTextureUnits = 0);

2.至少要复制一个由3个分量(x,y,z)顶点组成的数组
void GLBatch::CopyVertexData3f(GLfloat *vVerts);
//也可以复制表面法线,颜色和纹理坐标
void GLBatch::CopyNormalDataf(GLfloat *vNorms);
void GLBatch::CopyColorData4f(GLfloat *vColors);
void GLBatch::CopyTexCoordData2f(GLfloat *vTex, GLuint uiTextureLayer);
3.最后结束
void GLBatch::Draw(void);
上一篇 下一篇

猜你喜欢

热点阅读