自己动手实现OpenGL!
OpenGL 的学习,一开始时学习API,随后是深入理解矩阵。矩阵学完之后,又回过头来去理解纹理。
最大的成就莫过于自己动手实现OpenGL。OPenGL的矩阵实现中主要遇到以下问题:
参考:
http://daojin.iteye.com/admin/blogs/1954425
1. 都有哪些矩阵,矩阵如何构造。
主要是三个矩阵:
1. 投影矩阵 Mp
2. 模型(视图)矩阵(实际上是一个矩阵,为方便模拟相机好理解,才分开,方便理解与学习)。 Mmodel_view
3. 视口矩阵。Mviewport
以上三个矩阵1,3 都有现成的可以使用。对于2,那么必须由开发者构造。
2. 坐标如何根据矩阵变换。
Mmodel_view * Mp
变换后除以w。得到正规化坐标。
然后再乘以ViewPort矩阵,得到屏幕坐标。
3. 裁剪。
一开始实现了1和2,对于3(裁剪)到现在也没有实现出来。但是找到了android的AGL的源代码中的裁剪部分,并理解了其中的算法。基本上的思路是,对与原来三角形与【视景体对应的正规化立方体(openGL术语,也就是x,y,z 为 -1,1 的边长为2的立方体)】求交点,得到多边形,然后多边形再转换为多个三角形存起来。
下面的博客是关于魔兽争霸地形贴图的算法,主要思想是一个方块分为中间菱形挖空的四个角。然后,根据角的个数和方位,中间进行填充。如果四个角都满的,那么就随机填一个满的进去:
下面说的1,2,4,8对应的是脚码,能结合出 其他的1~15的土块。也就是 2的4次方个。下面是一个同仁的解释:
http://www.cppblog.com/mybios/archive/2008/10/26/65076.html
自己动手实现OpenGL!相关推荐
- [置顶] 自己动手实现OpenGL之glViewPort(一)
直接上代码. public static void glViewport( int x, int y, int width, int height ) { int surfaceHeight = mI ...
- 自己动手实现OpenGL之glViewPort(一)
直接上代码. public static void glViewport(int x,int y,int width,int height) {int surfaceHeight = mInfo.he ...
- [置顶] 自己动手实现OpenGL-OpenGL原来如此简单(三)
上一篇自己动手写opengl 由于时间原因停止了更新,现在继续. 1. 首先我们定义以下变量 public static class DisplayInfo{ Canvas canvas; int h ...
- 自己动手实现OpenGL-OpenGL原来如此简单(三)
上一篇自己动手写opengl 由于时间原因停止了更新,现在继续. 1. 首先我们定义以下变量 public static class DisplayInfo{Canvas canvas;int hei ...
- OpenGL(预备篇3)---OpenGL编程环境配置 vs2017篇---GLM---(自己动手系列)
什么是GLM,有什么用? OpenGL Mathematics (GLM). 看样子这是一个OpenGL的数学库.在OpenGL编程中用处很大,可以下载来用用. 幸运的是,这个不用编译,下载后解压了就 ...
- SCARA——OpenGL入门学习一、二
参考博客:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 简介 最近开始一个机械手臂的安装调试,平面关节型机器人又称SCA ...
- WhyGL:一套学习OpenGL的框架,及翻写Nehe的OpenGL教程
最近在重学OpenGL,之所以说重学是因为上次接触OpenGL还是在学校里,工作之后就一直在搞D3D,一转眼已经毕业6年了.OpenGL这门手艺早就完全荒废了,现在只能是重学.学习程序最有效的办法是动 ...
- opengl如何画出一个球_OpenGL-Controlling and Monitoring the Pipeline
全球图形学领域教育的领先者.自研引擎的倡导者.底层技术研究领域的技术公开者,东汉书院在致力于使得更多人群具备内核级竞争力的道路上,将带给小伙伴们更多的公开技术教学和视频,感谢一路以来有你的支持.我们正 ...
- opengl es的射线拾取
2019独角兽企业重金招聘Python工程师标准>>> 在opengl中关于拾取有封装好的选择模式,名字栈,命中记录,实现拾取的功能,相对容易一些.但是到了opengl es里面就比 ...
最新文章
- 安卓工控主板运行时会自动重启_工控主板在工业自动化中的应用
- java.lang.UnsupportedOperationException 异常分析
- JDBC连接数据库集
- 收藏几个漂亮的login页面验证
- python--爬虫代码汇总
- 51单片机——独立按键
- 运筹学与管理科学著名期刊解读
- 全球资本市场竞争力指数排名发布,中国跃居第五
- Android的基站、WIFI、GPS定位三点定位源码下载
- 项目管理知识体系指南 (一)
- git reset --hard HEAD~X误删恢复操作
- OLAP列式存储之引擎特性
- Android连接网络打印机进行打印
- Android 自定义View(四)实现股票自选列表滑动效果
- 出现make: *** No rule to make target `all'. Stop.解决办法
- W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。
- html渐变色css3渐变,css3渐变
- 花了2万多买的Python教程全套,现在分享给大家……Python入门到精通(Python全栈开发教程)未完待续
- 有啊百度知道双色球红蓝走势图
- python爬取付费音乐包_Python爬咪咕收费音乐 高音质无损音乐
热门文章
- android n进入分屏代码分析_智慧分屏为“何物”?华为MatePad Pro解锁便捷又高效的新姿势...
- java用爬虫爬一个页面_使用Java写一个简单爬虫爬取单页面
- influxdb tsm文件_利用InfluxDB+Grafana搭建Flink on YARN作业监控大屏
- 我的世界服务器如何修改加载规模,我的世界服务器预加载区域怎么调小
- 做个爱学习的孩子!收藏2019知名机器学习暑期学校大列表
- BigDecimal 使用详解
- 网络报错:“The connection is not for this device.”
- 人人都来写算法 之 快速排序
- 最新、最全面的LAMP+wordpress安装过程!!
- 为什么 React Elements 会有 $$typeof 这个属性?