小总
来源:互联网 发布:制作社交网络 纪录片 编辑:程序博客网 时间:2024/03/29 13:31
opengl是一个状态机,状态机的意思就是只要打开某种状态(使用glEnable()打开),后面将一直使用这种状态,知道调用glDisable()关闭状态。每种状态都有相应的初始化的过程,比如光照,设置环境光,漫反射光,镜面反射光等,这些工作可以在初始化opengl的时候进行,但直到调用glEnable(GL_LIGHTING),才可以使用关照,也就是说什么时候想用了,如果已经进行了初始化,只需在任何你想用的地方调用glEnable(GL_LIGHTING)即可。
下面是在opengles下的小旗飘飘的效果的实现:
GLfloat m_FlagVertex[100][38][3];
GLfloat m_FlagTexCoord[100][38][2];
void Init()
{
int i,j;
for (j = 0; j < 19; j++)
{
for (i = 0; i < 100; i++)
{
m_FlagVertex[i][j * 2][0] = float(float(j) / 2.0f - 4.5f);
m_FlagVertex[i][j * 2][1] = float((float(i + 1) / 20.0f) - 2.5f);
m_FlagVertex[i][j * 2][2] = float(sin((((j / 3.0f) * 60.0f) / 360.0f) * 3.141592 * 2.0f));
m_FlagTexCoord[i][j * 2][0] = float(float(j) / 18.0f);
m_FlagTexCoord[i][j * 2][1] = float(float(i + 1) / 99.0f);
m_FlagVertex[i][j * 2 + 1][0] = float(float(j) / 2.0f - 4.5f);
m_FlagVertex[i][j * 2 + 1][1] = float((float(i) / 20.0f) - 2.5f);
m_FlagVertex[i][j * 2 + 1][2] = float(sin((((j / 3.0f) * 60.0f) / 360.0f) * 3.141592 * 2.0f));
m_FlagTexCoord[i][j * 2 + 1][0] = float(float(j) / 18.0f);
m_FlagTexCoord[i][j * 2 + 1][1] = float(float(i) / 99.0f);
}
}
}
void DrawFlag()
{
static GLfloat rot = 0.0f;
rot ++;
int i,j;
for (j = 0; j < 18; j ++)
{
for (i = 0; i < 100; i++)
{
hold1 = m_FlagVertex[i][0][2];
hold2 = m_FlagVertex[i][1][2];
m_FlagVertex[i][j * 2][2] = m_FlagVertex[i][(j + 1) * 2][2];
m_FlagVertex[i][j * 2 + 1][2] = m_FlagVertex[i][(j + 1) * 2 + 1][2];
m_FlagVertex[i][36][2] = hold1;
m_FlagVertex[i][37][2] = hold2;
}
}
glPushMatrix();
glLoadIdentity();
glTranslatef(m_Trans[0], m_Trans[1], m_Trans[2]);
glRotatef(rot, 1.0f, 0.0f, 0.0f);
glRotatef(rot, 0.0f, 1.0f, 0.0f);
glRotatef(rot, 0.0f, 0.0f, 1.0f);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_Texture);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, m_FlagVertex);
glTexCoordPointer(2, GL_FLOAT, 0, m_FlagTexCoord);
for (GLuint k = 0; k < POINTNUM; k++)
{
glVertexPointer(3, GL_FLOAT, 0, m_FlagVertex[k]);
glTexCoordPointer(2, GL_FLOAT, 0, m_FlagTexCoord[k]);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 38);//这个地方应该注意
}
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
- 小总
- DataList控件 小总
- 压缩-解压小总
- 数据结构小总
- js小总
- iptable小总
- 【C#】小总
- 小总1·
- VB.NET小总
- SSH 小总
- jBoot小总
- EL表达式小总
- Maven小总
- Python小爬虫小总
- VB.NET视频小总
- 路径问题小总,待续
- 路径问题小总,待续
- 3.30-4.3 知识小总
- 软件作品
- 经典C#面试题集锦(一)
- 排序算法思想解析
- 在Ubuntu9.04上构建crosstool环境
- GL基本账务处理流程
- 小总
- [CTO札记]上海技术英雄会摘要
- jquery 的扩展真是越来越多 UI做的也不错,推荐一个网站
- Linux+Nginx+Php架设高性能WEB服务器(总结)
- MOSS 对象模型的简单开发DEMO
- POSIX.1 and ISO C标准头文件
- 关键字云雾(keyword cloud)
- oralce按照分隔符导出数据function方法
- 不规则窗体小技巧