glLoadIdentity()
// 重置当前的模型观察矩阵调用,glLoadIdentity()之后,您实际上将当前点移到了屏幕中心。
glTranslatef(x, y, z) // 沿着 X, Y 和 Z 轴移动。
glTranslatef(-1.5f,0.0f,-6.0f);
//沿着X轴左移1.5个单位,Y轴不动(0.0f),最后移入屏幕6.0f个单位
当您用函数移动的时候,您并不是相对屏幕中心移动,而是相对与当前所在的屏幕位置。
画多边形过程:
glBegin(GL_TRIANGLES) 的意思是开始绘制三角形
……
它们之间的点都是以三点为一个集合的,这同样适用于四边形GL_QUADS。
glVertex 的第一个参数是X坐标,然后依次是Y坐标和Z坐标。
第一个点是上顶点,然后是左下顶点和右下顶点。
glEnd() 告诉OpenGL三角形已经创建好了。
色彩值:
色彩值的范围从0.0f到1.0f。0.0f代表最黑的情况,1.0f就是最亮的情况。glClearColor 后的第一个参数是Red Intensity(红色分量),第二个是绿色,第三个是蓝色。
glColor3f(r,g,b)。括号中的三个参数依次是红、绿、蓝三色分量。
旋转角度:
GLfloat rtri; // 定义用于三角 形的角度
GLfloat rquad; // 定义用于四边形的角 度
glRotatef(Angle,Xvector,Yvector,Zvector) //负 责让对象绕某个轴旋转。
rtri+=0.2f; // 增 加三角形的旋转变量(速度)—置于参数Angle中
rquad-=0.15f; // 减少 四边形的旋转变量
加载图像:
图像的宽和高必须是2的n次方;宽度和高度最小必须是64象素;并且出于兼容性的原因,图像的宽度和高度不应超过256象素。如果您的原始素材 的宽度和高度不是64,128,256象素的话,使用图像处理软件重新改变图像的大小。可以肯定有办法能绕过这些限制,但现在我们只需要用标准的纹理尺 寸。
AUX_RGBImageRec *LoadBMP(char *Filename) // 载 入位图图象
{
FILE *File=NULL; // 文件句柄
if (!Filename) // 确保文件名已提供
{return NULL;} // 如果没提供,返回 NULL
File=fopen(Filename,"r"); // 尝试打开文件
if (File) // 文件存在么?
{
fclose(File); // 关闭句 柄
return auxDIBImageLoad(Filename); // 载 入位图并返回指针
}
return NULL; // 如果载入失败,返回 NULL
}
int LoadGLTextures() // 载 入位图(调用上面的代码)并转换成纹理
{
int Status=FALSE; // 状态指示器
AUX_RGBImageRec *TextureImage[1]; // 创建纹理的存储空间
memset(TextureImage,0,sizeof(void *)*1); // 将指针设为 NULL
// 载入位图,检查有无错误,如果位图没找到则退出
if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))
{
Status=TRUE; // 将 Status 设为 TRUE
glGenTextures(1, &texture[0]); // 创建一个纹理
// 使用来自位图数据生成 的典型纹理
glBindTexture(GL_TEXTURE_2D, texture[0]);
// 生成纹理
glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
//上面一行告诉OpenGL 此纹理是一个2D纹理 ( GL_TEXTURE_2D )。参数“0”代表图像的详细程度,通常就由它为零去了。参数三是数据的成分数。因为图像是由红色数据,绿色数据,蓝色数据三种组分组成。 TextureImage[0]->sizeX 是纹理的宽度。如果您知道宽度,您可以在这里填入,但计算机可以很容易的为您指出此值。 TextureImage[0]->sizey 是纹理的高度。参数零是边框的值,一般就是“0”。 GL_RGB 告诉OpenGL图像数据由红、绿、蓝三色数据组成。GL_UNSIGNED_BYTE 意味着组成图像的数据是无符号字节类型的。最后... TextureImage[0]->data 告诉OpenGL纹理数据的来源。此例中指向存放在 TextureImage[0] 记录中的数据。
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}
if (TextureImage[0]) // 纹理是否 存在
{
if (TextureImage[0]->data) // 纹理图像是否存在
{
free(TextureImage[0]->data); // 释放纹理图像占用的内 存
}
free(TextureImage[0]); // 释放图像结构
}
return Status; // 返回 Status
}
绘制贴图(纹理映射)过的立方体:
glTexCoord2f 的第一个参数是X坐标。 0.0f 是纹理的左侧。1.0f 是纹理的右侧。 glTexCoord2f 的第二个参数是Y坐标。 0.0f 是纹理的底部。 1.0f 是纹理的顶部。
一般表达方式:
glBegin(GL_QUADS);
// 前面
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的左下
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 纹理和四边形的右下
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 纹理和四边形的右上
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹 理和四边形的左上
……
glEnd();
光照:
GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f }; // 环境光参数
我们得到的是半亮(0.5f)的白色环境光。
如果没有环境光,未被漫射光照到的地方会变得十分黑暗。
GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f }; // 漫射光参数
GLfloat LightPosition[]= { 0.0f, 0.0f, 2.0f, 1.0f }; // 光源位置
int InitGL(GLvoid)中设置:
glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); // 设置环境光
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // 设 置漫射光
glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); // 设置光源位置
glEnable(GL_LIGHT1); // 启用一号光源
键盘控制:
if (keys['L'] && !lp) // L 键 已按下并且松开了?
{
lp=TRUE; // lp 设为 TRUE
light=!light; // 切换光源的 TRUE/FALSE
if (!light) // 如果没有光源
{
glDisable(GL_LIGHTING); // 禁用光源
}
else // 否 则
{
glEnable(GL_LIGHTING); // 启用光源
}
}
if (!keys['L']) // L键 松开了么?
{
lp=FALSE; // 若 是,则将lp设为FALSE
}
if (keys[VK_PRIOR]) // PageUp按 下了?
{
z-=0.02f; // 若按下,将木箱移向屏幕内部
}
if (keys[VK_PRIOR]) // PageUp按 下了?
{
z-=0.02f; // 若按下,将木箱移向屏幕内部
}
混合(Blend):
绝大多数人都认为Alpha分量代表材料的透明度。这就是说,alpha值为0.0时所代表的材料是完全透明的。alpha值为1.0时所代表 的材料则是完全不透明的。
glColor4f(1.0f,1.0f,1.0f,0.5f); // 全亮度, 50% Alpha 混合(GL_RGBA)
glBlendFunc(GL_SRC_ALPHA,GL_ONE); // 基于源象素 alpha通道值的半透明混合函数
id 博主 = [[KILONET.CNBLOGS.COM alloc] initWithValue:@"天堂向右,我依然向左"
网名:@"老舟"
兴趣:@"影音,阅读"
动态:@"系统架构设计,Android通信模块开发"
网址:@"http://kilonet.cnblogs.com"
签名:@"--------------------------------------------------
Stay Hungry , Stay Foolish
求 知 若 渴,处 事 若 愚
--------------------------------------------------"
]; // Never Release