首页原创精华区最新随笔(rss)

现代OpenGL教程 04 - 相机,向量,输入

     摘要: http://huangwei.pro/2015-09/modern-opengl4/ 本篇教程中,我们会巩固上一篇所提到的矩阵和相机知识,并使用tdogl::Camera类来实现第一人称射击类型的相机。然后,我们会将相机与键盘和鼠标挂钩,使得我们可以移动和浏览3D场景。这里会学一些向量数学,还有上一篇没提到的逆矩阵。获取代码所有例子代码的zip打包可以从这里获取:https://git...  阅读全文

2015-09-01 17:38 作者: 威士忌【评论:0】【阅读:68】 

RvmTranslator 2.1 is released

     摘要: RvmTranslator 2.1 is released eryar@163.com 1. 完善基本体的转换 在使用RvmTranslator转换过程中发现少了一些模型,经查是早期版本有些基本体的转换没有实现,像Sloped Cylinder和Pyramid: 完善程序,将文本格式和二进制格式中转换Sloped Cylinder和Pyramid部分实现。 2. 提高...  阅读全文

2015-08-18 22:10 作者: eryar【评论:2】【阅读:577】 

Export AutoCAD Entities for PDMS Aids

     摘要: Export AutoCAD Entities for PDMS Aids eryar@163.com cad2pdms可以将AutoCAD中的直线Line,圆弧Arc及多段线Polyline转换成PDMS中的辅助线。主要用于将工厂设计中总图布局导入PDMS,方便其他专业参考定位。程序用法简单,步骤如下: 1. 将程序cad2pdms.dll复制到AutoCAD的安装目录; 2. 打开要导入PDM...  阅读全文

2015-08-15 19:33 作者: eryar【评论:12】【阅读:533】 

现代OpenGL教程 03 - 矩阵,深度缓冲,动画

     摘要: http://huangwei.pro/2015-08/modern-opengl3/ 本文中,我会将不会动的2D三角形替换为旋转的3D立方体。你会看到这样的效果: 现在我们终于能在屏幕上搞点有趣的东西了,我放了更多的动图在这里:http://imgur.com/a/x8q7R为了生成旋转立方体,我们需要学些关于矩阵的数学,用于创建透视投影,旋转,平移和“相机...  阅读全文

2015-08-14 17:03 作者: 威士忌【评论:0】【阅读:498】 

卷积与平滑滤波器的图像处理应用

     摘要: 卷积的介绍 卷积(convolution)是泛函分析里的一个概念,不过泛函分析一般都是数学系才学的,计算机系的学生大多在概率统计课本里了解到。它分为两种形式,一个是离散形式,一个是连续(积分)形式。在图像处理中我们更关心离散卷积,不过也先看看积分形式的卷积。现在假设我们有两个函数和,这里又叫做平滑函数或者卷积核,那么它们在连续空间的卷积是: 一般我们有一个这样的结论,就是当经过足够多次相同平滑函...  阅读全文

2015-08-12 00:35 作者: Shihira【评论:0】【阅读:512】 

IsoAlgo3d - A PCF 3D Viewer

     摘要: IsoAlgo3d - A PCF 3D Viewer eryar@163.com Alias的Isogen的PCF和IDF是生成管道ISO图的数据交换文件,且已经成为了国际标准。 IsoAlgo可以根据PCF文件生成DXF格式的ISO图纸,如下图所示: 关于IsoAlgo的更多信息请参考: http://www.cppblog.com/eryar/archive/2014/04/27/206...  阅读全文

2015-08-06 22:46 作者: eryar【评论:0】【阅读:629】 

现代OpenGL教程 02 - 贴图

     摘要: http://huangwei.pro/2015-08/modern-opengl2/ 在本文中,我们将给三角形加一个贴图,这需要在顶点和片段着色器中加入一些新变量,创建和使用贴图对象,并且学习一点贴图单元和贴图坐标的知识。本文会使用两个新的类到tdogl命名空间中:tdogl:Bitmap和tdogl:Texture。这些类允许我们将jpg,png或bmp图片上传到显存并用于着色器。t...  阅读全文

2015-08-06 20:17 作者: 威士忌【评论:0】【阅读:410】 

AVEVA PML.Net for DWG

     摘要: AVEVA PML.Net for DWG eryar@163.com Abstract. AVEVA PmlNet allows you to instantiate and invoke methods on .NET objects from PML proxy objects. The PML proxy objects behave just like any other PML obj...  阅读全文

2015-08-01 09:39 作者: eryar【评论:0】【阅读:779】 

定时刷新页面,比如定时拉取你所关注的股票行情

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php   $content = file_get_contents('http://www.baidu.com/s?wd=zhongguoyi...  阅读全文

2015-07-29 15:54 作者: 长寿梦【评论:0】【阅读:1053】 

基于Golang的游戏服务器框架cellnet开发日记(二)

Actor模型

看官们肯定还有大部分不是很熟悉Actor模型. 我这里基于Erlang, Skynet等语言和框架库来实战型解释下Actor模型. Actor概念

Actor模型和OO类似, 都是符合人的思维模式进行编码. OO里啥都是类, 用类来模拟对象, 解决所有的问题. Actor类似的使用Actor来模拟处理对象和单元

Actor在Erlang中叫进程(非操作系统进程), 在Skynet中叫svc(服务) Mailbox消息队列

每个Actor中包含有一个mailbox, 也就是邮箱. Actor自己只能通过收发mailbox与外界进行沟通, 也就是说, Actor之间只能通过消息进行互相交流, 不能采用其他形式.

mailbox本身是一个顺序队列, 先进先出. 而且mailbox从理论上说没有上限, 实际上呢, mailbox可能会由于不断的消息堆积导致内存上涨. 这都是正常的.

既然mailbox是队列, 也就代表着一个Actor里的逻辑处理是顺序的, 单线程的. 但Actor群体中每个Actor可以独立处理事务. 因此CPU可以分到每个Actor中进行处理,并发的大业也就奠定了基础. Actor的标识: ID

那么, Actor之间的消息要派发, 怎么定位Actor呢? 使用指针?句柄? 都不是的.

Actor定位使用用ID. 每个Actor有全局唯一的ID, 这里不使用GUID, 因为太难定位了, Erlang选择了一种优雅的方式实现ID. 先吃一个栗子:

0.11   1.2   3.5

这就是Erlang的pid(进程id). 点前面的部分代表的是某个独立域, 在这个域中通过序号标示每个进程的id,序号就是小数点后面的部分

那么, 有了ID, 派发消息就变的很简单了, 看栗子

send( 来源id,  目标id, 发送内容)

有来源id的存在, 是为了回发, 或者虚拟来源.  通信自由与部署无关性

有了Actor模型的存在, 逻辑都是分布式编写, 意思就是挂在每个Actor上来编写. 而由于Actor模型之间只有消息通信, 没有函数调用, 指针之类的本地内容. 因此让Actor的部署变的非常自由. 也就是说, Actor的逻辑, 无需关心自己被部署在1个进程, 还是几台机器. 但是为了内部性能和传输效率的考虑. 能不拆进程, 尽量在同一个进程处理, 能不拆到多台机器, 尽量减少拆到多台机器.

但当你确实需要并发时, 只需要轻松的修改下设置或者少量代码, 整个逻辑就可以跑在分布式集群中了

同步和异步

按照Erlang的处理方式, 默认进程(Actor)间使用send发送消息, 这个过程是异步非阻塞的;  当需要同步处理时, 会使用rpc, 也就是使用call的方式进行同步等待, 等对方进程(Actor)收到并处理消息后, 返回结果后, call的调用才结束.

如果call处理中, 其他的Actor给你发消息时, 消息会一直保存在你的Actor的mailbox中, 这里认为mailbox无限大

2015-07-28 16:59 作者: 战魂小筑【评论:0】【阅读:1013】 

nginx iocp(3):scm服务控制

     摘要:    为了使nginx支持windows服务,本文阐述以下主要的改进实现。ngx_main函数   为了在SCM服务中复用main函数的逻辑,将其重命名为ngx_main,并添加第3个参数is_scm以兼容控制台运行方式,声明在core/nginx.h中。    Code highligh...  阅读全文

2015-07-27 15:43 作者: 春秋十二月【评论:0】【阅读:1032】 

游戏中的随机概率

     摘要: http://huangwei.pro/2015-07/game-random/这段时间公司开发的游戏上线测试,许多玩家在抽卡时抱怨脸黑,很难抽到所需要的卡牌,而又有一部分玩家反应运气好能连着抽到紫卡,检查了下随机相关逻辑代码,并没有找出问题所在,玩家运气好与坏只是觉得真有可能是概率原因。测试开服了几天之后,需要开放某个限时抽卡活动,在内部测试时,我们发现玩家反应的问题在限时抽卡中格外明显,尤其是...  阅读全文

2015-07-27 01:20 作者: 威士忌【评论:3】【阅读:1145】 

关于字符集,编码格式,大小端的简单总结

     摘要: Windows为什么不用UTF8,非要搞得和其他平台不一样?  阅读全文

2015-07-25 01:11 作者: Richard Wei【评论:2】【阅读:1505】 

基于Golang的游戏服务器框架cellnet开发日记(一)

启程的故事

使用Golang写服务器是一件非常幸福的事情. 不用长时间的等待编译, 零依赖部署. 开发效率高, 多出的时间陪陪家人, 看书充充电多好. 所以Golang就像是手机界的苹果, 从发布后, 瞬间成为了口碑超好的开发语言.

Golang进行服务器开发, 最显耀的就是其并发架构, 能充分榨干每一个CPU. 但是Golang和Erlang不一样, Golang使用了CSP的模型, 而Erlang采用的是Actor模型. 两者区别仅仅只是消息队列归属范围区别而已. 但带来的巨大的框架实现及使用差异让Golang和Erlang阵营里的童鞋们撕逼很久.

其实可以这么理解. Erlang基于Actor模型的并发架构真正是一个框架, 让每一个人用同样的方法处理事情. 而不用更多的担心横向扩展的问题. Golang的CSP并发架构没有很多框框条条. 让开发者自由发挥,设计自己想要的结构. 但碰到需要横向扩展时, 还是需要考验架构人的经验和实力.

所以说, CSP和Actor其实着眼点不一样. 所以还是不能同日而语. 但项目还得做, 问题还得解决. 不能为每一个项目重复设计, 编写重复的代码来应对各种横向扩展的问题. 烦了, 火了, 所以就准备造一个用Golang实现Actor的轮子.

调研了一段时间, 使用Golang做Actor模型的实现并不多. 而且大多是实验性项目, 并没有真正像Skynet一样, 在项目中使用同时做开源的.

说到Skynet, 这是一个极好的开源轻量级游戏服务器框架. 使用lua的coroutine模拟goroutine, 同步+多线程逻辑, 用C底层帮你处理了复杂的Actor模型. 留给上层只是发发消息, 管理下id, 很是惬意. 再加上lua天生动态语言, 模拟Erlang的动态更新更不是啥大问题. 因此在服务器界, Skynet变的有名了起来.

既然要做轮子, 我果断选择不关门. 讨论群都开了, 博客一直更新, github也有, 为啥不搞开源轮子呢? 因此这次的服务器框架计划定位于开源. 目的是为Golang贡献一款轻量级的游戏服务器框架, 由大家支持, 供大众使用.

 

项目地址: https://github.com/davyxu/cellnet

感觉不错, 请给Star, 谢谢

2015-07-23 13:21 作者: 战魂小筑【评论:2】【阅读:1508】 

OpenGL Shader in OpenCASCADE

     摘要: OpenGL Shader in OpenCASCADE eryar@163.com Abstract. As implementation of one of the strategic steps in OpenCASCADE visualization component development road-map, support for GLSL shader programs has b...  阅读全文

2015-07-22 23:12 作者: eryar【评论:0】【阅读:718】 

A Simple OpenGL Shader Example II

     摘要: A Simple OpenGL Shader Example II eryar@163.com Abstract. The OpenGL Shading Language syntax comes from the C family of programming languages. Tokes, identifiers, semicolons, nesting with curly braces...  阅读全文

2015-07-21 22:56 作者: eryar【评论:0】【阅读:369】 

大服务器架构讨论

最近参加了一个大服务器架构讨论活动, 记录下心得 概述

游戏客户端采用Cocos2dx-Lua的纯Lua编写逻辑, 服务器采用Golang作为开发语言

游戏类型类似于COC,因此无需选服. 需要使用大服务器架构进行处理 数据库

采用Mongodb做持久存储, redis做跨服通信数据交换

使用UCloud的云技术, 省去了烦人的运维工作 通信及协议

客户端和服务器通讯使用HTTP短连接, 基于json的数据封包协议

服务器间大量使用Golang自带的json+rpc进行通信 服务器类型

服务器类型大致分为逻辑服务器,战斗服务器, 中心服务器 逻辑服务器

逻辑服务器负责日常逻辑及公共逻辑处理(好友, 公会)

1个逻辑服务器对应一个区, n个区均使用Ucloud云Mongodb进行数据存储 战斗服务器

战斗服务器是一个集群, 集群会返回一个负载最低的服务器返回使用

战斗服务器通过cgo技术与客户端C++/lua的战斗逻辑进行逻辑复用, 在此技术上进行

战斗逻辑的校验 中心服务器

客户端登陆前, 在中心服务器这里获得可登陆的逻辑服务器地址, 同时做一个负载均衡

短连接 评价

由于操作系统的技术趋于稳定, 同时, 手游的弱交互型导致的游戏架构趋于简单. 因此网络负载不再是游戏服务器技术的瓶颈. 从经验看来, 游戏服务器技术, 更重要的是还是看数据库的选型及处理方式. 

虽然Mongodb的性能上不如内存数据库. 但是从存储安全性上要比个人搭建的内存数据库简单, 安全

外加上云技术的引用, 性能的瓶颈和运维的技术复杂度迎刃而解

Redis用于跨服数据交互那是再好不过的数据中介了, 保证速度和稳定性, 绝对不是造轮子能比拟的

短连接在手游上处理起来比长连接简单一些, 无需做断线重连. 服务器的底层也是由Golang的框架库保证质量的. 因此负载毫无问题. 服务器对内及对外均使用json进行数据交换, 简化了协议处理. 也方便了调试

json rpc的性能损耗对于整个逻辑的处理来说均可以忽略不计

2015-07-21 10:30 作者: 战魂小筑【评论:7】【阅读:1525】 

深入UEFI内核(一)ResetVector

     摘要: 介绍UEFI系统从加电到CPU执行第一条指令的过程,并且介绍系统UEFI ROM的组成,.fdf文件的格式  阅读全文

2015-07-12 10:17 作者: djx_zh【评论:3】【阅读:1580】 

Make Helix Curve in OpenCASCADE

     摘要: Make Helix Curve in OpenCASCADE eryar@163.com Abstract. OpenCASCADE does not provide helix curve directly, but you can build a helix curve by the pcurve of a surface(curve on surface). When you unders...  阅读全文

2015-07-09 21:52 作者: eryar【评论:2】【阅读:905】 

使用thrift实现订阅服务和发布服务

     摘要: 服务:订阅服务 market_subscriber 和 发布服务 market_publisher功能:market_subscriber 能够向 market_publisher 请求订阅某些类型的消息,当 market_publisher 有该类型的消息时,需要把它推送给订阅服务。流程:1. market_publisher 服务启动,监听端口,注册事件处理函数,处理订阅请...  阅读全文

2015-07-07 17:57 作者: kongkongzi【评论:1】【阅读:859】 

一个诡异的Unity3D的网络问题

     摘要: 项目中, 我们使用Unity3D做客户端开发. 自己撸了一套C#网络库, 随着项目的推进, 问题来了: 问题 每次Unity3D编辑器打开时, 连接服务器都会有一定几率失败, 需要反复关闭再打开编辑器3~4次后, 才能正常接收到封包 转载请注明: 战魂小筑http://www.cppblog.com/sunicdavy 探索 我们的网络库基于C#的Begin/End系的异步Socket, 这种so...  阅读全文

2015-07-06 16:11 作者: 战魂小筑【评论:6】【阅读:1067】 

Windows 8.1 Visual Studio 2013 编译Apache thrift访问Apache Hbase

     摘要: Windows 8.1 Visual Studio 2013 编译Apache thrift访问Apache Hbase  阅读全文

2015-07-05 00:41 作者: 盛源博【评论:0】【阅读:951】 

A Simple OpenGL Shader Example

     摘要: A Simple OpenGL Shader Example eryar@163.com Abstract. OpenGL Shading Language, the high-level programming language defined to allow application writers to write programs that execute on the programma...  阅读全文

2015-06-27 21:38 作者: eryar【评论:0】【阅读:1201】 

nginx iocp(2):udp异步接收

     摘要:    nginx的域名解析器使用已连接udp(收发前先调用ngx_udp_connect)发送dns查询、接收dns响应,如上篇tcp异步连接所讲,iocp需要先投递udp的接收操作,才能引发接收完成的事件,因此要对域名解析器和udp异步接收作些改进。 发送后投递     dns查询由ngx_resolver_send_query函数实现,...  阅读全文

2015-06-25 17:01 作者: 春秋十二月【评论:0】【阅读:1458】 

nginx iocp(1):tcp异步连接

     摘要:    iocp是Windows NT操作系统的一种高效IO模型,对应于Linux中的epoll和FreeBSD中的kqueue,nginx对ske(select、kqueue和epoll的首写字母组合)的支持很好,但截止到1.6.2版本,还不支持iocp。由于ske都是反应器模式,即先注册IO事件,当IO事件发生(读写通知)时,在其回调内主动调用API来读或写数据;而...  阅读全文

2015-06-24 17:02 作者: 春秋十二月【评论:1】【阅读:1669】 

Unity3d 动态批处理的问题

   这段时间做unity3d的优化,主要的入手是减少draw call。
    1、代码上主要是把一些零碎的同材质的合并成一个大的mesh。
    2、减少不必要的全屏后期处理。把摄像机的rendering path,由deferred修改为forward。这样修改的原因是,我们场景中只是使用了一个灯光,延迟渲染并没有很有发挥其优势,另外使用向前渲染的话,引擎的动态合并会有很好的作用。
     经过上面两部分的操作,draw call 减少的非常多,并且游戏在目标平台上也能流畅的运行。但是发现一个非常明显的问题: 在两个物体紧紧挨着的边缘会明显的有裂痕在闪烁,比如一个赛段拼接另一个赛段的连接处。
    一开始以为是depth buffer 的精度问题导致的 depth fighting。所以调整了摄像机的near clip,但也还是会出现,只是调整near clip也有限制,否则会影响游戏,在调整near clip和把抗锯齿anti aliasing设置调整4* 或8* 裂缝的闪现会没那么明显,但是同样存在。想使用w buffer 来代替depth buffer来试下,但是无奈不清楚unity怎么处理,(当时想,如果最后没办法就程序把连接的网格自己合并,这样就不会出现裂缝了)所以先停下做其他的了。后来想到之前这种裂缝现象怎么没注意到呢,至少是不明显的。所以觉得会不会是rendering path,不同导致的呢。
    分别build两个程序,使用不同的rendering path。确实是使用延迟渲染的不会有裂缝闪现的现象,而向前渲染会有,这真是使人摸不着头脑呀,两种不同的渲染方式 怎么会出现这样的情况呢?还是不相信是由于不同的渲染方式导致的,继续找原因,发现两个有裂缝闪现的mesh,是用的相同材质,想到会不会是动态批处理的原因呢?   
    使用向前渲染时在play setting中去掉Dynamic batching 裂缝闪烁的现象就不会出现了,最终确定是引擎提供的动态批处理导致的问题。那为什么用延迟渲染时没呢,那是因为用延迟渲染的话,引擎对动态批处理很有限,(你在4.x版本的unity上,每添加一个cube,就要增加两个draw call,而向前渲染的话,会帮你动态批处理,并不会每个cube都增加draw call)。
    知道问题所在,修改也比较容易了,但是为什么其Dynamic batching 会导致裂缝闪烁,这个问题还是有待研究,但是unity内部是如何实现的不知道。希望了解这方面的人能指点一二!

2015-06-23 22:10 作者: 木华【评论:0】【阅读:1041】 

一个启动服务的SHELL脚本

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#!/bin/bash#zhangtaoPROCESS_NAME="msgdbgate"LOG_FILE="run.log"PID_FILE="$PROCESS_NAME.pid"BASE_DIR=""R...  阅读全文

2015-06-19 18:48 作者: 长寿梦【评论:0】【阅读:1509】 

游戏数据库选型mysql,mongo, redis, memcached

     摘要: 数据库选择历程 我们的项目一直使用MySQL作为数据库. 无论是从C++的服务器, 还是到Golang服务器. 当年搞服务器时, 看大部分人都是用SQL(MySQL/SQLServer), 而Mongo感觉像邪教一样, 再加上服务器还是Linux比较正统, 所以果断选了MySQL. 刚开始感觉,游戏服务器的数据存储其实应该是蛮神圣的过程. 那么多的数据, 需要按照MySQL一样分表, 分字段存储,...  阅读全文

2015-06-19 16:23 作者: 战魂小筑【评论:5】【阅读:1426】 

Isodraft output attributes

     摘要: Isodraft output attributes eryar@163.com AVEVA Isodraft中有许多开关用于配置管道ISO图的图面内容,这些配置都可以从文档《Isodraft Reference Manual》中找到。如有需要在管件上标出管底标高,如何在Isodraft中配置呢? 经过查找,发现Isodraft中有这个选项:OUTCOM,可以将管件指定的属性(也可以是自定义属性U...  阅读全文

2015-06-15 21:55 作者: eryar【评论:8】【阅读:1087】 

为什么QMdiArea::activeSubWindow返回null

     摘要: 为什么QMdiArea::activeSubWindow返回null  阅读全文

2015-06-13 20:06 作者: 力为【评论:0】【阅读:1664】 

技 术 改 变 世 界

网站分类

24小时内最热随笔

统计信息

聚合

Blog客户端API

推荐客户端

博客排行榜[前100人]