Giter VIP home page Giter VIP logo

objto3d-tiles's Introduction

objTo3d-tiles

WARNING: THIS REPO IS NO LONGER MAINTANING, MAYBE NOT SUPPORT NEWERST CESIUM.

Node command line tool and module convert obj model file to 3D Tiles, based on obj2gltf.

Online Demonstration

简体中文

NOTE: Only support .b3dm and .i3dm for now!

Please use Cesium after v1.37, cause this 3d tile use glTF2.0.

Getting Start

Make sure you have Node installed, and then

npm install -g obj23dtiles

Basic Usage

  • Convert .obj to .gltf
obj23dtiles -i ./bin/barrel/barrel.obj
// Export barrel.gltf at obj folder.
  • Convert .obj to .glb
obj23dtiles -i ./bin/barrel/barrel.obj -b
// Export barrel.glb at obj folder.

NOTE: More detial to convert .gltf and .glb can find at obj2gltf.

NOTE: If your model have tarnsparency texture please add --checkTransparency parameter.

NOTE: If your model using blinn-phong material, and use occlusion when convert to PBR material, the model will looks darker. The useOcclusion default is false, remember adding --useOcclusion if your model using PBR material. Here are some showcase about it.

  • Convert .obj to .b3dm with default BatchTable, which have batchId and name property, and name is model's name.
obj23dtiles -i ./bin/barrel/barrel.obj --b3dm
// Export barrel.b3dm at obj folder.
  • Convert .obj to .b3dm with default BatchTable and export default BatchTable (a JSON file). Maybe get information for custom BatchTable.
obj23dtiles -i ./bin/barrel/barrel.obj --b3dm --outputBatchTable
// Export barrel.b3dm and barrel_batchTable.json at obj folder.
obj23dtiles -i ./bin/barrel/barrel.obj -c ./bin/barrel/customBatchTable.json --b3dm
// Export barrel.b3dm with custom batch table at obj folder.
obj23dtiles -i ./bin/barrel/barrel.obj -f ./bin/barrel/customFeatureTable.json --i3dm
// Export barrel.i3dm at obj folder.
obj23dtiles -i ./bin/barrel/barrel.obj -f ./bin/barrel/customFeatureTable.json
-c ./bin/barrel/customI3dmBatchTable.json --i3dm
// Export barrel.i3dm with BatchTable at obj folder.

FeatureTable support following parameters : position, orientation, scale.

Create Tileset

  • Create a single tileset with .b3dm tile.
obj23dtiles -i ./bin/barrel/barrel.obj --tileset
// Export ./Batchedbarrel folder at obj folder which is a tileset.
  • Create a single tileset with .b3dm tile and custom tileset options, custom BatchTable.
obj23dtiles -i ./bin/barrel/barrel.obj --tileset
-p ./bin/barrel/customTilesetOptions.json -c ./bin/barrel/customBatchTable.json
// Export ./Batchedbarrel folder at obj folder which is a tileset with custom tileset options.
  • Create a single tileset with .i3dm tile.
obj23dtiles -i ./bin/barrel/barrel.obj --tileset --i3dm
-f ./bin/barrel/customFeatureTable.json
// Export ./Instancedbarrel folder at obj folder which is a tileset.
  • Create a single tileset with .i3dm tile and custom tileset options, custom BatchTable.
obj23dtiles -i ./bin/barrel/barrel.obj --tileset --i3dm
-f ./bin/barrel/customFeatureTable.json -p ./bin/barrel/customTilesetOptions.json
-c ./bin/barrel/customI3dmBatchTable.json
// Export ./Instancedbarrel folder at obj folder which is a tileset.

The customTilesetOptions.json can have options bellow, and these are fake values, please only add properties you need, other value will be auto calculate through .obj file.

{
    "longitude":      -1.31968,     // Tile origin's(models' point (0,0,0)) longitude in radian.
    "latitude":       0.698874,     // Tile origin's latitude in radian.
    "transHeight":    0.0,          // Tile origin's height in meters.
    "region":         true,         // Using region bounding volume.
    "box":            false,        // Using box bounding volume.
    "sphere":         false         // Using sphere bounding volume.
}

NOTE: If you are not specify the transHeight option, your model will be place at earth ground surface, which means no matter what the height your models are, the lowerest point of your models will be place at height = 0.0 on the earth. But if you want keep origin heigth you just need specify transHeight = 0.0.

Here are different bounding volumes.

Combine tilesets

You can combine tilesets into one tileset.json as external tileset.

obj23dtiles combine -i ./bin/barrel/output

Using as node module

If you want to use this tool in node or debug, check out how to use as node module.

Test

Navigate to this project folder and run

npm run test

Troubleshooting

First, make sure your .obj file is complete, normally include .obj, .mtl and textures like .jpg or .png. You can preview your .obj model via "Mixed Reality Viewer" if you are in windows 10. Otherwise you can use this online viewer.

Second, export .glb and check if it display correctly. You can use Cesium or Three.js gltf viewer.

In the end, just export .b3dm or tileset and load in Cesium.

Sample Data

Sample data under the .bin\barrel\ folder.

barrel\
    |
    - barrel.blend              --
    |                             |- Blender project file with texture.
    - barrel.png                --
    |
    - barrel.obj                --
    |                             |- Obj model files.
    - barrel.mtl                --
    |
    - customBatchTable.json     ---- Custom batchtable for b3dm.
    |
    - customTilesetOptions.json ---- Custom tileset optional parameters.
    |
    - customFeatureTable.json   ---- Custom FeatureTable for i3dm.
    |
    - customI3dmBatchTable.json ---- Custom BatchTable for i3dm.
    |
    - output\                   ---- Export data by using upper files.
        |
        - barrel.glb
        |
        - barrel.gltf
        |
        - barrel_batchTable.json    ---- Default batch table.
        |
        - Batchedbarrel\            ---- Tileset use b3dm
        |   |
        |   - tileset.json
        |   |
        |   - barrel.b3dm
        |
        - Instancedbarrel\          ---- Tileset use i3dm
        |   |
        |   - tileset.json
        |   |
        |   - barrel.i3dm
        |
        - BatchedTilesets\          ---- Tileset with custom tileset.json
            |
            - tileset.json
            |
            - barrel_withDefaultBatchTable.b3dm
            |
            - barrel_withCustonBatchTable.b3dm

Resources

Credits

Great thanks to Sean Lilley(@lilleyse) for helping and advising.

Thanks AnalyticalGraphicsInc provide a lot of open source project (like Cesium and 3D Tiles) and creat a great GIS environment.

License

Apache License 2.0

objto3d-tiles's People

Contributors

princessgod avatar sabiqusi avatar spatialhast avatar wgf120513 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

objto3d-tiles's Issues

obj to 3Dtiles 只會生成1個b3dm?

作者你好,感謝你的偉大作品
在處理小檔案的時候,生成一個b3dm似乎是很正常

但現在我有一個大檔案obj,轉出來的檔案也只有1個b3dm
這樣似乎不太正確,這樣會導致上傳至cesium ion 檔案太大而顯示不出來(或者要loading很久)

不知道有無方法,讓大檔案自動切成不同程級,也就是數個b3dm
謝謝你

obj to 3d tiles 會丟失部分數據

你好
我有很多obj轉3D tiles都能順利成功,但發現幾個obj轉出來,數據會丟失
這個是本端端開啟obj的模樣
image
然後這是to 3dtiles後上傳到cesium的模樣
image

然後使用你的方法轉成gltf查看
似乎找到相關原因,表面有陰影處的地方,似乎就是丟失數據的地方
image

這邊附上測試file給你參考
B_22EV36CVTK.zip
謝謝

Can't convert big obj file

"The value '2577053024' is invalid for option 'size'" happens when i try to convert a big, 3G+ OBJ file to 3Dtileset. Anybody knows how to deal with this problem?

gerented bounding volume(region) has reversed dimension and direction

var height = minmaxPoint.max[2] - minmaxPoint.min[2];

the indice of Height and Y are wrong.

Line 31 should be minmaxPoint.max[1] - minmaxPoint.min[1];
Line 35 should be var offsetY = height / 2 + minmaxPoint.min[1];
Line 40, 41 should be minmaxPoint.min[2] and minmaxPoint.max[2]

var south = latitude - latitudeExtent / 2 - offsetY / tileHeight * latitudeExtent;

Line 62 should be + offsetY / tileHeight * latitudeExtent;
Line 64 should be + offsetY / tileHeight * latitudeExtent; (use plus sign instead of minus sign)

Accuracy for large tiles

Hi,

First, thank you you save us a lot of time.

I notice that for large 3D tiles there is big deviation at the edges any clue what need to be fix?

thanks

Ohad

RangeError [ERR_OUT_OF_RANGE]

When I try to trans obj to b3dm/tileset, a range error came out. Is there anybody can help? Thanks a lot.

node:internal/errors:541
throw error;
^

RangeError [ERR_OUT_OF_RANGE]: The value of "length" is out of range. It must be >= 0 && <= 2147483647. Received 2412816608
at Object.write (node:fs:854:5)
at writeAll (node:fs:2216:6)
at node:fs:2305:7
at FSReqCallback.oncomplete (node:fs:194:23) {
code: 'ERR_OUT_OF_RANGE'
}

whats the rotation part in the root tile transform matrix

hi, I tried to define a boudingVolumn box by a known coordinates, like [X,Y,Z,halfx,0,0,0,halfy,0,0,0,halfz].
It did not work unless the rotation part of root transform matrix was untoched.
That part looks not like a simple y-up to z-up rotation. So Im wondering whats happening in this rotation part.

calculate geometricError and lod

How to calculate geometricError according to the model file in obj to achieve LOD?
Or can you tell me the principle formula? Thank you!

How to produce Child tileset?

objTo3d-tiles is a so great tool, I have already show web 3D model by it !
One of my question is how to produce child tiles from my original obj file?
Because my original obj and b3dm files are so big, they can't be load quickly when opening web page.
Could you suggest me some ways or tools to produce child tiles effectively?
Thank you!

extra explanation on customTilesetOptions.json

Hi, can you add help to the missing parameters?

thanks

{
"longitude": -1.31968, // Tile origin's(models' point (0,0,0)) longitude in radian.
"latitude": 0.698874, // Tile origin's latitude in radian.
"transHeight": 0.0, // Tile origin's height in meters.
"minHeight": 0.0, // ?? units??
"maxHeight": 40.0, // ?? units??
"tileWidth": 200.0, // ?? units??
"tileHeight": 200.0, // ?? units??
"geometricError": 200.0, // ?? units??
"region": true, // Using region bounding volume.
"box": false, // Using box bounding volume.
"sphere": false // Using sphere bounding volume.
}

error: array buffer allocation failed

使用3dmax将max模型文件转为obj格式,附带图片纹理,使用转换工具时暴出“array buffer allocation failed”,查找了相关说明,同类的转换工具也有出现该提示是因此图片太多,导致缓冲区不够使用,而工具可获得的缓冲区有限制。

同一模型,不同坐标,不同参数,如何处理?

你好,我现在有这样的应用场景
模型(下面叫x模型)是一样,可能自定义参数不一致,坐标不一致
这样我需要怎么做,比较优雅?

我现在的做法是,复制了同样的x模型(因为这里输出是按模型名输出的,我就复制了x-1,x-2)
每个生成一块独立的瓦片

再将n个瓦片,合并一个tileset.json

|--input
|-----customBatchtable-1.json
|-----customBatchtable-2.json
|-----customTilesetOptions-1.json
|-----customTilesetOptions-2.json
|--output
|-----Batchedx-1
|---------x-1.b3dm
|---------tileset.json
|-----Batchedx-2
|---------x-2.b3dm
|---------tileset.json
|-----tileset.json
|--x-1.obj
|--x-2.obj

box 3 Bounds

public Box3 Bounds,the MAXX/Y/Z have problem

Convert to hierarchical tiles ?

Is it possible to use this library to convert obj to a hierarchical (multi level for lod) tileset ?

if yes, is there a example somewhere ?

3d tiles in wrong postion

I use this tool to convert a obj to a single tileset, then, I show this model in cesium and it is in Sudan but the right place is China。Can someone help me? The following is customTilesetOptions.json and tileset.json
customTilesetOptions.json
{ "longitude": 119.95948074950003, "latitude": 31.68082139900001, "transHeight": 0.0, "region": true, "box": false, "sphere": false }

tileset.json
{ "asset": { "version": "0.0", "tilesetVersion": "1.0.0-obj23dtiles", "gltfUpAxis": "Y" }, "geometricError": 200, "root": { "transform": [ -0.5471536466732279, 0.8370321899020303, 0, 0, -0.21914155605896873, -0.143249092426594, 0.9651200318753161, 0, 0.8078365337989131, 0.5280689449179611, 0.2618077998704183, 0, 5153674.616673024, 3368869.07612232, 1659048.1064715665, 1 ], "boundingVolume": { "region": [ 119.95936855744625, 31.680633143240144, 119.95958835404977, 31.681313337668144, -3, 30 ] }, "geometricError": 0, "refine": "ADD", "content": { "url": "kjc.b3dm" } } }

Many objs to 3d tilesets

There are many obj files, I can convert to b3dm them singly but It causes performance loosing in cesium showing. How Do I convert obj files to b3dm by grouping.
For example:
1.obj, 2.obj 3.obj --> 1.b3dm
4.obj, 5.obj, 6.obj --> 2.b3dm

in short, How Can I tile objs according to number I determine

tileset.json lat/lng

Hi, I'm able to convert obj to 3dtiles. but not sure how to setup the bounding and geometricError in tileset.json. Should I get it from the .obj or what is the way to setup tilesetoptions. Thanks

create LOD

It's a great tool for model convert to cesium, i want to know the tool is support to create LOD whether or not

3d tile 模型分片位置重叠在一起

原始数据是分片的obj文件 使用如下命令全部转成tileset
obj23dtiles -i ??.obj --tileset

然后使用
obj23dtiles combine -i .
合并tileset.json

客户端使用cesium加载tileset
var viewer = new Cesium.Viewer('cesiumContainer');

var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url : '../../SampleData/Cesium3DTiles/Tilesets/szylset/tileset.json'
}));

viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0, -0.5, 0));

结果在某个方向上tile重叠在一起

image

数据文件
szylset.zip

在ceisum中无法显示3d tiles数据

我在sketchup中使用geolocation选择了上海的影像,然后导入上海部分建筑物shp数据,生成了一个三维模型群,将其导出为obj格式后,使用obj23dtiles -i shobj.obj --tileset 生成了对应的3d tiles,但将数据添加到cesium中并不现实,我猜测是地理坐标不正确或丢失了,请问该如何解决这个问题?谢谢!

Custom BatchTable

Hi, I'm trying to test your library using a custom batch table and a custom tileset options file, but I'm getting an error message (see below). I followed your instructions to the letter:

  • I have an obj file with 95 objects
  • I defined a custom batch table with ints 0..94 for "batchId, 0..94 for "batchIdNew", and 95 string "myString" in the subarray "newname"

I am then running the following line in terminal:
obj23dtiles -i "./myOBJFile.obj" --tileset -p "./customTilesetOptions.json" -c "./customBatchTable.json"
.... followed by the error message:
Custom BatchTable properties's length should be equals to default BatchTable 'batchId' length.

What am I doing wrong here? Thanks for any pointers. Regards,

Usage as a library

Hi and thanks for the great job! Do you have an example of usage obj23dtiles as a library (run from JavaScript)? Thank you in advance!

obj23dtiles函数返回Promise

是否可以让obj23dtiles函数返回Promise,方便作为node模块使用时可以知道何时转换完成?比如: tileset的情况:

function obj23dtiles(objPath, outputPath, options) {
...
    return obj2Tileset(objPath, outputPath, options).then(...
...
}

谢谢!

Vertical orientation

Hi !

First of all thanks for a great software!

I am having problems with conveting mesh .obj from my drone. The resultant tileset get a vertical direction. Does somebody know what is going on with this issue?
image

Regards!
Abel

customTilesetOptions设置

我将一个建筑的所在区域的中点作为原点,构建出来的model在表示时,坐标总是差一些。

osm文件,使用osm2world生成obj文件

<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="osmfilter 1.4.3">
	<node id="269992020" lat="39.1361263" lon="117.2153419" version="2" timestamp="2011-01-26T17:11:57Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992021" lat="39.1361459" lon="117.215434" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992022" lat="39.136185" lon="117.2155114" version="2" timestamp="2011-01-26T17:11:56Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992023" lat="39.1361294" lon="117.2155793" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992024" lat="39.1368382" lon="117.2175762" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992025" lat="39.1374329" lon="117.2172291" version="2" timestamp="2011-01-26T17:11:56Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992026" lat="39.1369642" lon="117.2158894" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992027" lat="39.1368942" lon="117.2159311" version="2" timestamp="2011-01-26T17:11:56Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992028" lat="39.1368341" lon="117.2157501" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992034" lat="39.1368889" lon="117.215686" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992035" lat="39.1369112" lon="117.2156283" version="2" timestamp="2011-01-26T17:11:57Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992036" lat="39.1369185" lon="117.2155579" version="2" timestamp="2011-01-26T17:11:56Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992047" lat="39.1368959" lon="117.2154749" version="2" timestamp="2011-01-26T17:11:56Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992048" lat="39.1370176" lon="117.2153698" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992049" lat="39.1367242" lon="117.214739" version="2" timestamp="2011-01-26T17:11:56Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992050" lat="39.1362363" lon="117.2151378" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992051" lat="39.1362531" lon="117.2152307" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<node id="269992052" lat="39.136176" lon="117.2152776" version="2" timestamp="2011-01-26T17:11:55Z" changeset="7095415" uid="155277" user="uk1967"/>
	<way id="24850431" version="2" timestamp="2008-07-01T23:49:04Z" changeset="370109" uid="13721" user="wangchun">
		<nd ref="269992020"/>
		<nd ref="269992021"/>
		<nd ref="269992022"/>
		<nd ref="269992023"/>
		<nd ref="269992024"/>
		<nd ref="269992025"/>
		<nd ref="269992026"/>
		<nd ref="269992027"/>
		<nd ref="269992028"/>
		<nd ref="269992034"/>
		<nd ref="269992035"/>
		<nd ref="269992036"/>
		<nd ref="269992047"/>
		<nd ref="269992048"/>
		<nd ref="269992049"/>
		<nd ref="269992050"/>
		<nd ref="269992051"/>
		<nd ref="269992052"/>
		<nd ref="269992020"/>
		<tag k="name" v="嘉华国际商业中心"/>
		<tag k="landuse" v="commercial"/>
		<tag k="name:en" v="Jiahua international Business Center"/>
		<tag k="name:zh" v="嘉华国际商业中心"/>
		<tag k="building" v="yes"/>
	</way>
</osm>

customTilesetOptions文件

{
"longitude": 2.045807887,
"latitude": 0.683065663,
"geometricError": 200.0,
"region": true,
"box": false,
"sphere": false
}

Chinese garbled problem

When I used it to convert obj files, I noticed that the generated b3dm file was garbled in Chinese. Is there a way to solve this problem? Thank you.

obj23dtiles -i objTo3d-tiles/bin/barrel/barrel.obj

module.js:487
throw err;
^

Error: Cannot find module './obj2B3dm'
at Function.Module._resolveFilename (module.js:485:15)
at Function.Module._load (module.js:437:25)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at Object. (/root/objTo3d-tiles/lib/obj23dtiles.js:5:16)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at Object. (/root/objTo3d-tiles/bin/obj23dtiles.js:8:19)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)

#####################################################
运行出现这个问题,这个模块该从什么地方下载安装呢

捆绑瓦片

你好,我想问下你说的捆绑多个瓦片到一个json文件里。
我是先把每个obj模型都转换成b3dm格式的模型,然后再转换,
还是说每个模型都生成一个瓦片,然后在捆绑到一个json文件中?

生成的3dtiles模型 部分结构丢失

生成的3dtiles文件 部分结构丢失

原obj格式的模型 通过window10 自带的3d builder 打开
17v4xir rmk8ie t924

转化后的模型显示 部分结构丢失
h3z h5dbp8 zfw prm 4

后obj格式将其转化为gltf 格式的模式 部分结构也丢失且 丢失位置与3dtiles格式文件的位置相同同 通过window10 自带的3d builder 打开
fz7 z 3 e l3d 0_s2bsdg9

这是原文件
test.zip

convert failed

image

npm install
node ./bin/obj23dtiles.js -i ./bin/barrel/barrel.obj

then get the error

thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.