GLfloat light0_position[] = { 15.0,15.0,15.0,10.0 };//定义光源位置 103
glLightfv(GL_LIGHT0, GL_POSITION, light0_position);//设置光源位置 107
x,y,z,w四个变量组成上面的数组,其中前三个代表位置,最后一个代表离场景近远(W可不予理会)
坐标系 右手边为x正,上方为y正,从屏幕向你为z正

gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 150
gluLookAt(
eyex,eyey,eyez, // 这里是观察者位置
targetx,targety,targetz // 这是观察者看着的那点
upx,upy,upz ) // 这是观察者头顶向着的方向

glRotatef(30.0, 1.0, 0.0, 0.0);//旋转使物体被观测的角度变化 多处出现
glRotatef( angle, x, y, z )函数的作用是将当前坐标系以a( x, y, z )向量为旋转轴旋转angle角度

glTranslatef(4.5f, 0.0f, -6.0f);//将画笔移动到另一个地点,方便绘制下一个图形 174

注意坐标系约定和函数参数单位!

实验结果图。。

核心代码

void CTribleangleView::OnDraw(CDC* pDC)
{
CTribleangleDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: add draw code for native data here
//初始化各种设置
wglMakeCurrent(pDC->m_hDC, m_hGLRC);//将绘图上下文绑定到设备上下文上
glClearColor(0.5, 0.5, 0.5, 0.0);//设置背景色
glClearDepth(1.0f);//初始化深度
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清空缓冲区
glEnable(GL_DEPTH_TEST);//开启深度测试
glShadeModel(GL_SMOOTH);//平滑阴影模式
CRect rcClient;
GetClientRect(&rcClient);
GLsizei w = rcClient.Width();//视区宽度
GLsizei h = rcClient.Height();//视区高度
glViewport(, , w, h);
glMatrixMode(GL_PROJECTION);//选择投影矩阵
glLoadIdentity();//重置投影矩阵
gluPerspective(60.0, (GLfloat)w / h, 0.1, 100.0);//设置投影方式及投影参数
glMatrixMode(GL_MODELVIEW);//选择模式矩阵
glLoadIdentity();//重置模式矩阵 //设置光照(定义一个位于左上方的白色定位光源)
GLfloat lmodel_ambient[] = { 1.0f,1.0f,1.0f,1.0f };//定义环境光
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);//设置环境光
GLfloat light0_ambient[] = { 1.0,1.0,1.0,1.0 };//定义光源环境光
GLfloat light0_diffuse[] = { 1.0,1.0,1.0,1.0 };//定义光源散射光
GLfloat light0_specular[] = { 1.0,1.0,1.0,1.0 };//定义光源反射光
GLfloat light0_position[] = { 15.0,15.0,15.0,10.0 };//定义光源位置
glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);//设置光源环境光
glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);//设置光源散射光
glLightfv(GL_LIGHT0, GL_SPECULAR, light0_specular);//设置光源反射光
glLightfv(GL_LIGHT0, GL_POSITION, light0_position);//设置光源位置
glEnable(GL_LIGHT0);//启用光源
glEnable(GL_LIGHTING);//启用光照效果 //定义黄铜材质
GLfloat brass_ambient[] = { 0.329412f,0.223529f,0.027451f,1.0f };//定义材质环境光
GLfloat brass_diffuse[] = { 0.780392f,0.568627f,0.113725f,1.0f };//定义材质散射光
GLfloat brass_specular[] = { 0.992157f,0.941176f,0.807843f,1.0f };//定义材质反射光
GLfloat brass_sinines[] = { 100.0f };//定义材质镜面反射强度
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, brass_ambient);//设置材质环境光
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, brass_diffuse);//设置材质散射光
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, brass_specular);//设置材质反射光
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, brass_sinines);//设置材质镜面反射强度
//塑料材质
GLfloat plastic_ambient[] = { 0.0f,0.0f,0.00f,1.0f };//定义材质环境光
GLfloat plastic_diffuse[] = { 0.7f,0.85f,0.7f,1.0f };//定义材质散射光
GLfloat plastic_specular[] = { 0.75f,0.75f,0.75f,1.0f };//定义材质反射光
GLfloat plastic_sinines[] = { 10.0f };//定义材质镜面反射强度
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, plastic_ambient);//设置材质环境光
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, plastic_diffuse);//设置材质散射光
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, plastic_specular);//设置材质反射光
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, plastic_sinines);//设置材质镜面反射强度 //平面纹理坐标生成
static GLfloat xequalzero[] = { 1.0,1.0,1.0,1.0 };
static GLfloat slanted[] = { 1.0,1.0,1.0,1.0 };
static GLfloat *currentCoeff;
static GLenum currentPlane;
static GLint currentGenMode;
static float roangles;
glClearColor(1.0, 1.0, 1.0, 1.0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
#define stripleImageWidth 32
GLubyte stripleImage[ * stripleImageWidth]; int j;
for (j = ; j < stripleImageWidth; ++j) {
stripleImage[ * j + ] = (GLubyte)((j <= ) ? : );
stripleImage[ * j + ] = (GLubyte)((j>) ? : );
stripleImage[ * j + ] = (GLbyte)();
stripleImage[ * j + ] = (GLbyte);
}
glPixelStoref(GL_UNPACK_ALIGNMENT,);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage1D(GL_TEXTURE_1D, , , stripleImageWidth, ,
GL_RGBA, GL_UNSIGNED_BYTE, stripleImage);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
currentCoeff = xequalzero;
currentGenMode = GL_OBJECT_LINEAR;
currentPlane = GL_OBJECT_PLANE;
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, currentGenMode);
glTexGenfv(GL_S, currentPlane, currentCoeff);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_1D);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glFrontFace(GL_CW);
glMaterialf(GL_FRONT, GL_SHININESS, 64.0);
roangles = 45.0;
//设置坐标系统
glTranslatef(0.0f, -0.1f, -2.0f);//将坐标系统下移0.1,后移2.0
glRotatef(, 1.0, 0.0, 0.0);//将坐标系统绕x轴逆时针旋转45度
glRotatef(, 0.0, -1.0, 0.0);//将坐标系统绕y轴顺时针旋转30度 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();
glTranslatef(-1.5f, 0.0f, -6.0f);
glRotatef(30.0, 1.0, 0.0, 0.0);
glRotatef(30.0, 0.0, 1.0, 0.0); glutSolidCube(2.0);
glLoadIdentity();
glTranslatef(2.5f, 0.0f, -6.0f);
glRotatef(0.0f, 1.0f, 0.0f, 0.0f);
glutSolidSphere(2.0, , );
glDisable(GL_TEXTURE_2D);//禁用纹理映射
glPopMatrix();
glFlush();//强制输出
SwapBuffers(pDC->m_hDC);//交换缓冲区
wglMakeCurrent(pDC->m_hDC, NULL);//置绘图上下文为非当前状态,释放设备上下文 }

OpenGL大作业的更多相关文章

  1. CSAPP HITICS 大作业 hello's P2P by zsz

    摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息.摘要应包括本论文的目的.主要内容.方法.成果及其理论与实际意义.摘要中不宜使用公式.结构式.图表和非公知 ...

  2. 数据库大作业--由python+flask

    这个是项目一来是数据库大作业,另一方面也算是再对falsk和python熟悉下,好久不用会忘很快. 界面相比上一个项目好看很多,不过因为时间紧加上只有我一个人写,所以有很多地方逻辑写的比较繁琐,如果是 ...

  3. 程设大作业xjb写——魔方复原

    鸽了那么久总算期中过[爆]去[炸]了...该是时候写写大作业了 [总不能丢给他们不会写的来做吧 一.三阶魔方的几个基本定义 ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B UD之间的叫E,LR ...

  4. 大作业NABC分析结果

    大作业NABC分析结果 这次的大作业计划制作一款关于七巧板的游戏软件.关于编写的APP的NABC需求分析: N:需求 ,本款软件主要面向一些在校的大学生,他们在校空闲时间比较多,而且热衷于一些益智类游 ...

  5. [留念贴] C#开发技术期末大作业——星月之痕

    明天就要去上海大学参加 2015赛季 ACM/ICPC最后一场比赛 —— EC-Final,在这之前,顺利地把期末大作业赶出来了. 在这种期末大作业10个人里面有9个是从网上下载的国内计算机水平五六流 ...

  6. Hadoop综合大作业

    Hadoop综合大作业 要求: 用Hive对爬虫大作业产生的文本文件(或者英文词频统计下载的英文长篇小说)词频统计. 用Hive对爬虫大作业产生的csv文件进行数据分析 1. 用Hive对爬虫大作业产 ...

  7. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

  8. 期末Java Web大作业----简易的学生管理系统

    学生信息管理系统(大作业) 2018-12-21:此文章已在我的网站更新,添加视图介绍等信息,源码请移步下载https://www.jeson.xin/javaweb-sims.html PS:首先不 ...

  9. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

随机推荐

  1. python之集合,函数,装饰器

    本节主要内容如下: 1. set集合 2. 函数 -- 自定义函数 -- 内置函数 3. 装饰器 一. set 集合: 一个无序且不重复的序列. tuple算是list和str的杂合(杂交的都有自己的 ...

  2. 【C语言】二维指针做形参

    转自:http://hi.baidu.com/gpmzccqceabimqq/item/f499f057aa1520404eff208b 关键: 传入时强制类型转换 + 使用时自己手工寻址 今天写程序 ...

  3. NIS域配置详解

    一.前期准备1.1 NIS 简介NIS,英文的全称是network information service,也叫yellow pages.在Linux中,NIS是一个基于RPC的client/serv ...

  4. 【XLL API 函数】 xlDefineBinaryName

    用于为 xltypeBigData XLOPER/XLOPER12 分配永久存储名称.用于定义 workbook 保存的位名称,并能在任何时候通过定义名称来访问. 函数原型 Excel12(xlDef ...

  5. jquery 建议编辑器

    用谷歌搜索找了很久,发现所有的插件都是功能太复杂,不是我想要的.所以,我决定我自己来实现需要的编辑功能.刚开始我觉得应该要花费很多的时间,因为我想象内容编辑功能应该是很复杂的. 但事实证明,它是如此简 ...

  6. 60. Permutation Sequence

    题目: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of t ...

  7. SQLServer 批量插入数据的两种方法

    SQLServer 批量插入数据的两种方法-发布:dxy 字体:[增加 减小] 类型:转载 在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Ins ...

  8. Callable 和 Future接口 学习

    * Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务. * Callable和Runnable有几点不同: * (1)C ...

  9. n数乘积第m小

    这是从Java贴吧看到的一道面试题,看了别人的解题思路实现的.... 如题: n个数,他们的乘积可得到一些其它的数,求第m小的. 输入格式: n m n1 n2 n3 ... 例: 输入: 3 8 2 ...

  10. Linux下第一次使用MySQL数据库,设置密码

    在终端下输入:/etc/rc.d/init.d/mysqld status 查看MySQL状态,看看是否运行. 没有运行的话就输入:/etc/rc.d/init.d/mysqld start 这时,就 ...