本文由lanbinfeng原创,转载请注明出处https://blog.csdn.net/lanbinfeng/article/details/82814952

魔兽世界作为MMO游戏的标杆,它的渲染效果也是一直让人叹为观止的。学习它的渲染细节,尝试它的渲染方式,大概是那些要成为渲染工程师、技术美术的一条捷径吧。魔兽世界的地图是由地形、水体、建筑物、摆设物品、天空、灯光、粒子动画和模型动画组成的。本系列的文章将用C#和OpenGL去解析和渲染魔兽世界的地图。至于为什么舍近求远使用C#而非C++,大概是为了方便将其改成Unity3D导入插件吧。

OpenGL是一组渲染接口。它只提供了在一个表面上渲染需要的相关的接口,至于怎么把表面嵌入窗口、怎么管理键鼠的输入、怎么解析和组织要渲染的资源这些它都不包含。windows只包含了OpenGL 1.0的模拟驱动,高版本的驱动则是包含在显卡驱动包里的。如果在调用OpenGL api时遇到各种异常访问,那大概就是因为你的OpenGL版本太低的缘故,我们使用的是1.4版本。

GLU则是另一个非常流行的OpenGL的辅助库,它实现了一组实用的窗口管理、键盘鼠标输入输出、一组非常实用的功能函数。使用它能大大简化我们在周边支撑环境的开发。

Windows中OpenGL是一组标准的WIndows API ,需要从opengl32.dll导入。VC++里有可以直接使用的头文件和LIB库,在C#中则要自己导入或者使用开源库了。我们使用的是CSGL这个库,下载地址https://excellmedia.dl.sourceforge.net/project/csgl/CsGL/1.4.1/csgl.1.4.1.dll.zip

下载了这个库,直接在工程中引用。然后创建一个类继承自CsGL.OpenGL.OpenGLControl。再把这个组件放到Form上就可以了。代码如下:

public partial class Form1 : Form{public Form1(){InitializeComponent();this.Controls.Add(_glView);_glView.Dock = DockStyle.Fill;GL.glMatrixMode(GL.GL_PROJECTION);GL.glLoadIdentity();GL.gluPerspective(45.0f, (double)_glView.Size.Width / (double)_glView.Size.Height, 1.0f, 1024.0f);GL.glMatrixMode(GL.GL_MODELVIEW);GL.glLoadIdentity();GLU.gluLookAt(5, 5, 5, 0, 0, 0, 0, 1, 0);GL.glEnable(GL.GL_DEPTH_TEST);Timer timer = new Timer();timer.Interval = 10;timer.Tick += delegate{_glView.glDraw();};timer.Start();}private GlView _glView = new GlView();}struct Vector3{public Vector3(float x, float y, float z){_x = x;_y = y;_z = z;}public float _x, _y, _z;};class GlView : OpenGLControl{public override void glDraw(){GL.glClearColor(0.1f, 0.1f, 0.2f, 1.0f);GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);// 立方体的8个顶点坐标Vector3[] vertex_list = {new Vector3( -0.5f, -0.5f, -0.5f ),new Vector3( 0.5f, -0.5f, -0.5f ),new Vector3( -0.5f, 0.5f, -0.5f ),new Vector3( 0.5f, 0.5f, -0.5f ),new Vector3( -0.5f, -0.5f, 0.5f ),new Vector3( 0.5f, -0.5f, 0.5f ),new Vector3( -0.5f, 0.5f, 0.5f ),new Vector3( 0.5f, 0.5f, 0.5f )};int[] index_list = {0, 2, 3, 1,0, 4, 6, 2,0, 1, 5, 4,4, 5, 7, 6,1, 3, 7, 5,2, 6, 7, 3,};GL.glDisable(GL.GL_CULL_FACE);GL.glBegin(GL.GL_QUADS);GL.glColor3f(0.5f, 0.5f, 0.5f);for (int i = 0; i < 6; ++i){for (int j = 0; j < 4; ++j){Vector3 pos = vertex_list[index_list[i * 4 + j]];GL.glColor3f(0.1f * i, 0.1f * i, 0.1f * i);GL.glVertex3f(pos._x, pos._y, pos._z);}}GL.glEnd();this.SwapBuffer();}}

运行效果:

本文由lanbinfeng原创,转载请注明出处https://blog.csdn.net/lanbinfeng/article/details/8281495

用C# OpenGL渲染魔兽世界地图系列(一) 魔兽世界地图介绍与OpenGL环境相关推荐

  1. OpenGL渲染视频(二)

    目录 一.前言 二.openGL渲染介绍 1.OpenGl渲染管线的流程 2.顶点着色器的介绍 3.片元着色器的介绍 三.openGL着色器语言GLSL介绍 1.数据类型 2.限定符 3.二维图像渲染 ...

  2. 教你实现GPUImage【OpenGL渲染原理】

    原文出处: 袁峥Seemygo(@袁峥Seemygo)    一.前言 本篇主要讲解GPUImage底层是如何渲染的,GPUImage底层使用的是OPENGL,操控GPU来实现屏幕展示 由于网上Ope ...

  3. 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★

    文章目录 一.导入 OpenGL 的两个头文件 二.链接 OpenGL 库 三.将 Windows 桌面窗口改成 OpenGL 窗口 四.获取窗口设备 五.设置像素格式描述符 六.设置像素格式 七.创 ...

  4. OpenGL渲染纹理和平面反射

    OpenGL渲染纹理和平面反射 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <stdio.h> #include "GL ...

  5. OpenGL渲染水water

    OpenGL渲染水water 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <stdio.h> #include <stdli ...

  6. C#中使用OpenGL(API)创建OpenGL渲染环境

    在C#中调用1.1版本的OpenGL函数,但是光有OpenGL函数还不能绘制图形,就像一个画家,他即使拥有绘画的技巧,还有画笔和颜料,如果没有画布,他也没有地方画画.有了画布,画家还需要画板把画布支起 ...

  7. [转贴]Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程

    看了opengles有一段时间了,算是了解了一下下.然后,就在基本要决定还是回归cocos2dx 3.2的,看了这篇好文章,欣喜转之~ 推荐看原帖: Cocos2d-x3.2与OpenGL渲染总结(一 ...

  8. 魔兽世界最新网通服务器列表,魔兽世界网通区,魔兽世界网通区在几区

    魔兽世界网通区,魔兽世界网通区在几区 来源:互联网/编辑:佚名/时间:2020-08-29 在手机上看 扫一扫进入手机端 魔兽世界哪个区是网通的? 网易接手之后就不分电信网通了.(三通小霸王) 不过2 ...

  9. android 渲染yuv数据,Android opengl渲染yuv420例子

    [实例简介] Android下使用OpenGL渲染yuv420p图像并显示.例子中提供了两种类型,一种使用GLSurfaceView在onDrawframe中调用native方法绘制,另外一种使用EG ...

  10. 在Win32程序中创建OpenGL渲染环境

    在Win32程序中创建OpenGL渲染环境 创建opengl渲染环境步骤: 选定像素格式 //WinMain()HDC dc = GetDC(hwnd);PIXELFORMATDESCRIPTOR p ...

最新文章

  1. load、loads、dump、dumps的区别
  2. 简单几步教你去除开机出现扫描硬盘!
  3. MySQL中处理Null时要注意两大陷阱
  4. win10 python免安装_使用Python编写免安装运行时、以Windows后台服务形式运行的WEB服务器...
  5. vc中运行外部程序的方法
  6. Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一)
  7. android 中国市场份额 2015,2015年安卓芯片市场分析:不再一家独大
  8. 三屏版知识竞赛类软件的开发需求分析及技术构思
  9. MATLAB学习笔记
  10. c语言check,C语言的CHECK-LIST
  11. android开发者模式 device,Settings中开发者模式的影藏和显示
  12. 【PyQt5与Requests爬虫】设计图形界面(GUI)实现小说下载器-进度条显示
  13. 华硕服务器系统安装系统安装教程视频,华硕的系统安装教程 华硕u盘安装系统教程...
  14. 2018年目标——计划未来
  15. RocketMQ如何维持心跳
  16. 超简单的java短信验证码,神级之作
  17. 万恶的ie8 hack问题
  18. 基于阿里云的智能插座——(立创EDA项目)
  19. 在markdown中控制文字的颜色,背景色,字体大小,字体样式及颜色RGB转换工具链接
  20. Direct3D中的光照

热门文章

  1. SQL-3(数据筛选)
  2. [合集]阿甘正传部分台词中英对照
  3. PXIe背板 全混合8槽 4 Link架构 系统带宽14GB/s 单槽4GB/s
  4. Linux系统编程总结
  5. 计算机硬件清理步骤,清洁计算机硬件的方法
  6. IMAS国际中小学数学竞赛考试详情
  7. uView1.0 indexList索引列表遇到的坑
  8. android上消息推送的实现
  9. 用一个I/O口控制1个三色指示灯, 2个单色指示灯
  10. 尤里的复仇II 回归【7题】