|
|
我想做一个雪景,雪花我选用纹理映射来做。因为想要多种雪花,选用了一个64 x 64的图,上面有16个16 x 16的雪花。我的想法是用显示列表把每个雪花分割,就向NEHE里面介绍的那个字符一样。显示的时候先选择雪花位置和旋转角度,然后用glCallLists()显示贴图。
GLvoid BuildSnow(GLuint texture)
{
float cx; // 雪花图的X坐标
float cy; // 雪花图的Y坐标
base = glGenLists(16); // 创建16个显示列表
glBindTexture(GL_TEXTURE_2D, texture); // 绑定纹理
for (int i = 0; i < 16; i++) // 循环16个显示列表
{
cx=float(i % 4) / 4.0f; 当前雪花的X坐标
cy=float(i / 4) / 4.0f; // 当前雪花的Y坐标
glNewList(base+i,GL_COMPILE); //开始创建显示列表
glBegin(GL_QUADS); // 使用四边形显示每一个雪花
glTexCoord2f(cx,1-cy-0.0625f); // 左下角的纹理坐标
glVertex2i(0,0); // 左下角的坐标
glTexCoord2f(cx+0.0625f,1-cy-0.0625f); // 右下角的纹理坐标
glVertex2i(16,0); // 右下角的坐标
glTexCoord2f(cx+0.0625f,1-cy); // 右上角的纹理坐标
glVertex2i(16,16); // 右上角的坐标
glTexCoord2f(cx,1-cy); // 左上角的纹理坐标
glVertex2i(0,16); // 左上角的坐标
glEnd(); // 四边形雪花绘制完成
glEndList(); // 字符显示列表结束
}
}
调用的时候是:
glTranslatef(snow.x,snow.y,snow.z); // 绘制雪花
glRotatef((snow.spinx),1.0f,0.0f,0.0f);
glRotatef((snow.spinx),1.0f,0.0f,0.0f);
glRotatef((snow.spinz),0.0f,0.0f,1.0f);
BuildSnow(SnowTex);
glListBase(base);
glCallLists(1, GL_BYTE,??);
上面的那个该写什么?我对第三个系数不明白。。
这样能运行出正确的结果么?
另外,请问谁能帮我把下面这个房子模型的文件从MAX格式转化为3DS格式么?我急用!!
最后一个问题,所有3DS文件的格式都是一样的么?我用3DS MAX看那个模型,怎么感觉里面都是矩形的,而不是三角形的面呢?
我的邮箱chrisy26@163.com
先谢谢大家了 [em3] |
|