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

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】【阅读:260】 

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 作者: 春秋十二月【评论:1】【阅读:304】 

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】【阅读:428】 

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】【阅读:250】 

一个启动服务的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】【阅读:416】 

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

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

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

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【评论:1】【阅读:419】 

为什么QMdiArea::activeSubWindow返回null

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

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

swift 去除String首尾的空格,以及指定字符串

     摘要: @import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 直接给一段调用实例:@import url(http://www.cppblog.com/CuteSoft_...  阅读全文

2015-06-11 17:22 作者: 何清龙【评论:0】【阅读:608】 

正确理解shadowmap的实现方式

     摘要: 首先确定阴影的最基本原理:
阴影是以光源作为摄像机(叫作Camera_light),光照方向作为摄像机的look的方向,然后把这个摄像机看到的场景物渲染到纹理,这个纹理就叫shadowmap。  阅读全文

2015-06-10 20:44 作者: 狂烂球【评论:1】【阅读:448】 

git服务器简易搭建法

受尽svn各种折磨的小伙伴都听说过git. 但是网上一搜索, 本来打算跟svn一样. 下一个服务器, 装下就可以开始用了.

没想到啊, 没想到. 居然需要Linux天赋点…

好吧, 拜鸟哥门下把Linux上手了吧, 刚开始搭git, 靠. 又需要公钥和各种辅助软件.

伤不起啊

很多小伙伴们, 自此继续沉默的继续使用svn

我们没有放弃, 我们找到了简(shan)易(zhai)搭建法

 

先看疗效:

1. 无需公钥

2. 只需要几个最常用的Linux命令就可以搭建

 

看步骤

1. 准备Linux服务器, 安装好git(一般都是默认装好的)

2. 命令行操作

useradd git   #创建一个git账号

passwd git    #设置git账号的密码

su – git    #切换到git账号

cd ~  #转到用户目录

mkdir 项目名称.git   #建立项目git文件夹

cd 项目名称.git

git –-bare –share init   #初始化git库

 

3. 马上拿起你的git客户端( 乌龟, SourceTree均可)输入这样格式的地址git@ip:/path/to/project.git

例如: git@192.168.1.2:/home/git/YourProject.git

git pull时, 需要输入密码, 就输入上面创建好的git账号的密码就可以

开始使用吧!

 

Tips

这种方法搭建的git服务器仅限于小团队和对贡献代码不敏感的项目而生

git本身的公钥是为了防止别人伪造用户名进行虚假提交. 但这个方法绕开了这点

想开新的git库时, 切记使用git账号去重复以上步骤, 若使用root级别账号创建的文件夹使用客户端时会遇到权限不足的提示

2015-06-10 14:53 作者: 战魂小筑【评论:0】【阅读:606】 

[Unity3D]一个简单的魔方Demo

     摘要: 前段时间无意间看到一个魔方的Demo,正好那时对魔方也挺感兴趣,也就抽时间自己模仿了一个。  阅读全文

2015-06-07 12:15 作者: AZL【评论:2】【阅读:908】 

我的Golang全接触

     摘要: 满打满算, 从好友推荐Golang至发文时, 使用Golang已经有1年多了. 这种时间对于C/C++ Java这些老者来说, 简直是菜鸟级别的经验 但作为新生代语言的特点就是实战. Golang这一年里, 已经为项目提供了稳定的服务器和强大的扩展能力, 与客户端的Unity3D里的C#一样, 都是强大, 极致开发效率代表的优秀开发语言. 用途篇 Golang到底拿来做啥? 我需要么? 高效(性...  阅读全文

2015-06-04 17:19 作者: 战魂小筑【评论:0】【阅读:846】 

Web API

     摘要: Web API简要介绍  阅读全文

2015-05-31 14:17 作者: 【评论:0】【阅读:809】 

nginx-openresty-windows 改造支持,提升性能,开源

     摘要:   阅读全文

2015-05-22 13:45 作者: 蔡东赟【评论:6】【阅读:884】 

Use Qt in Debian for OpenCASCADE

     摘要: Use Qt in Debian for OpenCASCADE eryar@163.com Recently several OpenCASCADE enthusiasts want to build my simple Qt demo about OpenCASCADE on ubuntu system, but could not compile it successfully. Becau...  阅读全文

2015-05-21 22:10 作者: eryar【评论:0】【阅读:478】 

现代OpenGL教程 01 - 入门指南

     摘要: http://huangwei.pro/2015-05/modern-opengl1/ modern-opengl 译序 早前学OpenGL的时候还是1.x版本,用的都是glVertex,glNormal等固定管线API。后来工作需要接触DirectX9,shader也只是可选项而已,跟固定管线一起混用着。现在工作内容是手机游戏,又转到OpenGL ES,发现OpenGL的世界已经完...  阅读全文

2015-05-21 14:11 作者: 威士忌【评论:2】【阅读:935】 

Linux ICMP消息的产生与转换

     摘要:    ICMP在IP系统间传递差错和管理报文,是任何IP系统必须实现的组成部分。Linux 2.6.34中ICMP模块的实现在linux/icmp.h,net/icmp.h和ipv4/icmp.c中,导出了icmp_err_convert数组和icmp_send函数,供其它网络子系统使用。在其它网络子系统中,当检测到错误时,调用icmp_send产生并发送相应的ICMP差错消息...  阅读全文

2015-05-18 19:52 作者: 春秋十二月【评论:0】【阅读:560】 

无锁有序链表的实现

     摘要: 无锁有序链表可以保证元素的唯一性,使其可用于哈希表的桶,甚至直接作为一个效率不那么高的map。普通链表的无锁实现相对简单点,因为插入元素可以在表头插,而有序链表的插入则是任意位置。 本文主要基于论文High Performance Dynamic Lock-Free Hash Tables实现。 主要问题 链表的主要操作包含insert和remove,先简单实现一个版本,就会看到...  阅读全文

2015-05-05 19:47 作者: Kevin Lynx【评论:0】【阅读:1750】 

操作系统实现(三):中断

     摘要: 上一篇提到当访问的页表和页不在内存中时会触发 Page Fault 异常,操作系统需要在异常处理函数中分配内存页并设置好相应的分页表项。异常是一种中断类型,注册异常处理函数就是注册中断处理函数,中断处理函数注册在一个叫 IDT(Interrupt Descriptor Table) 的地方。IDT中断处理函数在实模式下注册在 IVT(Interrput Vector Table) 中,在保护模式下...  阅读全文

2015-05-05 10:03 作者: airtrack【评论:0】【阅读:794】 

AVEVA RvmTranslator

     摘要: AVEVA RvmTranslator eryar@163.com AVEVA的RVM文件格式包含了三维模型数据及其他信息,可用于工厂模型的浏览、评审等。常见的三维浏览及评审软件如Autodesk的Navisworks、Intergraph的评审软件SmartPlant Review Publisher等,都提供了对RVM格式的支持。 AVEVA的RVM格式分为两种:文本格式的和二进制格式的。因...  阅读全文

2015-05-04 20:13 作者: eryar【评论:0】【阅读:882】 

并行编程中的内存回收Hazard Pointer

     摘要: 接上篇使用RCU技术实现读写线程无锁,在没有GC机制的语言中,要实现Lock free的算法,就免不了要自己处理内存回收的问题。 Hazard Pointer是另一种处理这个问题的算法,而且相比起来不但简单,功能也很强大。锁无关的数据结构与Hazard指针中讲得很好,Wikipedia Hazard pointer也描述得比较清楚,所以我这里就不讲那么细了。 一个简单的实现可以参考我的...  阅读全文

2015-05-03 20:46 作者: Kevin Lynx【评论:0】【阅读:1056】 

Linux套接字与虚拟文件系统(2):操作和销毁

     摘要:    接上篇初始化与创建,本篇阐述Socket操作和销毁两部分的实现。 Socket操作    系统调用read(v)、write(v)是用户空间读写socket的一种方法,为了弄清楚它们是怎么通过VFS将请求转发到特定协议的实现,下面以read为例(write同理),并假定文件描述符对应的是IPv4 TCP类型的socket...  阅读全文

2015-05-03 16:55 作者: 春秋十二月【评论:0】【阅读:1002】 

Linux套接字与虚拟文件系统(1):初始化和创建

     摘要: 引言    在Unix的世界里,万物皆文件,通过虚拟文件系统VFS,程序可以用标准的Unix系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作。对于网络套接字socket也是如此,除了专属的Berkeley Sockets API,还支持一些标准的文件IO系统调用如read(v)、write(v)和close等。那么为什么socket也支持文件IO系统调...  阅读全文

2015-05-03 16:31 作者: 春秋十二月【评论:0】【阅读:1384】 

Unity3d 的ui处理

     这几天接手了项目逻辑部分,发现ui这部分有些问题,也花了点时间处理。
     项目中ui主要是通过两种方式处理的,一、 通过AE插件导出数据直接使用; 二、通过NGUI。
     AE插件的好处是减轻了程序的负担,美术也方便,直接在AE上做好动画就可以了。但是有个问题就是AE的动画都是缺少交互,在上面不能写脚本代码,比如有些动画可以划分背景是一个Ae做的动画,在前面是得分显示,这样的话就不能全部用AE 只能把前面的数字用NGUI来做。这样一来问题就出现了,排序问题!!!!
    看其代码发现AE插件的渲染部分通过z位置来排序,并且为每一个原始图片一个新的材质,并且还要为其开个灯光,并无优化处理。 而ngui 可以通过控制渲染顺序和拼图达到一点的优化,减少批次,其排序并不与位置z有关系。所以他们的前后关系不是随随便便设置个z来决定的。

解决方法:
      一、通过多摄像机,分为AE层,和NGUI层用不同的摄像机。这样是可以控制前后关系。但是这样有时往往两个ui的摄像机都不够使用,并且添加太多摄像机也添加了管理的麻烦,比如做镜头的淡入淡出等等。
      二、修改AE插件中的渲染部分,让其使用NGUI的组件来做渲染。这样就好比把在不同坐标系的两者搬到同一坐标了,这样就好处理排序问题了。

最终,为了优化和以后的方便,加上Ae插件本身也bug,所以决定使用第二中方法解决。其修改也还比较容易,不拼图的用UITexture(开发过程中不拼图, 大图如背景图也不拼),拼图了的用UISprite作为渲染载体。主要注意2D的锚点位置,特别是裁了空白边拼图后描点的位置的变化,ae层次结构关系,ae合成内部的depth的设置等等。


2015-04-27 21:28 作者: 木华【评论:0】【阅读:586】 

自控力读书笔记

     摘要: 附上URL:http://book.douban.com/subject/10786473/1,锻炼意志力的方法A,每天冥想5分钟B,锻炼对于锻炼有两个常见问题,第一个是“需要锻炼多久”,第二个是“什么锻炼最有效”,这两个问题的答案是“你想锻炼多久”,“你真的会去做什么样的锻炼”C,睡眠睡足觉能显著提高...  阅读全文

2015-04-27 15:34 作者: whspecial【评论:1】【阅读:1149】 

操作系统实现(二):分页和物理内存管理

     摘要: 上一篇从 Bootloader 开始到内核载入使用的都是平坦内存,即所有地址对应实际的物理地址。现代操作系统都使用分页来管理内存,分页可以让每个进程都有完整的虚拟地址空间,进程间的虚拟地址空间相互隔离以提供页层级的保护。另外分页可以让物理内存少于虚拟地址空间,同时可以使用磁盘存储暂时未使用的内存页,提供更多的「内存」。分页分页通过 CPU 的 MMU(Memory Management Unit)...  阅读全文

2015-04-27 12:53 作者: airtrack【评论:0】【阅读:781】 

OpenCASCADE PCurve of Topological Face

     摘要: OpenCASCADE PCurve of Topological Face eryar@163.com Abstract. OpenCASCADE provides a class BRepBuilderAPI_MakeFace to build topological faces. A face maybe built from a surface, elementary surface fr...  阅读全文

2015-04-25 12:22 作者: eryar【评论:0】【阅读:782】 

PDMS RvmTranslator

     摘要: PDMS RvmTranslator eryar@163.com Abstract. AVEVA Review is used for 3D model visualisation for plant or ship design, construction and operation. The RVM file is main input of AVEVA Review. RvmTranslat...  阅读全文

2015-04-22 22:37 作者: eryar【评论:4】【阅读:1051】 

测试SESSION分配与浏览器的关系

     摘要: 测试目的:测试SESSION分配与浏览器的关系   测试代码:   pasting@RequestMapping(value ={"index.html"})public String index2(HttpServletRequest request,ModelMap model) { String remoteIp = UserAddrUtils.getRem...  阅读全文

2015-04-21 11:14 作者: 长寿梦【评论:0】【阅读:964】 

技 术 改 变 世 界

网站分类

24小时内最热随笔

统计信息

聚合

Blog客户端API

推荐客户端

博客排行榜[前100人]