没有合适的资源?快使用搜索试试~ 我知道了~
广工图形学实验光照和纹理技术.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 176 浏览量
2023-11-11
22:39:36
上传
评论
收藏 491KB PDF 举报
温馨提示
试读
11页
广工图形学实验光照和纹理技术.pdf
资源推荐
资源详情
资源评论
1
计算机 学院 计算机科学与技术 专业 班 学号
姓名 协作者 教师评定
实验三 光照和纹理技术
1、 实验目的与要求
1. 理解并编程实现场景光照和纹理技术;
2. 建立实验的场景模型-一个六面体盒子;
3. 通过控制光源亮度、位置、方向等特性,实现不同光照效果。要求熟悉 OpenGL 中光源定
义、顶点法向量计算、材质属性设置等函数。
4. 掌握 OpenGL 中二维颜色纹理技术的应用,熟悉 OpenGL 中相应纹理函数的使用,给六面
体盒子贴上纹理。
2、 实验方案
1. 实验 1:
把 bmp 格式的图片载入,并且转换为纹理。
利用三维坐标,用点确定面的方式,建立六面体。
在六面体的六个面上固定好纹理的载入点,然后载入纹理。
设置六面体旋转,沿 X,Y,Z 轴旋转。
2. 实验 2:
在实验 1 的基础上加上光效果
设置光源亮度,设置方向,设置光源位置,在这里设置光源的位置是 360 度转动的。
材质属性设置,设置了反光等特性
3、 实验结果和数据处理
1. 实验 1 的实验结果:
程序代码如下: : : :
GLuint g_texture = 0;
GLfloat xrot =0;
GLfloat yrot =0;
GLfloat zrot =0; // Keep Going
2
//绘制一个立方体
int DrawCube(void)
{
glBindTexture(GL_TEXTURE_2D, g_texture); //使用贴图纹理
glPushMatrix(); //压入变换矩阵
glRotatef(xrot,1.0f,0.0f,0.0f); //旋转矩阵,这里绕 x 轴旋转。
glRotatef(yrot,0.0f,1.0f,0.0f); //旋转矩阵,这里绕 y 轴旋转。
glRotatef(zrot,0.0f,0.0f,1.0f); //绕 z 轴旋转,这里 zrot 是角度制的度数。
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);
// 绘制后面
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);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
// 上面
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
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(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
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, 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);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
// 左面
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
3
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();
glPopMatrix(); //弹出变换矩阵
return 1;
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清楚颜色
数据和深度数据(清屏)
glLoadIdentity(); // Reset The View
glTranslatef(0.0f,0.0f,-5.0f);
DrawCube();
glutSwapBuffers(); //交换缓冲区。显示图形
}
//载入一个.bmp 格式的贴图纹理
int LoadGLTextures(GLuint& unTexture, const char* chFileName)
{
AUX_RGBImageRec *TextureImage; //保存贴图数据的指针
载入贴图数据
glGenTextures(1, &unTexture); // 创建一个纹理,unTexture
glBindTexture(GL_TEXTURE_2D, unTexture); //绑定纹理,然后对该纹理
区添加纹理数据
//设置纹理的信息,
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage->sizeX, TextureImage->sizeY,
0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); //
设置滤波为线性滤波
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
//线性滤波
if (TextureImage) //释放资源
{
if (TextureImage->data)
{
free(TextureImage->data);
剩余10页未读,继续阅读
资源评论
a66889999
- 粉丝: 39
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功