计算机图形学期末答辩作业——opengl室内简单场景设计(可键盘交互、可视角漫游、有纹理贴图、实现光照)

一、项目说明
这个opengl场景设计是我们的计算机图形学课程期末答辩大作业。此项目实现了一个简单的室内场景设计,此场景由沙发、茶几、桌子、水壶、地板、墙壁等元素构成,其中地板与墙壁采取了纹理贴图,并可使用键盘实现与场景的交互,可以实现视角漫游、物体旋转,控制光照等功能。另外,此场景设计简单,代码简洁,共使用430多行代码便实现了简单的场景设计与基本操作,并且每一句代码都有非常详细的注释,相信就算是一点opengl基础没有也可通过学习本项目轻松入门。
二、运行说明
1、电脑版本:win10
2、运行软件:Visual Studio 2019
3、运行说明:
在vs 2019的安装目录中放入opengl函数库(可根据网上教程),然后打开vs2019,创建工程,新建.cpp文件,把源代码粘贴过去,编译运行即可。
也可下载如下图的计算机图形学场景设计压缩包,解压后直接点击.sln文件,进入vs2019后,即可运行。
三、部分源代码:


#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glut32.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment( lib, "glaux.lib")		// GLaux连接库
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "glut.h"
#include <windows.h>
#include "GLAUX.H"	

#include <iostream>
using namespace std;

GLuint	texture[4];	//定义纹理

static float ttrans[3] = {
    2.64 ,2.64 ,2.64 };//ttrans[3]初始值为观察点的位置
float  a = 0;//场景绕y旋转角度


void makeImage(void);

int myinit(void);

void display(void);

void myReshape(GLsizei w, GLsizei h);
GLuint g_bitmap[3];//纹理对应的编号 定义纹理的映射个数 
//定义纹理、控制滤波、创建纹理
bool  LoadGLTextures(char *filename, GLuint &texture)	//加载位图文件 方法0
{
   
	AUX_RGBImageRec *pImage = NULL;
	pImage = auxDIBImageLoadA(filename); //装入位图
	if (pImage == NULL)
		return false;
	glGenTextures(1, &texture); //生成贴图
	glBindTexture(GL_TEXTURE_2D, texture); //贴图生效,绑定此纹理,让之后的任何纹理指令都可以配置当前绑定的纹理
	//为当前绑定的纹理对象设置环绕、过滤方式
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //缩小时线性滤波
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_REPEAT); //扩大时线性滤波
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); //纹理可以在s(X)方向上重复映射 
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);//纹理可以再t(Y)方向上重复映射
	gluBuild2DMipmaps(GL_TEXTURE_2D, 4, pImage->sizeX, pImage->sizeY, GL_RGB, GL_UNSIGNED_BYTE, pImage->data); //生成纹理,将载入的位图文件(*.bmp)转换成纹理贴图。
	/*
	GL_TEXTURE_2D  此纹理是一个2D纹理
	4代表颜色成分是R(红色分量)、G(绿色分量)、B(蓝色分量)、Alpha
	pImage->sizeX  纹理的宽度
	pImage->sizeY  纹理的高度
	GL_RGB, 告诉OpenGL图像数据由红、绿、蓝三色数据组成
	GL_UNSIGNED_BYTE  组成图像的数据是无符号字节类型
	pImage->data  告知opengl纹理数据的来源
	*/
	
	free(pImage->data);//释放位图内存
	free(pImage);
	return true;
}
void  LoadTextMap(void) //加载图
{
   

	LoadGLTextures("floor.bmp", g_bitmap[0]);
  • 22
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 75
    评论
实验一 OpenGL+GLUT开发平台搭建 5 小实验1: 开发环境设置 5 小实验2: 控制窗口位置和大小 6 小实验3:默认的可视化范围 6 小实验4:自定义可视化范围 7 小实验5: 几何对象变形的原因 8 小实验6: 视口坐标系及视口定义 8 小实验7:动态调整长宽比例,保证几何对象不变形 9 实验二 动画和交互 10 小实验1: 单缓冲动画技术 10 小实验2: 双缓冲动画技术 11 小实验3:键盘控制 13 小实验4:鼠标控制【试着单击鼠标左键或者右键,试着按下鼠标左键后再移动】 14 实验三 几何变换、观察变换、三维对象 16 小实验1:二维几何变换 16 小实验2:建模观察(MODELVIEW)矩阵堆栈 17 小实验3:正平行投影1 19 小实验4:正平行投影2 19 小实验5:正平行投影3 20 小实验6:透射投影1 21 小实验6:透射投影2 22 小实验7:三维对象 24 实验四 光照模型纹理映射 26 小实验1:光照模型1----OpenGL简单光照效果的关键步骤。 26 小实验2:光照模型2----光源位置的问题 28 小实验3:光照模型3----光源位置的问题 31 小实验4:光照模型4----光源位置的问题 33 小实验5:光照模型5----光源位置的问题 35 小实验6:光照模型6----光源位置的问题 38 小实验7:光照模型7----光源位置的动态变化 40 小实验8:光照模型8----光源位置的动态变化 43 小实验9:光照模型9---光源位置的动态变化 45 小实验10:光照模型10---聚光灯效果模拟 48 小实验11:光照模型11---多光源效果模拟 50 小实验12:光照效果和雾效果的结合 53 小实验13:纹理映射初步—掌握OpenGL纹理映射的一般步骤 56 小实验13:纹理映射—纹理坐标的自动生成(基于参数的曲面映射) 59 小实验14:纹理映射—纹理坐标的自动生成(基于参考面距离) 61

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 75
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值