学习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

相关文章

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

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

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen