真实感场景绘制(附源码)

首先给出绘制效果图:


说明:

本系统绘制了一个真实感的三维场景,并实现场景漫游。使用按键↑、↓、←、→或W、S、A、D控制运动方向,PgDn和PgUp可以改变观察者的高度,鼠标控制转向,按键‘F’可以打开和关闭“雾气”,Esc退出程序。

本场景中绘制了墙壁与地面、天空、石柱、箱子、玻璃球、雪人、雾等对象,下面将依次分析它们的设计思路,这里将使用相同绘制技术的对象放到一起说明。

1、 墙壁、地面、箱子

它们的基本操作对四边形的纹理映射,将一幅纹理图的四个顶点坐标分别映射到四边形的四个顶点上即可。OpenGL就自动通过插值填充多边形内部的纹理。由于在OpenGL中纹理坐标是一个点的属性,故需要在绘制点之前指定该点的纹理坐标。另外在绘制四边形时要保证绘制顺序的一致,这里统一采用逆时针顺序绘制。纹理坐标范围在[0,1]之间,坐标超过1则采用重复的方式(OpenGL默认处理方式)。这样可以在映射时按四边形的比例设置纹理坐标,从而防止纹理图过度拉伸造成的变形。一个四边形的纹理映射步骤为:

glBindTexture(GL_TEXTURE_2D,texture[0]); 

glBegin(GL_QUADS); 

glTexCoord2f(0.0f, 0.0f); glVertex3f(30.0f,0.0f, -170.0f);

glTexCoord2f(1.0f, 0.0f); glVertex3f(30.0f,0.0f, -150.0f);

glTexCoord2f(1.0f, 1.0f); glVertex3f(30.0f,20.0f,-150.0f);

glTexCoord2f(0.0f, 1.0f); glVertex3f(30.0f,20.0f,-170.0f);

glEnd();

实验效果如下:

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聚沙塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值