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. 15.SpringMVC和Spring上下文关系(为什么SpringMVC可以调用到Spring)

    springmvc上下文继承于spring, 也就是springmvc的上下文可访问spring上下文,在springmvc的上下文中可取得spring bean. spring上下文是spring启 ...

  2. 7.django之自定义分页记录

    只是大概记录下步骤: 1.表结构: class UserProfile(models.Model): ''' 用户表 ''' user = models.OneToOneField(User,verb ...

  3. codeforces 449B Jzzhu and Cities (Dij+堆优化)

    输入一个无向图<V,E>    V<=1e5, E<=3e5 现在另外给k条边(u=1,v=s[k],w=y[k]) 问在不影响从结点1出发到所有结点的最短路的前提下,最多可以 ...

  4. Cuckoo for Hashing_双哈希表

    问题 B: Cuckoo for Hashing 时间限制: 1 Sec  内存限制: 64 MB提交: 24  解决: 12[提交][状态][讨论版] 题目描述 An integer hash ta ...

  5. codeforces 499A.Inna and Pink Pony 解题报告

    题目链接:http://codeforces.com/problemset/problem/499/A 题目意思:有两种按钮:1.如果当前观看的时间是 t,player 可以自动处理下一分钟,姑且理解 ...

  6. jquery.dataTable分页

    jsp页面,引入几个js <link type="text/css" rel="stylesheet" href="/library/css/b ...

  7. jquery[siblings]取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合

    取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合,用于筛选同辈元素的表达式 $("#pageList").click(function(){ $(this).pa ...

  8. 分模块的maven项目调试时报Source not found的解决办法

    一.背景 通常在开发中,我们经常会拆分我们的项目为一个个maven子工程,然后用一个父项目进行集成,并且子项目还会继承自父项目.当我们对这些项目进行debug调试的时候往往会在eclipse中出现so ...

  9. 25个增强iOS应用程序性能的提示和技巧(初级篇)

    25个增强iOS应用程序性能的提示和技巧(初级篇) 标签: ios内存管理性能优化 2013-12-13 10:53 916人阅读 评论(0) 收藏 举报  分类: IPhone开发高级系列(34)  ...

  10. java.util.ConcurrentModificationException

    遍历 List 的时候将 item remove 掉会抛出此异常