小编Hob*_*bes的帖子

将Three.js骨骼动画更新为基于混音器的新系统

混音器系统是在r73中引入的,从那以后我一直在尝试将我的游戏更新到这个新系统.

除了一件事,我几乎都在那里.某些具有某些几何形状的动画的交叉渐变有一点延迟,这在r72中是不存在的.我攻击了r72的BlendCharacter和Animation功能以允许回调并且效果很好.在73中,如果通过事件触发器内置了此功能,则不需要这样做.

在下面的小提琴中,一切都按预期工作(r72).

http://jsfiddle.net/titansoftime/a93w5hw0/

<script src="http://www.titansoftime.com/webgl/Three72.full.js"></script>
<script src="http://www.titansoftime.com/webgl/BlendCharacter2.js"></script>
<script src="https://rawgit.com/mrdoob/three.js/dev/examples/js/loaders/DDSLoader.js"></script>

var scene, camera, renderer, ambient, directional;
var mesh, geoCache={};
var clock, jsLoader, ddsLoader;

init();
animate();

function init() {

        scene = new THREE.Scene();

        camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 10000 );
        camera.position.z = 20;
        camera.position.y = 10;

        ambient = new THREE.AmbientLight(0xffffff);    
        scene.add(ambient);

        directional = new THREE.DirectionalLight(0xffffff,1);
        directional.position.set(1,1,0);
        scene.add(directional);

        clock = new THREE.Clock();

        jsLoader = new THREE.JSONLoader(true);    
        ddsLoader = new THREE.DDSLoader();

        renderer = new THREE.WebGLRenderer({antialias:true});
        renderer.setSize( window.innerWidth, window.innerHeight ); …
Run Code Online (Sandbox Code Playgroud)

javascript three.js skeletal-animation

10
推荐指数
1
解决办法
1119
查看次数

将PHP Pthreads与Ratchet Websocket一起使用

我正在制作一个html5游戏www.titansoftime.com

我使用棘轮作为PHP websocket服务器解决方案.它很棒!http://socketo.me/docs/push

我已经使用php pthreads扩展进行了几次独立测试,并且看到了一些非常令人兴奋的结果.它确实有效并且运行良好..只要不包含websockets.

Pthreads提供PHP多线程功能(它确实有效,而且非常棒).http://php.net/manual/en/book.pthreads.php

这就是我做的:

/src/server.php这是启动守护程序的文件.

    <?php
    session_start();

    use Ratchet\Server\IoServer;
    use Ratchet\WebSocket\WsServer;
    use MyApp\Pusher;

    require __DIR__ . '/../vendor/autoload.php';

    require_once __DIR__ . '/../mysql.cls.php';
    require_once __DIR__ . '/../game.cls.php';
    require_once __DIR__ . '/../model.cls.php';

    $mysql = new mysql;
    $game  = new game;

    $loop   = React\EventLoop\Factory::create();
    $pusher = new MyApp\Pusher();

    $loop->addPeriodicTimer(0.50, function() use($pusher){
        $pusher->load();
    });

    $webSock = new React\Socket\Server($loop);

    if ($loop instanceof \React\EventLoop\LibEventLoop) {
        echo "\n HAS LibEvent";
    }

    $webSock->listen(8080, '0.0.0.0'); // Binding to 0.0.0.0 means remotes can connect
    $webServer …
Run Code Online (Sandbox Code Playgroud)

php multithreading pthreads websocket ratchet

8
推荐指数
1
解决办法
4320
查看次数

THREE.js:寻找MeshFaceMaterial的替代产品

根据three.js github上的各种帖子,MeshFaceMaterial最终将不推荐使用。

我目前将此用于我的地形。当然,这不是最好的方法。其实它很烂。对于一个我不能使用的情况BufferGeometry,考虑到我通常有两层128x128(分段的)用于地形的平面,因此我不能使用它。内存使用率很高。

我修改了我所有的代码,以使地形成为可能,BufferGeometry但有两点无效。MeshFaceMaterialBufferGeometry.merge()。考虑到三个创建了该几何体,合并对索引的几何体不起作用,但我认为这很奇怪,但是它可以合并来自Blender的未索引的几何体。它无法合并自己创建的几何图形,但可以合并来自外部源的几何图形...哦,那是另一篇文章,回到MeshFaceMaterial

我目前使用的是128x128的“ MaterialMap”。每个像素代表materialIndex平面的每个面。这有两个严重的缺点。地形的平方部分(无曲线)和纹理边界的严格区分。

我的问题是:如何在不使用的情况下生成具有多个纹理的地形MeshFaceMaterial。我拥有的最高分辨率纹理为2048x2048,区域大小可以轻松为10000x10000,因此有必要重复(对吗?)。

最终,我的目标是使用BufferGeometry和摆脱MeshFaceMaterial

MaterialMap示例:在此处输入图片说明

地形示例(非常抱歉{work pc}): 在此处输入图片说明

shader textures three.js

4
推荐指数
1
解决办法
2600
查看次数

Three.js精确地形碰撞

我一直在使用WebGL库Three.js开发游戏引擎.我有基本的地形碰撞工作,我可以找到用户站在的脸.使用面顶点的平均或最大Y位置是不够的.

我可以使用什么公式来找到物体相对于"站立"的地形面的确切Y位置?假设我知道面部四个顶点位置和对象矢量位置.

在此输入图像描述

飞机是一个THREE.PlaneGeometry(2000,2000,128,128),由高度图增强.上面的图像是其中一个面孔.

math terrain collision game-engine three.js

3
推荐指数
1
解决办法
2005
查看次数

Three.js有效地将Uv映射到平面

我正在开发一种游戏,其中有许多相同纹理但不同长度/高度的墙壁.目前,我正在克隆基础纹理并为每个墙设置重复值.这会在内存中创建许多纹理.

我想要做的是改变平面uvs以适应纹理.我对此进行了一次尝试,得出了一些结果.

            var X = 2000;
            var Y = 1000;

            var seg = Math.ceil(X/Y);

            var wallgeo = new THREE.PlaneGeometry(X,Y,seg,1);

            var uvs = [];
            for(var i=0,len=wallgeo.faces.length;i<len;i+=2){
                uvs.push([new THREE.Vector2(0,1),new THREE.Vector2(0,0),new THREE.Vector2(1,1)]);
                uvs.push([new THREE.Vector2(0,0),new THREE.Vector2(1,0),new THREE.Vector2(1,1)]);               
            }       

            wallgeo.faceVertexUvs = [uvs];
            wallgeo.uvsNeedUpdate = true;

            var walltex = DDSLoader.load('materialmaptextures/21_2048.dds');
            var wallmat = new THREE.MeshPhongMaterial({map:walltex, transparent:true, wireframe:false});
            wall = new THREE.Mesh(wallgeo,wallmat);
            wall.position.set(0,Y/2,-300);

            scene.add(wall);
Run Code Online (Sandbox Code Playgroud)

你可以告诉我的问题是,为了创造一个额外的面孔,这不是一个大问题,但我真的想避免这种情况.最重要的是,如果平面长度不能被其高度整除,则纹理将拉伸/压缩.此外,其中的平面高度段是固定的,从而导致限制.

我不太关心创建额外的面孔.这有必要吗?一个人的脸可以每个三角形有多个紫外线吗?它需要吗?

我不熟悉Uv的问题,必须有一种有效的方法让我的墙壁看起来不荒谬而不会炸毁记忆,对吧?

演示:http://www.titansoftime.com/uv.php

textures uv-mapping three.js

1
推荐指数
1
解决办法
1959
查看次数