位置: 编程技术 - 正文

OpenGL中光照的设置(一)(opengl实现光照效果)

编辑:rootadmin

推荐整理分享OpenGL中光照的设置(一)(opengl实现光照效果),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:opengl insight,opengl环境光,opengl2.1光影,opengl光照设置,opengl 灯光,opengl 点光源,opengl环境光,opengl环境光,内容如对您有帮助,希望把文章链接给更多的朋友!

OpenGL这个系列的blog是我这个小白学习的笔记。

大部分内容是摘录的,少部分内容是自己的理解。

这篇文章转载自 ambient[] = { 0.0, 0.0, 0.0, 1.0 };GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 };

(2)创建光源 glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); // Setup The Ambient Light设置环境光 glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); // Setup The Diffuse Light设置漫射光 glLightfv(GL_LIGHT1, GL_POSITION,position); // Position The Light设置光源位置

(3)启动光照和光源 glEnable(GL_LIGHTING); // 启动光照 glEnable(GL_LIGHT1); // Enable Light One启用一号光源

2.选择光照模型GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 };GLfloat local_view[] = { 0.0 }; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);

OpenGL中光照的设置(一)(opengl实现光照效果)

3.定义材质(1)材料属性GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 };GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 };GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 };GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };GLfloat no_shininess[] = { 0.0 };GLfloat low_shininess[] = { 5.0 };GLfloat high_shininess[] = { .0 };GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0};

(2)指定材料属性glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);

4.绘制物体glutSolidSphere(1.0, , );

小结:

即使用 glLightfv 设置光(环境光、散射光等等)的颜色,使用 glLightModelfv设置关照的模式,使用glMaterialfv设置物体材料的颜色。

引用OpenGL编程指南中的例子:

[cpp] view plaincopyvoid init(void) { GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 }; GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 }; GLfloat local_view[] = { 0.0 }; glClearColor(0.0, 0.1, 0.1, 0.0); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); } void display(void) { GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 }; GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 }; GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 }; GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat no_shininess[] = { 0.0 }; GLfloat low_shininess[] = { 5.0 }; GLfloat high_shininess[] = { .0 }; GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0}; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* draw sphere in first row, first column * diffuse reflection only; no ambient or specular */ glPushMatrix(); glTranslatef (-3., 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in first row, second column * diffuse and specular reflection; low shininess; no ambient */ glPushMatrix(); glTranslatef (-1., 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in first row, third column * diffuse and specular reflection; high shininess; no ambient */ glPushMatrix(); glTranslatef (1., 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in first row, fourth column * diffuse reflection; emission; no ambient or specular reflection */ glPushMatrix(); glTranslatef (3., 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in second row, first column * ambient and diffuse reflection; no specular */ glPushMatrix(); glTranslatef (-3., 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in second row, second column * ambient, diffuse and specular reflection; low shininess */ glPushMatrix(); glTranslatef (-1., 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in second row, third column * ambient, diffuse and specular reflection; high shininess */ glPushMatrix(); glTranslatef (1., 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in second row, fourth column * ambient and diffuse reflection; emission; no specular */ glPushMatrix(); glTranslatef (3., 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in third row, first column * colored ambient and diffuse reflection; no specular */ glPushMatrix(); glTranslatef (-3., -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in third row, second column * colored ambient, diffuse and specular reflection; low shininess */ glPushMatrix(); glTranslatef (-1., -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in third row, third column * colored ambient, diffuse and specular reflection; high shininess */ glPushMatrix(); glTranslatef (1., -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, , ); glPopMatrix(); /* draw sphere in third row, fourth column * colored ambient and diffuse reflection; emission; no specular */ glPushMatrix(); glTranslatef (3., -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, , ); glPopMatrix(); glFlush(); } void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= (h * 2)) glOrtho (-6.0, 6.0, -3.0*((GLfloat)h*2)/(GLfloat)w, 3.0*((GLfloat)h*2)/(GLfloat)w, -.0, .0); else glOrtho (-6.0*(GLfloat)w/((GLfloat)h*2), 6.0*(GLfloat)w/((GLfloat)h*2), -3.0, 3.0, -.0, .0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (, ); glutCreateWindow(argv[0]); init(); glutReshapeFunc(reshape); glutDisplayFunc(display); glutKeyboardFunc (keyboard); glutMainLoop(); return 0; }

OpenGL入门 & VS 配置使用 OpenGL gult库 GLUT(英文全写:OpenGLUtilityToolkit)是一个处理OpenGL程式的工具库,负责处理和底层操作系统的呼叫以及I/O,并包括了以下常见的功能:定义以及控制视

OpenGL中光照的设置(二) OpenGL这个系列的blog是我这个小白学习的笔记。大部分内容是摘录的,少部分内容是自己的理解。这篇文章转载自

OpenGL--粒子系统 理论基础1,粒子系统的基本思想是用许多形状简单且赋予生命的微小粒子作为基本元素来表示物体(一般由点或很小的多边形通过纹理贴图表示),侧重

标签: opengl实现光照效果

本文链接地址:https://www.jiuchutong.com/biancheng/369480.html 转载请保留说明!

上一篇:OpenGL中的深度缓存(opengl帧缓冲)

下一篇:OpenGL入门 & VS2012 配置使用 OpenGL gult库(opengl教程48讲)

  • 没申报可以开票嘛
  • 开票系统技术服务费在申报表哪里抵扣
  • 取暖费扣个人所得税吗
  • 采购设备包含安装费用吗
  • 税收滞纳金可以免除吗
  • 物业公司收取供热管道内网的维护费用合理吗
  • 原材料入库是付款凭证吗
  • 一般纳税人开3个点的票不能抵扣进项
  • 减免附加税还要计提吗
  • 查账征收的个体户需要申报个人所得税吗
  • 报税没有申报现金流量表
  • 预充值发票可以列支吗?
  • 计提无形资产累计摊销9083.33
  • 企业计提的工资薪金支出可以在税前扣除
  • 购进商品用于样品赠送的账务处理
  • 发票认证信息怎么填
  • 收到房租的增值税税率
  • 购买的商业保险可以税前扣除吗
  • 延期收款利息如何算
  • 公司与客户合作协议范本
  • mac 的系统
  • 怎样知道自己是否贫血
  • 建筑业一般纳税人可以开普票吗
  • 如何设定电脑开机密码锁
  • 消费税和购置税怎么算
  • 无偿赠送产品如何处理
  • 旅行社开的发票怎么入账
  • 苹果手机删除的备忘录怎么恢复
  • 一般纳税人购进税控收款机抵扣
  • 宾馆一次性用品有哪些
  • 企业职工教育培训
  • svc语法
  • php 面向对象
  • python爬取网站数据毕业论文
  • html前端开发教程
  • 政府补助为什么是递延收益
  • 法人为什么不能领取失业金
  • 土方专用发票
  • 存货跌价准备的结转会计分录
  • 图文详解塘鲺、鲶鱼的区别介绍
  • sql server数据表
  • concat group
  • 转让旧固定资产怎么处理
  • 公司购买理财产品收益会计分录
  • 单位租的个人房子需要采集房产税源吗
  • 个体户超额
  • 管家婆进销存的凭证如何体现?
  • 公司举行活动发言稿范文
  • 企业所得税如何计算应纳税所得额
  • 销项发票能不能退税
  • 小企业固定资产折旧方法包括
  • 企业支付境外佣金要交税吗?
  • 电信电子发票什么格式
  • 总分类账,明细分类账,日记账
  • 强制删除快捷键是什么
  • mysql速成要多久
  • win10下面任务栏
  • windowsxp无法格式化
  • 理解 成为 超越梗
  • 新安装的Ubuntu系统无法联网
  • windows8.1开机
  • windows 10 20h2推送
  • centos安装v2
  • 如何关闭自动启动项目
  • win8账户锁定无法登录
  • win10网卡驱动不正常连不上网怎么办
  • win8更新错误
  • linux ii
  • linux如何使用vim编写程序
  • cocos2djs
  • glColor3f影响纹理贴图 的思考
  • qt底层绘图引擎
  • nodejs网站开发
  • python干嘛用
  • nodejs爬虫 与python爬虫
  • jquery返回顶部
  • jquery示例
  • 车辆购置税退税需要什么资料
  • 内蒙古国地税联合网厅
  • 12366几点上班人工服务
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设