10 ms·
MineCraftWebGL
- stevenleeg 14y agoIf only there were an API for mouse capturing. Is there any reason why it couldn't work if it were implemented like full screen mode (displaying a message telling the user to press escape to reclaim the mouse)? Edit: Actually it looks like this is being worked on after all – http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.htm...
- gringomorcego 14y agoSeriously, what the hell is the point of even creating something like webgl if a key feature for immersion is kept out? It's like building a car starting with the frame. God speed to whoever is fighting the good fight on those frigging w3c boards.
- azakai 14y agoAs mentioned above, this feature does in fact exist.
- gringomorcego 14y agoAh, wrote before the edit.
- tec27 14y agoYeah, it does exist and is usable in current versions of Chrome if you change the flag for it. I'm not sure if the Chrome version of the API is what the final one will be though, since it seems to differ somewhat from the version documented on MDN: https://developer.mozilla.org/en/API/Pointer_Lock_API https://developer.mozilla.org/en/API/Pointer_Lock_API Still it would probably be fairly easy to add support for it to this and replace the annoying click-drag camera movement when possible.
- azakai 14y agoThis exists in Firefox as of 14, currently in Aurora, so this will be in a stable release in a few weeks. It also exists in recent Chrome versions, however it seems to be disabled by default for some reason, but you can enable it in the flags menu. No reason why this cool site can't use it on those browsers, there are lots of demos on the web that do. Mouse lock is very important.
- AgentConundrum 14y ago> This exists in Firefox as of 14, currently in Aurora, so this will be in a stable release in a few weeks. Firefox 14 is scheduled for release on Tuesday.[1] [1] https://wiki.mozilla.org/RapidRelease/Calendar#Future_branch_dates https://wiki.mozilla.org/RapidRelease/Calendar#Future_branch...
- azakai 14y agoEven better ;) Thanks for the correction!
- AgentConundrum 14y agoNo problem. I looked it up last week because I thought this was the release that was going to have the new fix for add-on-related memory leaks[1], but it turns out that's not coming until Firefox 15 next month. [1] http://news.softpedia.com/news/Firefox-15-to-Fix-All-Common-Add-on-Memory-Leaks-269898.shtml http://news.softpedia.com/news/Firefox-15-to-Fix-All-Common-...
- lloeki 14y ago> It also exists in recent Chrome versions, however it seems to be disabled by default for some reason It's enabled at least for the Chrome Store/NaCl apps, since it did that to me for Bastion and/or From Dust.
- obtu 14y agoThe reason would be security-related, as usual. I take it you deal with the clickjacking potential, and the potential for deliberate annoyances?
- ricardobeat 14y agoI just implemented that in a fork: https://github.com/danielribeiro/WebGLCraft/ https://github.com/danielribeiro/WebGLCraft/ Only works in Chrome for now, if you enable it in chrome://flags. You don't even need to be in full-screen mode, at least on the latest version. Pull request is here: https://github.com/danielribeiro/WebGLCraft/pull/1 https://github.com/danielribeiro/WebGLCraft/pull/1
- ricardobeat 14y agoOops. That first link should be https://github.com/ricardobeat/WebGLCraft/ https://github.com/ricardobeat/WebGLCraft/ Page at http://ricardobeat.github.com/WebGLCraft/ http://ricardobeat.github.com/WebGLCraft/, press C to enable mouse lock. Aiming doesn't work very well...
- netshade 14y agoReally nice looking impl in JS, though I'd add that doing perlin noise over a limited grid is a pretty limited subset of what Minecraft does. Minecraft's terrain generator does a couple of passes (last I read about this, things may have changed) that generates cave systems, the surface level topography, forests, etc. http://notch.tumblr.com/post/3746989361/terrain-generation-part-1 http://notch.tumblr.com/post/3746989361/terrain-generation-p... Still, definitely a cool project.
- hartror 14y agoYeah this is a very limited subset of what Minecraft does and arguably the implemented bits are the low hanging fruit. I wrote a "game" in my teens that covers this functionality, though in C++ not JS on a browser.
- eta_carinae 14y agoNice, but it seems to busy wait: my CPU is pegged at 50% even when I am not doing anything.
- officemonkey 14y agoSo, just like Minecraft. :-D
- dmboyd 14y agoLast I looked, the vector math part of 3D wasn't handled by webGL, this uses Three.js to handle that, and looks to be the main bottleneck. Until you can do matrix/vector math using hardware, webGL is pretty much useless.
- DanielRibeiro 14y agoThat is pretty much about right. I wrote a bit about the implementation[1], and the discussion went over how to optimize this (including, but not limited to, using shaders to do the drawing and not relying on Three.js so much). [1] http://metaphysicaldeveloper.wordpress.com/2011/12/20/implementing-minecraft-in-webgl/ http://metaphysicaldeveloper.wordpress.com/2011/12/20/implem...
- dmboyd 14y agoWould be interested if its worthwhile/possible using shaders as a wrapper for three.js. All I got when I was searching was there was a mozilla bug report and a hacked patch to expose SIMD through js[1], and a project to add SIMD support to vectors in Dart[2]. [1] https://bugzilla.mozilla.org/show_bug.cgi?id=644389 https://bugzilla.mozilla.org/show_bug.cgi?id=644389 [2] http://www.altdevblogaday.com/2012/06/18/bringing-simd-accelerated-vector-math-to-the-web-through-dart/ http://www.altdevblogaday.com/2012/06/18/bringing-simd-accel...
- azakai 14y ago> Until you can do matrix/vector math using hardware, webGL is pretty much useless. Modern matrix libraries like glMatrix https://github.com/toji/gl-matrix https://github.com/toji/gl-matrix use typed arrays effectively to do very fast matrix and vector math in JS. A modern JS engine can transform such code into something very efficient, more than fast enough to do things like even first person shooters.
- po 14y agoPretty cool but another thing missing from this is the dynamic lighting. If you make an enclosed space it's just as bright inside as daylight. The lighting in minecraft is simple but extremely effective. Here's a nice demo/test from Notch from when he was working on that: http://www.youtube.com/watch?v=xnvqvFsNkq0 http://www.youtube.com/watch?v=xnvqvFsNkq0
- TazeTSchnitzel 14y agoI like Minecraft Classic's binary lighting, personally. Slightly darker if shadowed, full brightness if not.
- mistercow 14y agoIt makes me sad when cool things like this don't support keyboard layouts other than QWERTY
- cjfont 14y agoSomeone who goes out of their way to learn other keyboard layouts should probably go the extra step in having a way to map keys for stuff like this.
- kissickas 14y agoThis is a terribly ignorant statement. Plenty of people live outside of English-speaking countries where different keyboard layouts are used.
- cjfont 14y agoI apologize, the context made me think along the lines of Dvorak. EDIT: Even so, most OSes now make it relatively easy to switch layouts based on country, so I feel as though my point still stands.
- qw 14y ago"most OSes now make it relatively easy to switch layouts" The problem is that the physical layout is unchanged, so you need to memorize the keys...
- flexd 14y agoIf you have to look at your keyboard to write things that is unefficient anyway? I never look at my keyboard unless I have to type some weird character that is never normally used.
- regularfry 14y agoThat's an extremely simplistic look at the problem. The issue isn't looking at the keyboard, it's the extra mental effort of doing the keymapping every time you run into a new application which has stupid defaults that don't take alternative layouts into account.
- petercooper 14y agoPrior HN discussion on this topic: http://news.ycombinator.com/item?id=3376620 http://news.ycombinator.com/item?id=3376620
- eostyx 14y agoI wonder how this was created? (tools, libraries) Been thinking about learning WebGL for a while now.
- karlshea 14y agohttps://github.com/danielribeiro/WebGLCraft https://github.com/danielribeiro/WebGLCraft (not trying to be a dick, I mean, at least to your libraries and tools question: it is all there)
- eostyx 14y agoYeah, for some reason every time I looked at it, it would have an error. Thanks though.
- eupharis 14y agoVery, very nice! Possible feature: would it be possible to generate unique individual links a la pastebin? Just a "generate link button" that stored all the current values of the variables and spit out a link like: http://danielribeiro.github.com/WebGLCraft/7vDq0hGh Though I suppose for pastebin et al. those are just database links. There is too much data here to store it in the actual url string itself :( Maybe just an export/import to json button then? I would use this, like, immediately to share designs and pattern ideas with friends. Also possible tweak: I just built a very tall tower and jumped off. But it doesn't quite "feel" like Minecraft gravity over long distances. The acceleration or maybe just the terminal velocity feel too slow.
- Simucal 14y agoIf you wanted to generate the same terrain, then you could save a particular seed for the random function which could be appended to the url. That wouldn't include all the player made modifications to the terrain but it would give people the same world.
- ajanuary 14y agoHow would you generate which seed to use?
- Simucal 14y agoThe seed could be generated using the default random function of your platform without specifying the seed (the default seed is likely based on some timestamp component). You would then take the value the default random function gives you and feed it into the overloaded constructor which allows you to specify the seed. That way you could still record the seed's value which was used to generate your terrain.
- ajanuary 14y agoBut the terrain wasn't generated using an rng, it was generated by the user placing and deleting blocks.
- ilaksh 14y agoDoes anyone know of a JavaScript (or CoffeeScript) library that will read the latest version of the Minecraft files? I wrote some JavaScript code that worked with the old version and then updated it for the version that came after that but haven't had time to get into the new version. Was thinking maybe someone already did it.
- friggeri 14y agoIt's tiring to see that WASD is always used to control movement, regardless of keyboard layout. On a French keyboard, this is how WASD is laid out: http://en.wikipedia.org/wiki/File:KB_France.svg http://en.wikipedia.org/wiki/File:KB_France.svg Needless to say that it is highly impractical… Why not bind the arrow keys?
- ramchip 14y agoThe arrow keys are usually at the right of the keyboard, next to the mouse, which makes playing with two hands awkward. You also need to move the hand on the keyboard to push pretty much any other key, which makes it difficult to do other actions (reload, open inventory, sprint, etc.) Of course the better solution is to give the player the choice...
- lloeki 14y ago> You also need to move the hand on the keyboard to push pretty much any other key - cost of binding arrow keys: ~0 - benefit to non-wasd compatible layouts: ∞ (did you know that my keyboard can actually move to where arrow keys are comfortably used, or that left-handed and right-handed-who-use-their-mouse-on-the-left-because-it-makes-sense-with-a-numpad-and-makes-RSI-bearable people exist? ;-)
- rplnt 14y agoThe main reason is there are no keys around the arrows, making it useless for many games. The layout issue is completely different thing.
- ramchip 14y agoSure, it makes sense in some cases, but not for most casual gamers (due to using a laptop, limited desk space, being right-handed with the mouse, etc.) Binding both the arrows and WASD is a good idea.
- cskau 14y ago> The arrow keys are usually at the right of the keyboard, next to the mouse Usually yes, but not if you're using your left hand for the mouse as I've recently switched to do. At a bare minimum both WASD and arrow keys should be enabled. But yes, reconfigurability is by far the best solution.
- the_mitsuhiko 14y agoI made something similar a while ago but more with a focus on the world gen and larger worlds than the crafting aspect. If someone wants to hack on it or look at code, be my guest: https://github.com/mitsuhiko/webgl-meincraft https://github.com/mitsuhiko/webgl-meincraft
- derpmeister 14y agoThere's a bug in this, on 2 adjacent sides you can walk one block further then you can create. The world isn't as big as it looks so this is easy to test.
- idspispopd 14y agoI wonder if the author is wondering why there is a sudden influx of traffic after 6 months. There is more interesting discussion on the ~7 months passed HN thread: http://news.ycombinator.com/item?id=3376620 http://news.ycombinator.com/item?id=3376620