位置: 编程技术 - 正文

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讲)

  • 增值税发票综合服务平台错误代码35
  • 加计扣除内容
  • 境外培训费计入关税完税价格
  • 公允价值变动损益影响营业利润吗
  • 运输企业内账
  • 收到单位借款如何处理
  • 企业捐赠灾区
  • 采购单是原始凭证吗
  • 商誉在资产负债表中如何体现
  • 预提的费用在做所得税的时候如何处理
  • 海运的发票可以抵税吗
  • 固定资产原值包含进项税吗
  • 公司活动发言稿范文
  • 购置一台设备初始费用为60000元,该设备可使用7年,答案
  • 销售货款会计分录怎么做
  • 补交以前年度房产税如何记账
  • 应有财务软件
  • 支付员工出差住宿费
  • 资本公积转实收资本会计科目
  • 高速公路通行费怎么计算的
  • 免征企业所得税的有哪些行业
  • 公司筹建期间发生的费用没有发票
  • 审核费用发票需要发票吗
  • 合伙企业投资需要缴纳印花税吗
  • 税务机关及其工作人员未按办税事项最多跑一次
  • 背书出去的票据信息在哪里查询
  • 合同资产减值准备对应科目
  • 增值税税率变动情况
  • 库存暂估入账
  • 社保公司返还多交的保险费会计分录怎么写?
  • 一般纳税人交税标准是多少
  • 同期对比和同比增长
  • 小规模纳税人公司注销流程及费用
  • 服装工业企业成立时间
  • 国际代理运费和港杂费一样吗
  • 电脑怎么设置色盲模式
  • Win10 (21H1)Build 19043.1266更新补丁KB5005611正式版发布:附修复更新内容
  • linux chcon命令
  • 饲料企业经营范围
  • 损益类科目的分类
  • php限制访问频率
  • 持有至到期投资是什么意思
  • sessionn
  • uniapp简介
  • 复制/root/install.log到/tmp
  • 6月收到4月的单子怎么办
  • 用友财务软件怎么下载到电脑
  • 发生售后维修领用材料分录
  • 帝国cms栏目自定义字段
  • mysql索引原理及慢查询优化
  • mongodb replica set 添加删除节点的2种方法
  • 企业账户在银行买黄金可以开发票吗
  • Win2003系统下SQL Server 2008安装图解教程(详细图解)
  • 房地产企业建成后先出租的房地产
  • 收到进账发票分录
  • 坏账核算备抵法的优缺点
  • 常见的递延所得税
  • 红字发票是干什么的
  • 注册公司没交社保
  • 坏账准备的会计核算
  • centos6.5修改用户名
  • OS X Yosemite系统下载失败怎么办?OS X 10.10下载错误解决方法
  • 用win7的人多吗
  • win8系统找不到wifi
  • win8.1中文版下载
  • win7 media center
  • win10 win+l
  • win8怎么关闭电脑
  • win10正式版和专业版的区别
  • OpenGL_砖块着色案例
  • ajax分页查询数据文档效果图
  • 程序员要求高吗
  • android怎么保存项目
  • node.js 开发工具
  • python数字类型及操作
  • unity打包后的程序闪退
  • 国土国税垂管部主任是谁
  • 仓库需要交房产税吗
  • 小规模纳税人土地税减免政策
  • 河南省单位怎么打印社保花名册
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设