OGRE架构

四大开源3d游戏引擎探究 XreaL项目是基于Quake 3 Arena修改版引擎的非商业多人射击游戏,目标是在渲染技术上能与当今的商业游戏一较高下,开发者声称它是当前最先进的开源游戏引擎。根据Phoronix的介绍: XreaL引擎在Quake 3 Arena基础上改变了很多,它是基于Quake引擎中唯一使用OpenGL着色语言(GLSL)渲染器的,目前支持OpenGL 2.0 ES规格,但开发者已瞄准了新的OpenGL 阅读详情

             Root :是 ORGE 核心系统的一部分,必须在所有 ORGE 对象产生之前初始化,并在所有 ORGE 对象销毁之后销毁,用来配置系统。
  • RenderSystem:是用来发送渲染操作的系统。它是一个抽象类,而另外拥有不同的实现。(OpenGL, DirectX)。
  • SceneManager:除Root对象外最重要的ORGE部件。它创建和管理摄象机,可移动物体,灯光和材质,以及不可移动的场景的材质(如天空,大地)。SceneManager保存了各种物体的列表,以便处理物体之间的关系。应用程序无须为之操心。SceneManager还把场景发送到RenderSystem里进行渲染。它确定哪些物体需要绘制,生成一个场景,发送到渲染系统。SceneManager拥有许多子类,因为如何选择物体进行渲染的算法十分多样。缺省的SceneManager功能十分低下,而某些SceneManager子类功能十分强大。例如:BSP(Binary Space Partition)SceneManager处理一个大型建筑。
  • ResourceManager:是一些管理资源的类的基类。“资源”指的是贴图,mesh和地图。TextureManager是管理贴图的ResourceManager。MeshManager是管理mesh的ResourceManger。
  • Mesh对象

    Mesh对象表示出一种不连续的模型,一组自包含的远小于世界尺寸的几何物体。Mesh对象通常用来表现可移动的小型物体,而不是不可移动的背景。
    Mesh是一种资源,可被MeshManager管理。它们通常被保存在文件里,以”.mesh”为扩展名。”.mesh”文件可以通过一个建模工具。
    MeshManager::createManual方法可以创建一个Mesh。

    Entity对象

    Entity是场景的一个可移动物体的实例。它可以是车,人,狗等等。它不必固定在一个位置上。
    Entity是不连续的Mesh的集合。多个Entity也可以由同一个Mesh所构成,如果你希望的话。
    使用SceneManager::createEntity方法可创建一个Entity,参数为它的名字和它所使用的Mesh的文件名。通过MeshManager,我们能保证同一个Mesh只装载一次。
    Entity如不加入到SceneNode中,就不认为它是场景的一部分。通过加入SceneNode,Entity能表现出复杂的继承行为。可以通过修改SceneNode的位置来影响一组Entity。
    一个Mesh带来一组材质的定义。你可以在原来基础上改变Mesh的材质,因为每个Mesh由子Mesh单元组成。子Mesh单元分别存储着Mesh的各种材质。通过更换子Mesh,就可以改变原有Mesh的外观。
    Entity也是如此,通过更换子Entity,也可改变原有Entity的外观。

    Materials对象

    材质对象控制物体在渲染系统中如何显示,它包括颜色,亮度等等。SceneManager管理所有的材质。当每个材质被加入到SceneManager时,它们都有一系统缺省属性。
    •  周围的反射光(白色)
    •  漫反射(白色)
    •  emmissive(黑色:无)
    •  亮度(无)
    •  没有贴图层,也就没有贴图
    •  SourceBlendFactor = SBF_ONE, DestBlendFactor = SBF_ZERO (不透明)
    •  开启深度缓冲检查
    •  开启深度缓冲写
    •  深度缓冲比较 = CMPF_LESS_EQUAL
    •  周围光线颜色 = ColourValue(0.5, 0.5, 0.5) (半灰)
    •  开启动态光线
    •  Gourad 阴影模式
    •  Bilinear texture filtering

    通过对SceneManager::getDefaultMaterialSettings()的返回值进行更改,可以改变这些缺省值。使用方法SubEntity::setMaterialName()创建一个新的材质,再把一个新的子Entity连接上去。

    Overlays

    Overlays是用来显示HUD的,如HP血槽。它可以是2维或3维形式。2维的用于显示HUD,3维的可用来表示特殊效果如雨雪等。用 SceneManager::createOverlay方法可以创建两种overlay。你也可用”.overlay”脚本定义它们。 Overlay::setZOrder()方法决定了多个overlay的前后顺序。
    •  创建2维overlay
    •  使用OverlayElement类。
    •  使用OverlayContainer,后者是前者的容器。
    •  使用GuiManager类,使用GuiManager::createOverlayElement方法创建一2维元素到一个overlay。
    •  例子:GuiManager::getSingleton().createOverlayElement("Panel", "myNewPanel");
  • 引自:http://bbs.gamedev.youkuaiyun.com/Web/54201/ShowPost.aspx

Irrlicht和Orge引擎比较 对于Irrlicht和Orge引擎的各项指标进行比较,最后Orge完全胜出 立即下载

相关推荐

帮助理解 Ogre 源码体系结构的几张图片

Ogre 类关系图,一帧渲染流程图,结构图,对理解Ogre源码有帮助。

OGRE | 渲染引擎入门(一) 编译与安装

OGRE介绍 Ogre(Object-orientedRendering Engine ),是一个面向对象的图形引擎。 产品特点 完全面向对象. 对GL和DX进行封装. 可扩展的框架 【插件系统】: 需要的功能以插件的形式添加进系统扩展系统 实现横向扩展 渲染状态管理 / 空间剔除 / 透明度的处理 等由系统自动解决 干净整洁的设计和完整的文档 平台和API D3D9 D3D11 Op...

【黑键】 1606

ORGE引擎课件:orge入门,orge提高,orge游戏编程

ORGE引擎课件:orge入门,orge提高,orge游戏编程,ORGE经典

【亲测免费】 探秘Ogre:一款强大的3D渲染引擎

是一个开源的、跨平台的实时3D图形渲染引擎,专为游戏开发和专业可视化应用设计。它的目标是简化复杂3D场景的构建与管理,让开发者可以专注于创新,而不是底层图形API。本文将带你了解Ogre的核心技术特性,应用场景,以及为何你应该考虑在你的项目中使用它。 ## 项目简介 Ogre始于2001年,由Steve Jackson创立,其名字来源于“OGRE”,这是一个早期的MUD(多用户地下城)游戏中的...

gitblog_00078的博客 1670

引擎学习资源 orge

很多学习ogre游戏引擎的资料,精心收集的课件,可供初学者入门

告别‘小目标’丢失!手把手复现DNANet红外检测网络(PyTorch版)

本文详细介绍了如何使用PyTorch从零实现DNANet红外小目标检测网络,重点解析了DNIM模块和CSAM注意力机制的设计与实现。通过实战教程,帮助开发者解决红外小目标检测中的特征提取和训练调参难题,适用于军事侦察、安防监控等场景。

weixin_28701593的博客 253

OGRE架构图(http://bbs.gamedev.youkuaiyun.com/Web/54201/ShowPost.aspx)

 OGRE架构图 Root:是ORGE核心系统的一部分,必须在所有ORGE对象产生之前初始化,并在所有ORGE对象销毁之后销毁,用来配置系统。 RenderSystem:是用来发送渲染操作的系统。它是一个抽象类,而另外拥有不同的实现。(OpenGL, DirectX)。 SceneManager:除Root对象外最重要的ORGE部件。它创建和管理摄象机,

1333

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

OGRE的良好架构

OGRE独立于平台(windows or linux or MacOS),独立于3D接口(Direct3D和OpenGL),独立于场景类型(不论是室内场景还是室外场景)。OGRE中没有对窗体类型的依赖,没有假定你使用那种接口,没有预先假定你将于创建的场景的类型。所有3D方面的概念都是基于核心的数学描述而不是某种特殊的应用程序接口。       当然OGRE必须处理底层的平台特性,接口和场景,但这

a936676463的专栏 1849

从晶体管到触发器:为什么芯片设计必须区分同步/异步复位?

本文深入探讨了芯片设计中同步复位与异步复位的物理本质与工程权衡。从晶体管级的CMOS结构出发,剖析了两种复位方式在物理实现、时序可靠性(如建立/保持时间、恢复/移除时间)上的根本差异,并分析了在不同应用场景下的选择策略。文章强调,理解复位信号的底层机制对于确保芯片时序收敛、系统上电确定性及整体鲁棒性至关重要。

time3的博客 221

【C语言】字符常量详解

字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。

LuckiBit 5021

【Ogre引擎架构-第七讲】 爆破特效Explosion-粒子系统初体验 脚本

【Ogre引擎架构-第七讲】 爆破特效Explosion-粒子系统初体验 时间  2015-10-04 原文   http://blog.youkuaiyun.com/nanhu2012/article/details/48897737   粒子系统作为一款图形引擎特效系统的核心而存在,Ogre的粒子系统经过专门的扩展插件的研发而变得功能强筋,绝不仅仅是一些OpenGL教材上

linuxheik的专栏 819

一文弄懂Word2Vec之skip-gram(含详细代码)

目录 前言 一、什么是Skip-gram算法 二、目标是什么 三、定义表示法 3.1 one-hot向量 3.2 词向量(word vector) 3.3 单词矩阵 3.4 单词相似度 3.5 softmax函数 3.6算法过程 3.7 求softmax 四、skipgram代码实现 4.1 如何把词转换为向量 4.2 CBOW和Skip-gram的算法实现 Skip-gram的理想实现 Skip-gram的实际实现 4.3 使用Pytorch实现Skip-gram .

Python,数据分析,机器学习,深度学习 1万+

Orz是一个基于Ogre思想的游戏开发架构

Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能。Orz和其他的商业以及非商业游戏开发架构不同。Orz更专著于开发者的感受,简化开发者工作。Orz可以用于集成其他Ogre3D之外的图形引擎。Orz 0.4.0版本以及以后采用MIT开源授权。关于Orz的评价,请看这里。  Orz是一个易扩展、易使用的面向对象游戏开发框架。Orz全称是Open Resources Zon

痞子龙3D编程 6173

【U-Net 数据集制作】如何制作自己的图像分割数据集?(标注与格式转换),图像分割数据集制作与转换神器

在前面的课程中,我们像搭积木一样手写了 U-Net 的网络架构。很多同学迫不及待地想把自己的图片喂进网络开始“炼丹”。但是,深度学习界有一句名言:“数据决定了模型的上限,而网络结构只是在逼近这个上限。用标注工具标出来的是 JSON 文件,怎么变成 U-Net 需要的黑白掩码(Mask)图?为什么我的 Mask 肉眼看是黑白的,一放进 PyTorch 训练就报?如何快速按 8:2 的比例把几千张图片和标签划分成训练集和验证集?

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 195

ThingsBoard PE专业版解决方案技术文档——温度&湿度

温湿度解决方案

weixin_67440240的博客 820

Orz是一个基于Ogre思想的游戏开发架构 .

Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能。 Orz和其他的商业以及非商业游戏开发架构不同。Orz更专著于开发者的感受,简化开发者工作。 Orz可以用于集成其他Ogre3D之外的图形引擎。 Orz 0.4.0版本以及以后采用MIT开源授权。 关于Orz的评价,请看这里。   Orz是一个易扩展、易使用的面向对象游戏开发框架。Orz全称是Open Resour

debugconsole的专栏 881

OpenClaw实战系列03:Slack/Telegram国际版接入实战指南

在当今的软件开发和工作流自动化中,将项目管理工具与即时通讯平台集成已成为提高团队协作效率的关键。OpenClaw作为一个开源的自动化工具,通过接入Slack和Telegram国际版,可以实现实时通知、自动化任务触发和团队协作的无缝对接。本文将详细介绍如何实现OpenClaw与这两个主流即时通讯平台的集成。OpenClaw是一个开源的自动化工作流引擎,支持多种触发器和执行器,能够帮助开发团队实现CI/CD流程、任务调度、监控告警等自动化场景。模块化设计:支持插件化扩展多触发器支持。

PeterPan的博客 588

转: Orz是一个基于Ogre思想的游戏开发架构

Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能。Orz和其他的商业以及非商业游戏开发架构不同。Orz更专著于开发者的感受,简化开发者工作。Orz可以用于集成其他Ogre3D之外的图形引擎。Orz 0.4.0版本以及以后采用MIT开源授权。关于Orz的评价,请看这里。 Orz是一个易扩展、易使用的面向对象游戏开发框架。Orz全称是Open Reso...

aolan7349的博客 225

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

OGRE 2.1简明扼要的分析

link:http://www.aiuxian.com/article/p-2835471.html 据说OGRE 2.1 要追上商业引擎,还是比较期待。昨天下午下载了OGRE 2.1,HG然后CMAKE,看了一下代码,写点记录。 引擎=数据结构+算法+架构 架构=模块化(适合原型封装,简洁高效不够方便,更方便需要抽象)+抽象化(适合人类思维接口,需要合适的类抽象,但

kasteluo的专栏 3186

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

OGRE分析之设计模式 iterator

一、Singleton  Singleton 模式是OGRE中用的最广泛的设计模式,若干类都使用了该模式。Singleton模式本身很简单,实现方式多种多样,简单的如GoF提到的实现方式,复杂的有Loki库中解决方案,而OGRE的实现方法也是十分简单。OGRE提供了一个模板类——Ogre::Singleton,作为所有singleton类的基类: template class Singl

WillbeFly的专栏 920

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

学习OGRE的思路

学习OGRE的思路

流水账 932

Ogre插件简介

本来,打算写一下SampleBrowser范例的介绍的,但是觉得有必要在介绍OGRE代码之前先介绍一下OGRE插件机制的大致结构,毕竟OGRE里面插件机制设计的还是挺不错的,可以当做教科书般来学习,而且对以后代码的理解也有很多必要,所以在这里穿插一集,也让这个周末自己显得积极一些。好了,在一个简单的开场白之后我们进入主题,本章主要介绍的内容主要如下: 动态库  动态库的一些基本知识OGRE

flame99999的专栏 1299

Ogre,你的好

爱情无望,那就只好继续与代码做伴,相依为命了。 最近上OgreWiki,不知是不是最近屏蔽解除了还是参加了GoogleCode就不一样些乐,发现贡献者栏里与以前有了很大的不同,大家可以去时常瞧瞧, http://www.ogre3d.org/about/team 其中的一位华人大概就是参与TLBB组的成员吧,对他和Sinbad一起膜拜下~~ Ogre到底有什么好? 以前了解实在...

aigao1992的博客 224

OGRE 体系结构

作者: 刘鹏 日期: 2009-03-07 OGRE 是一个开源图形渲染引擎,本文给出了它的总体类图和绘制一帧图形的序列图,读者从中可以体会 OpenGL 等底层图形库是怎么封装的,以及如何设计一个图形渲染引擎。 简介OGRE (Object-Oriented Graphics Rendering Engine),即面向对象图形渲染引擎,是一个面向场景管理的 3D

痞子龙3D编程 4822
上一篇: STL中map用法详解
下一篇: C++ 之“友元类”学习笔记
小文兄弟
博客等级 码龄17年 28粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值