学习3D地图引擎开发技术心得

2024-09-01 04:58

本文主要是介绍学习3D地图引擎开发技术心得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

现在市场上关于学习3D技术的书籍很多,有很多写的确实很好。个人认为好书的话一本就够了,书太多看的头晕眼花的也消化不了。我从开始学习到现在开了不下百本的相关资料,但主要还是围绕着基本学习资料在看。重要的是把一本书上的东西吃透就行。先说说我是怎么学的,各位也帮着我指导一下。

<!--[if !supportLists]-->1,  <!--[endif]-->由于从没接触过3D之类的开发(不过以前就是做软件的,还好有这个基础),什么D3D啊,OpengGL啊,一概不知。所以就先从最简单的开始。先了解3D引擎的软件实现原理,也就是软件3D图形引擎。这里推荐一本好书《3D游戏编程大师技巧》,这本是完全将的是软件实现方法,为啥都不懂的我做了一下启蒙教育。

<!--[if !supportLists]-->2,  <!--[endif]-->在熟悉、了解、掌握了以上的知识之后,开始自己动手用软件的方式实现了一个3D地图引擎。很粗糙,但廖胜于无。同时在实现的过程中又重新学习了一下书中的内容,俗话说的温故而知新确实很对。特别是象软件开发这种技术一定要在实践中才能真正掌握的。网上有一份《地形制作全攻略》的文档将的很不错,在这一阶段帮了我不少。

<!--[if !supportLists]-->3,  <!--[endif]-->这样我了解了一些3D图形引擎的概念、算法的含义、处理的流程。于是下一步打算使用目前通用的3D图形库实现我的第一个3D图形引擎。目前来说比较流行的是D3D和OpenGL,由于主要的目标是想做一个下位机的3D地图引擎,所以把重点放在了OpenGL上。当然D3D我也尝试了一下。第一步便是在D3D上把我之前做的软件引擎进行了移植。效果还算不错。

<!--[if !supportLists]-->4,  <!--[endif]-->这个是重点。针对OpenGL图形库的3D地图引擎实现,目前还在学习中,已经把软件3D引擎移植到了OpenGL的平台上,这里有本书对我帮助很大,《OpenGL三维图形设计》,这本书完全从实际触发,源码解释都很详尽,好书啊。下一步是调用OpenGL本身的库函数进行相关实现,敬请期待吧。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

OpenGL的函数库应用操作(有一本书《OpenGL编程指南》,对于想深入学习OpenGL的童鞋来说很不错):

1,调用gluPerspective和gluLookAt函数实现投影坐标变换。

2,使用z-Buffer方式实现三维图形的面消隐。

3,采用Gouraud方法实现渲染绘图,但光照处理在没有纹理的条件下效果不好

4,实现了纹理贴图的方法,这下可以使用光照模型对纹理贴图进行渲染了。

5,光照对纹理贴图的渲染效果并不理想,加上之后会有不平滑的现象产生(就是能很明显的看到渲染出的一块一块的三角形)。

    一开始以为是计算了每个三角形的顶点法线向量造成的不兼容,改成只计算每个三角形的面法线向量,但是结果依旧。

    不清楚是什么原因,先放一下吧,有哪位看客了解的,交流一下。

6,简单的地形跟踪算法实现。原来小小的地形跟踪也有很大的学问,深入下去估计能够写一篇论文。

2011-02-11:

经过以上的初步实践,再重新回过来看书。《OpenGL 2.0 精髓》这本书正在消化。

看来目前的水平差的还很远那!

关于glTexEnvi函数中的一些参数解释:

GL_REPLACE:将Texture color完全替换当前帧中的颜色

GL_MODULATE:默认方式。将当前帧中的颜色替换成Texture Color和incoming primary color的混合。该选项能与光照模型相连,能保留下环境光(Ambient)和散射光(diffuse)的光照效果。但对镜反射(specular)影响较大,所以需要用其他方式解决。

GL_ADD:在当前帧的颜色中添加Texture Color的效果。该选项可以处理镜反射(只在Opengl 1.3或以上版本中才有)。

这篇关于学习3D地图引擎开发技术心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126009

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python利用GeoPandas打造一个交互式中国地图选择器

《Python利用GeoPandas打造一个交互式中国地图选择器》在数据分析和可视化领域,地图是展示地理信息的强大工具,被将使用Python、wxPython和GeoPandas构建的交互式中国地图行... 目录技术栈概览代码结构分析1. __init__ 方法:初始化与状态管理2. init_ui 方法:

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF