存档

2017年6月 的存档

[置顶] 房卡麻将分析之“缺人玩法”

2017年6月21日 没有评论

         一般玩麻将都是四个人,遇到 “三缺一”怎么办?大多数情况下,玩家只好等待或叫人,这无疑增加了玩家的等待时间,同时也减缓了房卡的消耗速度。其实四个人并不是玩麻将的硬性条件,如果能在游戏中不受四人限制随时开局,就会大大提升房卡麻将的实用性和可玩性,同时有效的加快房卡销售速度。


         所谓”缺人玩法“,即在原有基础上提供二人,三人的玩法,如果玩家有两个人在房间里开局,那就形成南北对立局势进行游戏。

[置顶]        房卡麻将分析之“缺人玩法”


         如果玩家有三个人在房间里开局,那就形成去掉对门,左右代表上家和下家,形成三国鼎力之势。

[置顶]        房卡麻将分析之“缺人玩法”

         在开发过程中,本身的技术难度并不大,主要是要注意表现层的细节,总体来说有以下几个方面:

   

         (1)。玩家坐下后所在方向的处理:二人麻将比较好处理,房间两个玩家,自身处下方位无须处理,对方玩家需要放置在对门。要注意东南西北方面显示和切换的细节。可以根据服务器分配的座位号进行重新的整理。三人麻将的话,要注意一个地方,就是如果三个玩家的手机上显示的都是自已居下位,左边为上家,右边为下家,座位与方位的不统一,这是很奇怪的一个现象,但又的确存在。即如果玩家A是南,玩家B是东,玩家C是西,这时就会出现B玩家,C玩家本应显示为对门但确不是的情况,哈哈,但为了美观,这里可以不太讲究。毕竟不影响胜负和打牌顺序。

[置顶]        房卡麻将分析之“缺人玩法”

                                          《大赢家》麻将的三人开局


[置顶]        房卡麻将分析之“缺人玩法”


         (2)。玩家出牌的排列处理:因为二人,三人玩的情况下,每个人摸到的牌的数量会多出来一些,在桌面上显示时就会遇到出牌牌墙过长的问题,这里要做一下对齐或增加行数的问题。


[置顶]        房卡麻将分析之“缺人玩法”

                                   二人麻将,要增长出牌的牌墙


[置顶]        房卡麻将分析之“缺人玩法”

                              三人麻将,三人出牌的牌墙不要交叉。


         (3)。玩家结算显示处理:这个就比较简单了,玩家结算时能够同态的根据人数进行界面结算框显示,保证美观。


[置顶]        房卡麻将分析之“缺人玩法”

           服务器方面,要改进的地方并不是很多,在房间第一次开局时记录下人数,并以这个人数来进行后续开局判断,起牌顺序处理和结算就行了,整体改动比较简单。

        地方棋牌,VR,AR技术,请关注公众号:"红孩儿的游戏开发之路“

               红孩儿微信:honghaier_game


          [置顶]        房卡麻将分析之“缺人玩法”

分类: 未分类 标签:

OpenGL(十三) 天空盒 的 shader 实现

2017年6月19日 没有评论

天空盒 的使用可以使用户感觉所处一个封闭的世界环境,使得游戏更加真实。本文主要介绍如何通过OpenGL和GLSL来实现天空盒。

核心原理

天空盒 的核心原理其实并不复杂,它相当于在视线外套上一个盒子。盒子有6个面,分别使用6张可以拼接在一起的图片。从原理上讲,通过比较视线的xyz,可以找到方向,可以计算出应该渲染的与盒子面的交点,进而选出应绘制的面进行渲染。从实现的角度理解,首先将天空盒与摄像机放在同一位置,然后将盒子绘制出来即可。

实现

C++代码方面,通过SOIL可以创建一个cubemap,然后将其传入shader,其接方法如下:

//Create
GLuint mainTexture = SOIL_load_OGL_cubemap(
        "res/image/right.bmp",
        "res/image/left.bmp", 
        "res/image/top.bmp", 
        "res/image/bottom.bmp", 
        "res/image/back.bmp", 
        "res/image/front.bmp",
        0, 0, SOIL_FLAG_POWER_OF_TWO);

//Draw
glBindTexture(GL_TEXTURE_CUBE_MAP, mainTexture);
glUniform1i(originalProgram.GetLocation("U_MainTexture"),0);
cube.Bind(originalProgram.GetLocation("pos"), originalProgram.GetLocation("texcoord"), originalProgram.GetLocation("normal"));
cube.Draw();

着色器方面,接收传入的值后,将3D采样纹理绘制出即可。实现shader为:

//vs
attribute vec3 pos;
attribute vec2 texcoord;
attribute vec3 normal;

uniform mat4 M;
uniform mat4 P;
uniform mat4 V;

varying vec3 V_Texcoord;
void main()
{
    V_Texcoord=pos;
    gl_Position=P*V*M*vec4(pos,1.0);
}

//fs
varying vec3 V_Texcoord;

uniform samplerCube U_MainTexture;

void main()
{
    gl_FragColor=textureCube(U_MainTexture,V_Texcoord);
}

总结

通过上面的代码即可在OpenGL中实现 天空盒 的效果。

OpenGL(十三) 天空盒 的 shader 实现

OpenGL(十三) 天空盒 的 shader 实现

关注我的微信公众号,获取更多优质内容

分类: 未分类 标签: