7 ms·
Ldraw: Lego Modeling in Rust
- adamnemecek 7y agohttps://github.com/segfault87/ldraw.rs https://github.com/segfault87/ldraw.rs
- segfault87 7y agoHi, creator here. Never imagined this would make its way into HN. :) I created this to study Rust(yes, I'm still new) and to explore what's possible with current Rust and WebAssembly. I think it turned out to be okay to continue with Rust and I'm more than happy. Currently it comprises of a parser which reads LDraw(https://ldraw.org/ https://ldraw.org/) file format and a basic renderer. For now the page itself is just a single page with rotating 3d model but eventually would transform into a complete website for creating and sharing your own creations. If you are interested you can track the development at the GitHub repository(https://github.com/segfault87/ldraw.rs https://github.com/segfault87/ldraw.rs) It's slightly outdated and the current code heavily relies on the bleeding edge of Rust (e.g., nightly, async await, futures 0.3, wasm-bindgen, ...) and needs to be cleaned up before pushing. If you want more complex model you can try this instead: https://segfault87.github.io/ldraw-rs-preview/#models/6973.ldr https://segfault87.github.io/ldraw-rs-preview/#models/6973.l...
- tenaciousDaniel 7y agoI've always been a JS-focused web developer, with only a bit of experience in other languages (ObjC, Java). I'm trying to build a web app that heavily focuses on 2D graphics. I'm considering going with Rust + WASM, but I don't know anything about Rust. After doing this project, how would you say you feel about this stack? Yay? Nay? I know that's a vague question, but curious if you ran into any particular troubles. I'm not sure how ready WASM is for production apps.
- nicoburns 7y agoWASM is basically ready for 2 kinds of app: 1. Heavy computation with no UI. 2. Stuff that renders to Web GL. For the rest your still best off with JavaScript. 2D graphics is pretty borderline I'd say. More work in Rust+WASM, but doable. Rust itself is wonderful, and well worth learning for the backend if you ever do that kind of stuff.
- binthere 7y agohttp://arewegameyet.com http://arewegameyet.com might help
- segfault87 7y agoThe overall experience has been great. Web APIs(web-sys) are direct translations of WebIDL for now, experiences could get better if we have more 'rustic' APIs. (stdweb looks promising) Learning Rust can be tricky sometimes. Sometimes it requires you to rethink the way how you code - especially when dealing with the borrow checker. If you have to do async tasks (fetch, promises, ...) wait until async-await lands on Rust. It's possible on nightly Rust and wasm-bindgen git but it's not stable. Proceed with caution.
- grenoire 7y agoI ran through the source code of the renderer first, and then the implementation for the rest later. And I can honestly say this is one of the prettier Rust code I have seen so far.
- JoshTriplett 7y agoI'm excited about this; I remember using leocad to design complex models, and I'd love to have programmatic tools to work with the same formats in Rust.
- agumonkey 7y agoI get `RuntimeError: "unreachable executed"` on firefox nightly (two core2duo machines, linux and win10) is wasm unsupported ?
- grawlinson 7y agoNo issues on my machine on Linux 5.3, running today's build of Firefox Nightly.
- agumonkey 7y agoI didn't see some GL error prior this line, maybe the problem is my igpu.
- monocasa 7y agoLooks like a logic bug. You get that in an unreachable! macro, generally in a match statement where you think you covered everything by didn't.
- shmerl 7y agoIs there actual modeling? The site just shows a rotating object.
- amelius 7y agoThis is a legitimate question as the title says "Lego Modeling in Rust" Perhaps the idea is that the user models the object entirely by writing Rust code.
- outworlder 7y agoNo, it is rendering lego models loaded from a specific file format.
- inetknght 7y agoWhen I run this (Firefox 69.0 on Linux), I see basically nothing. The developer console says: RuntimeError: "unreachable executed" r https://segfault87.github.io/ldraw-rs-preview/2.index.js:1 r https://segfault87.github.io/ldraw-rs-preview/2.index.js:1 Gt https://segfault87.github.io/ldraw-rs-preview/2.index.js:1 __wbg_new_1719c88e1a2035ea https://segfault87.github.io/ldraw-rs-preview/index.js:1 a https://segfault87.github.io/ldraw-rs-preview/2.index.js:1 <anonymous> https://segfault87.github.io/ldraw-rs-preview/index.js:1
- tom_mellior 7y agoI have an Ubuntu machine where it works in both Firefox 69.0 (with glitches, as another commenter noted) and Chromium, and another Ubuntu machine where it works in neither. Might be a graphics driver issue?
- ameixaseca 7y agoIt worked for me, but colours were a bit off.
- Hydraulix989 7y agoThis doesn't work on iOS even though I thought IOS supported wasm?
- segfault87 7y agoCurrently Safari does not support WebGL2. Currently renderer depends on WebGL2 (which supports vertex array object out of the box).
- alin23 7y agoiOS 13 seems to support WebGL2 pretty well. The rendered model looks really good. You have to enable WebGL2 in the Safari settings under Advanced -> Experimental features
- echelon 7y agoRust is set up to take over the web. WASM with no need to GC will make for eye-bleedingly fast code. Just wait for Rust to get a DOM API and MVC/data binding framework. UI responsiveness will be incredible, and webapps will feel light weight again. I see a good Rust web frontend library eating React/Vue's lunch.
- illuminati1911 7y agoI'd hope this was the case, but big part of what has made web development popular and smooth is the easiness and flexibility of JavaScript as a language. Rust is not exactly easy and flexible, but everything else about it is absolutely great. I think people who will use/learn Rust are top x% or xx% developers who have decent experience in programming and probably understand pretty well how computers and computer systems work. Javascript has democratized programming and React/Redux stack is widely accepted by developers as well as people looking after business interests in companies doing software development. Rust would probably make world (of software) a better place, but there would be much less developers available and there already is global shortage of devs while demand is increasing. I don't see Rust replacing JS or React/Vue anytime soon.
- fortran77 7y agoRust will absolutely replace JS! You can compile it down to WebASM and people will start doing that soon. No more runtime errors in browsers! Yipee!
- hu3 7y agoRust is great but too cognitive-heavy to have any shot at replacing JS. One should not overestimate the importance of secure/fast over "gets shit done easily with minimal learning curve" on most projects.
- fortran77 7y ago> too cognitive-heavy Don't underestimate people's intelligence! (Or overestimate your own.) I think people will get it. Javascript is also very cognitive heavy.
- brainlessdev 7y agoAny idea why this runs completely smoothly on Chromium but on Firefox it's glitchy (apparently missing colors on some surfaces) and the FPS are much lower?
- Phillips126 7y agoReally nifty demo. I've never used wasm before, but I am curious how people feel about the size of the binaries. I am a JS developer and am well aware how bloated a project can get quickly. I agree with the majority that we need to keep our projects lean - especially for the web/mobile, hence this general inquiry. - I built a simple hello world in Rust (alert message) and the binary weighed 1kb - nice! - I found some sample code ~100 lines of Conway's game of life[1] and that binary is 28kb. - I see Ldraw weighs around 131kb - still very impressive. I don't know yet how wasm will be used in the world professionally, and it is very exciting to me as I am really interested in Rust, but will we start seeing some HUGE binaries out there? [1] https://rustwasm.github.io/book/game-of-life/implementing.html https://rustwasm.github.io/book/game-of-life/implementing.ht...