Popular Content

Showing most liked content since 01/12/2018 in all areas

  1. 14 points

    OfficeGames project

    Hi people, I'm glad to introduce you to my new project : OfficeGames. http://officegames.eu Well ... 3D games for office computers (not only, though). As said in the text, there's only one game for now and it's not even finished. I need your feedback and ideas to improve it and get it to the right direction. So please let your opinions, comments, criticisms, wishes, whatever in this thread. I won't answer everyone but will read them all for sure. Have fun [EDIT] FYI, my best score ever is 10200.
  2. 5 points

    MoviRender - under construction

    Hello, I wanted to introduce a new project that I have been working on for some time in parallel with HeroonEngine. It's a 3D interactive story editor with game-shaped animations with hiding points to find or interactive objects to click to advance a story that you create, which can happen successfully or with failure. You will be able : - Create multiple scenes and navigate from one to the other to make indoor scenes, other outdoor ... - Create multiple cameras per scene to create different viewpoints as can be seen in the movies and also navigate from one to the other. The cameras to create are cameras spectator, there is also a camera made by default for the editor which is the user camera not use on the final rendering of the game. - Create a scene from scratch with a terrain and a user camera and a default spectator camera or create from a list of prefect scenes with different themes that you can complete and save to continue your work later. - Add primitive objects (to create hiding points to click) or customize for a scene, position them, turn them and scale them. Its objects can be interactive or not, made visible or hidden and what does its interaction do following a type of click (single, double, drag and long) but also the camera change, scene change, triggering animations, dialogues, effects, sounds or to make hidden objects visible ... - Animate objects, cameras and characters that are triggered with interactions on objects to advance the story. - Each scene has default shadows to activate and a default sky rotation, you can change the environment settings by changing the sky texture, add fog and change post-process and others. - You can also add backgrounds of different types to simulate a scene background. Ideal for creating depth quickly. - You can also create lights, the edit and exclude objects to illuminate. So you can create with MoviRender all kind of interactive story. This can be a police investigation to solve and according to the choices made, the story runs successfully or with failure. It's still under construction, but it's at a good enough scene to be able to talk about it. I do not know when I could finish it, I still need maybe 2, 3 months of work on it to release a first public version. I also have the whole site to do with tutorials. So I still have a lot of work. I think it's something that can be fun to create interactive stories. Feel free to leave your comments to get your opinion on this project. If you have ideas of what you would like to do with this kind of program, it may inspire me to add what I would not think. I will make an announcement when this project is available. Thank you. Here is a small screenshot:
  3. 4 points

    In-Game Advertising for HTML5 games

    Mochi for Flash? Which decade are you living in?
  4. 4 points

    infinite rpg terrain proto

    BABYLONJS never ceases to amaze me, love you babylonjs, love you JavaScript and of course glsl. My next agenda is water bodies, trees and some jungle rocks just a sample proto... https://www.babylonjs-playground.com/#Z2TKLH
  5. 3 points

    OfficeGames announcement

    Announcement (and shameless auto-promotion) to a new project :
  6. 3 points
    You could do something like with just with phaser animations and timers. They are optional to loop or not. Each character is an animated sprite, essentially, which you can move around to set locations with timers/delays and then you have a scrolling background. Example https://phaser.io/examples/v2/animation/multiple-anims e.g. move object on a timer function moveObject(mySprite) { game.time.events.add(Phaser.Timer.SECOND * .3, function() { //.3 second delay before moving myObject.body.moveTo(myObject.duration, myObject.distance, myObject.direction); }, this); } So you just implement a series of animations and timers over a scrolling background.
  7. 3 points
    very nice idea i try it in GPU http://www.babylonjs-playground.com/#P75330#8 alpha http://www.babylonjs-playground.com/#P75330#9 discard https://www.babylonjs-playground.com/#P75330#12 shaderBuilder (parametric 249 in 255)
  8. 3 points
    Hi @trevordev, welcome to the forum, and thanks for being a forum helper. It's pretty cool when a user's first post... is helping another. (Wingnut shakes your hand vigorously.)
  9. 3 points
    Hi everyone! This is my little game called 'Salvage', a sort of turn-based bullet-hell game (with inspiration from SuperHot). I hope you enjoy, and I would of course appreciate any feedback or comments you would be willing to spare! https://e1sif.itch.io/salvage
  10. 3 points

    Watch out for gl.clear()!

    Hello, everyone! I just wanted to pass along some very important information that I just discovered regarding optimization that has been completely overlooked in optimization articles that I've read, and can have a huge impact on your apps! I have a game that pushes a pretty similar number of triangles and commands as the Sponza demo, but I wasn't enjoying anywhere near the same frame rate on slower systems. I fired up SpectorJS, cleaned up as much as I could in terms of draw calls and such, and wound up with a game that had fewer calls, fewer commands, and yet STILL ran a good deal slower than Sponza. However, there was one more metric that I had yet to take a close look at, and that was "clear()". I had 6 of them, while Sponza was using only 1. My game is a first-person-shooter that uses an additional camera to draw UI components, and on a different layer, so game geometry doesn't interfere with it. The player's hands and weapons are also drawn in a different rendering group for the same reason. It turns out, however, that for every new layer and group, Babylon kicks off a gl.clear() (which makes sense), and on systems with poor fill rates, this can absolutely wipe you out. In my case, the engine was clearing various buffers 6 times per frame, including multiple times per group/layer. Disabling Babylon's engine.prototype.clear() entirely made a world of difference in terms of FPS, though I do need at least 1 or 2 gl.clear() calls to accommodate my layering requirements. 6 is excessive and unnecessary, however, and I'm currently investigating ways to minimize that. Hopefully, I can do it all by simply modifying my code, but I suspect I might have to make some small engine modifications as well so I have greater control over when gl.clear() gets called, and just how many times. Edit: Just discovered scene.autoClear and scene.autoClearDepthAndStencil. Setting both to false takes care of... well... one of them!
  11. 3 points

    Putting text on a box

    Hi Hillardo, good to see you again. Here's one that uses... well... just about everything. https://www.babylonjs-playground.com/#YDO1F#25 I haven't studied HOW it does what it does, but it seems to do it well. Others will likely comment soon.
  12. 3 points

    GLSL Texture Buffer Manipulation

    and exactly for that you use RTT with doublebuffering - it will give you super fast particle simulation. idea is simple: on start fill rtt A with initial fluid data and on render set target to rtt B and bind rtt A texture, perform simulation, swap target with source, repeat.
  13. 3 points

    Wind Implementation

    Hi, everyone! I want to share my wind implementation in BabylonJS with explanations. It may to seem obvious. Wind is just an adding the vector to objects position. But if we'll go this way, then result will be boring. We'll just get sliding objects. Our goal is to perform the storm with bouncing and collisions. First of all we need to enable collisions for all meshes and camera. We' ll also configure gravity here. scene.gravity = new BABYLON.Vector3(0, -0.9, 0); scene.collisionsEnabled = true; camera.checkCollisions = true; camera.applyGravity = true; camera._needMoveForGravity = true; ground.checkCollisions = true; box.checkCollisions = true; c1.checkCollisions = true; c2.checkCollisions = true; c3.checkCollisions = true; Then we need to implement a kind of objects pushing. When camera can pushes objects. I decided to mark meshes that can be pushed by camera with special property "pushable". Here is implementation. var physicsPlugin = new BABYLON.CannonJSPlugin(); scene.enablePhysics(); ground.physicsImpostor = new BABYLON.PhysicsImpostor(ground, BABYLON.PhysicsImpostor.BoxImpostor, { mass: 0, restitution: 0.9 }, scene); box.physicsImpostor = new BABYLON.PhysicsImpostor(box, BABYLON.PhysicsImpostor.BoxImpostor, { mass: 10, restitution: 0.1 }, scene); c1.physicsImpostor = new BABYLON.PhysicsImpostor(c1, BABYLON.PhysicsImpostor.BoxImpostor, { mass: 20, restitution: 0.1 }, scene); c2.physicsImpostor = new BABYLON.PhysicsImpostor(c2, BABYLON.PhysicsImpostor.BoxImpostor, { mass: 20, restitution: 0.1 }, scene); c3.physicsImpostor = new BABYLON.PhysicsImpostor(c3, BABYLON.PhysicsImpostor.BoxImpostor, { mass: 150, restitution: 0.1 }, scene); //handling when camera pushes other meshes var playerImpulse = 30; //we can use fixed value, because player mass and velocity is constant in most cases camera.onCollide = function (mesh) { if (mesh.pushable) { var givenVelocity = playerImpulse / mesh.physicsImpostor.mass; var camPosition = camera.position.clone(); camPosition.y -= camera.ellipsoid.y * 0.80; //kick height var movementDirectionVector = mesh.getAbsolutePosition().subtract(camPosition); mesh.physicsImpostor.setLinearVelocity(movementDirectionVector.scale(givenVelocity)); } }; Ok, when we "touch" a mesh we detect if it's pushable, then calculate direction using camera and mesh positions. Thanks @Wingnut for tips with this part. Also, I correct direction at y property. It needed to make things look like the player applies force using his leg. So I correct the height at which the force will be applied. I don't use addImpulse method, because CannonJS accumulate impulses and we can boost meshes to incredible velocities by several touches. It's better to set the final velocities. And now the wind. We need some things to keep in mind to procced. Wind should preserve current meshes velocities. It should not to override, for example, a gravity effect. Wind should be applied to camera also for best user's experience. But we know that camera has now physicsImpostor. We must provide safe places, where we can hide from the wind, for example, in a cave or behind the building. Should work for meshes and camera. And now the implementation goes. var wb1 = BABYLON.MeshBuilder.CreateBox("wb1", {width: 8, height: 8, depth: 8}, scene); var wbMat = new BABYLON.StandardMaterial("wbmat", scene); wbMat.wireframe = true; wb1.position = new BABYLON.Vector3(55, -6, 2); wb1.material = wbMat; var wb2 = BABYLON.MeshBuilder.CreateBox("wb2", {width: 8, height: 8, depth: 8}, scene); wb2.position = new BABYLON.Vector3(40, -6, 20); wb2.material = wbMat; function pointIntersectsAny(volumes, point) { for (var k = volumes.length - 1; k >= 0; k--) { if (volumes[k].intersectsPoint(point)) { return true; } } return false; } function meshIntersectsAny(volumes, mesh) { for (var k = volumes.length - 1; k >= 0; k--) { if (volumes[k].intersectsMesh(mesh, false)) { return true; } } return false; } //wind processor, should be called from gaming loop function processWind (scene, camera, vector, meshWindScale, windBlocks) { var scale = meshWindScale || 1; var windBlocks = windBlocks || []; if (!pointIntersectsAny(windBlocks, camera.position)){ camera.position = camera.position.add(vector); } var meshes = scene.meshes; for (var i = meshes.length - 1; i>=0; i--) { if (meshes[i].pushable && meshes[i].physicsImpostor) { if (!meshIntersectsAny(windBlocks, meshes[i])) { meshes[i].physicsImpostor.setLinearVelocity(meshes[i].physicsImpostor.getLinearVelocity().add(vector.scale(scale))); } } } } Ok, wb1 and wb2 are safe volumes where is no wind at any conditions. I use a wireframe to display, later these meshes can be set as invisible. pointIntersectsAny and meshIntersectsAny are helpers and pretty self-explanatory. The main action is inside processWind function. We handle the camera and meshes separately. Actually, we don't see the player outside of the camera, so, we can manipulate it's position directly. What concerns the meshes, we should apply linearVelocity to them to make CannonJS to handle their movements in physical manner. Look how we preserved the initial linearVelocity using getLinearVelocity. Of cource the wind can't move the heavy objects if wind's strength is not big enough. If a camera or meshes are inside the safe volume then no wind will be applied to it. I also added an ability to scale the wind applied to meshes. It could be useful for some effects. For example, when player has a special boots with high friction value. So the player can resist the wind. Also important to say, that wind could be applied only to "pushable" meshes that have physicsImpostors. And all we need is just launch whe wind. var windAllowed = false; //press "f" to launch the wind document.addEventListener("keydown", function (e) { if (e.keyCode == 70) { windAllowed = true; } }); scene.registerBeforeRender(function () { if (windAllowed) { processWind(scene, scene.cameras[0], new BABYLON.Vector3(0.1, 0, 0.1), 2, [wb1, wb2]); } }); Here is playground: http://www.babylonjs-playground.com/#3CPL8T#1 I also implemented jumping, croaching and free mouse-look just for fun. =) Yeah, there are still some issues. For example, camera affected by the wind can flow through objects. It could be fixed by checking onCollide event. Another issue, this wind acts like constant force. It looks like spaceship depressurization than like actual wind. But you can try to add flurries using f(t) = |six(t)| function or something else. Feel free to tune my approach for your needs or share your implementations. If you want to use this in your project, the credits will be much appreciated but it's not required.
  14. 3 points

    In-Game Advertising for HTML5 games

    The beauty of web is that we can advertise whatever we want in our HTML5 games. There's no need to rely on third party ad-networks who insist we accept a fraction of the publishing value (while running the risk of not getting paid because of some vague violation claim upstream). That being said, I'd never recommend putting ads in a game that wasn't being played at least 20,000 times a day. Regular ads are usually counter productive to growth - so best to keep them away from early stage games.
  15. 2 points
  16. 2 points
    I would preload all the common resources at the start, then preload any extras per-room, as needed.
  17. 2 points
    Maybe this will work with Firefox: http://www.babylonjs-playground.com/#P75330#5 But it's flickering. There should be a workaround. Hope someone can find a solution to avoid that flickering.
  18. 2 points
    yeah, and remember the other option. Instead of adding and removing controls from a stack panel, perhaps... destroy the old one and build a new one. Don't destroy the controls, of course. But, if you had a killOldStackPanelAndGenerateNewStackPanel(panel, arrayOfControls) function, then it would be EASY to APPEAR-TO add and remove controls... when actually... you are doing a complete rebuild with each addition or removal. Whatever controls are reffed inside-of arrayOfControls, that's what controls are included in the new SP. So now... you can have various pre-made arrayOfControls... each ready to send to killOldStackPanelAndGenerateNewStackPanel(here) whenever you wish. This is another way of thinking... about stackPanels. IF your project can use this method, then the stackPanel will ALWAYS perfectly-fit the controls it contains. *shrug* In BABYLON GUI, this seems to be a wise general theme. In certain cases, instead of modifying something, dispose and re-create it... with the changes. This is because BJS GUI does most of its measuring.... at creation time. It is not good-at changing already-created things... due to its nature. (at least that's my theory). Party on!
  19. 2 points

    [Steam] CasinoRPG - Casino MMORPG

    We recently launched our web-based CasinoRPG on mobile for iOS/Android using Cordova. We’ve now taken a similar approach for desktop and used Electron and Greenworks to build a PC/Mac app for Steam. CasinoRPG is an MMORPG that merges role-playing, tycoon, city-building and casino games. It is built using our own fork of the Isogenic Engine, which uses 2D HTML5 canvas. Download on Steam
  20. 2 points
    hi i make this post for share some unexpected experience in shader code you can see a lot but you can fix it easly
  21. 2 points

    Text with border or bold

    Wait guys It is already supported http://doc.babylonjs.com/how_to/gui#controls Demo: https://www.babylonjs-playground.com/#XCPP9Y#411
  22. 2 points
    Had a play with equalising vertices and triangular facets in 2 meshes. Very very basic and sledge hammer to nut way of doing it and because the mapping of added vertices and facets is very primitive you get some poor results. The closer the two meshes are together the less weird the morph. So perhaps with more thought and finesse something might be workable. Note that in the following PGs I have changed the type of mesh without changing name from ground Morph ground to sphere vertices very different https://www.babylonjs-playground.com/#E6R01P Morph cylinder to sphere vertices less different https://www.babylonjs-playground.com/#E6R01P#1 Morph between two spheres, first sphere has less segments than target but closes to each other in number of vertices https://www.babylonjs-playground.com/#E6R01P#2 May be of no use at all but perhaps could lead to something.
  23. 2 points

    Problems due to world's scaling

    Hi Tom. Camera follow has been fixed in a newer version of Phaser. You should update to either phaser-ce or 2.6.2 Because you move the camera around, the pointer's arctan to the player will not be computed correctly if you use the pointer's local (x,y). You need the arctan from the pointer's (x,y) in world coordinates. Passing the world to moveToPointer(), will use the pointer's world coordinates (this is not intuitive, I know). game.physics.arcade.angleToPointer(player, game.input.activePointer, game.world); With these changes in, check out : https://jsfiddle.net/gauravdixitv/tmnen92m/
  24. 2 points

    Empty screenshot

    Odd, works fine for me http://playground.babylonjs.com/#8P4VBC#5
  25. 2 points

    Lighting for dummies

    Thanks a bunch that worked like a champ. No more hot spot on the ground. YAY!!
  26. 2 points

    OfficeGames announcement

    r u remember Boomber man
  27. 2 points
    hi. a blind programming student, looking to enroll in a game programming course online. use a screen reader jaws for windows from http://www.freedomscientific.com. now, any good accessible game engines, for doing open source audio games for the blind. any tips, tricks, recommendations, and links. tried most of the main stream game engines and totally useless with a screen reader. thanks. ps: using windows 10 64 bit pro on a toshiba satellite pro c-50-a laptop.
  28. 2 points

    Panda 2 Tips & tricks

    Want to set your game window to specific size? This is great for testing your game on different resolutions and for taking screenshots. First detach the game window to it's own window by pressing the detach button. Then click the detach button again while pressing Shift-key down. Popup window will appear, type the size you want into the window, for example "320x480": This will change the game window size so that the game area itself is exactly the resolution you entered (the red area):
  29. 2 points
    different between integer and float when you wanna make shader string in javascript var a = 4; shaderCode = "position.y = "+a+";"; // shader dont be compiled because you set integer value to float shaderCode = "position.y = float("+a+");"; //correct usage
  30. 2 points
    about variable when you use variable in shader code you most careful when you wanna use it in mathematical formula float a = 10; position.x = -a ; // return "a" value in some of android system position.x = -1.0*a ; // correct usage
  31. 2 points

    Cylinder between two points

    The function was based on work I did last year so whilst at the time I knew exactly what I was doing I cannot remember all the details, for example why I did Math.PI - calculated angle rather than just angle. However the basic idea goes like this. Given a polygon of lines you need to know the internal angle A between between two lines L and K meeting at a point P. Just using the dot product you do not know if you are getting the internal or external angle at point P. However using a cross product will tell you which. Just be consistent in moving around the polygon in a clockwise or counter clockwise direction, say K follows L., so always use L before K and find the line normal to L, say N. As L is in XoY plane one way to find N is to swap the x and y coordinates of L and make one negative (x, y).(y, -x) = xy - xy = 0 so must be perpendicular. Taking (consistently in order) the cross product of L and N this will give you a vector in the z direction (either positive or negative). Whether it is positive or negative determines whether you have found and internal or external angle. If P is an outer point of the frame and Q an inner point on the frame with the width between P and Q being we need to project Q onto the line R parallel to L but a distance w from it using angle A.
  32. 2 points
    Thanks @Dad72 and @Pryme8! You guys rock
  33. 2 points
    var canvas = document.getElementById("renderCanvas"); var engine = new BABYLON.Engine(canvas); var scene = new BABYLON.Scene(engine); scene.clearColor = new BABYLON.Color3(1, 1, 1); var camera = new BABYLON.FreeCamera("camera", new BABYLON.Vector3(-2.15, 0, -3.2), scene); camera.minZ = 0.01; var light = new BABYLON.PointLight("light", new BABYLON.Vector3(0, 5, -5), scene); var pathsToLoadFrom = ["./assets/obj_files_10/", "./assets/obj_files_11/", "./assets/obj_files_12/"]; //document.addEventListener("mousedown", push_path, false); var loader = function(paths){ this.mesh_pos = -5; this.meshs = []; for(let i=0; i<paths.length; i++){ this._run(paths[i]); this.mesh_pos += 1; } return this; }; loader.prototype._run = function(path) { BABYLON.SceneLoader.ImportMesh('', './', path, scene, (meshes) => { for(let i=0; i < meshes.length; i++){ let mesh = meshes[i]; mesh.position.x = this.mesh_pos; this.meshs.push(mesh); } }); }; engine.runRenderLoop(function () { scene.render(); }); var _l = new loader(pathsToLoadFrom);
  34. 2 points

    Name of textures

    http://doc.babylonjs.com/how_to/skybox#sky-images gives the answer, p for positive, n for negative , x, y, z axes and so for example nx is left hand image.
  35. 2 points

    Name of textures

    Hi Andrey ! I guess _px means "Axis X : positive" Which means "Right Face" of the cube in the babylon space. And so on. https://doc.babylonjs.com/babylon101/position#convention-2-world-axes (Red axis is X, Y is green, Z is blue). When you are at (0,0,0) at look toward Z positive, then X positive is on your right.
  36. 2 points

    Aliasing in VR mode

    compensateDistortion has to rely on postprocesses and unless you are on webgl2 we cannot enable antialiasing on them
  37. 2 points

    Lighting for dummies

    https://www.babylonjs-playground.com/indexstable#6BGZTI#7 Is it gone now? Usually, just set specularColor to black. That's what I did. Your hemi light is perfect for "even lighting", but I re-aimed yours straight-up (0, 1, 0), which is a little more sane than your numbers were. But any aiming is fine. Your hemi-light groundColor is fine, but you really won't be able to tell until you get a mesh or two into the scene, lift them off the ground a bit, and look at their bottoms. (I suppose the bottom of the ground could be used, too, eh?) Most people set .groundColor to some kind of gray like you have already set... new BABYLON.Color3(.3, .3, .3), or maybe BABYLON.Color3.Gray(). You're doing good, CB! What's ya workin' on for the real app? Is it a secret? Don't forget about material.emissiveColor (or emissiveTexture, with emissiveTexture.level adjuster)... which is essentially material self-illumination without casting photons (can't cast shadows and can't illuminate nearby objects). It is good fun, too. Be well, party on!
  38. 1 point

    Move world position on canvas

    // Menu must be outside game.world shapeMenu = game.make.sprite(0, 500, 'shapeMenu'); game.stage.addChild(shapeMenu); // Depends where you want it … game.world.setBounds(200, 150, 400, 300); // Camera bounds follow the world's, so reset them game.camera.bounds.setTo(0, 0, 800, 600);
  39. 1 point

    sending to back not working?

    Hi Casey. Children of a group will be rendered in the order in which they are added (unless of course you change the order with functions like sendToBack()). Because you add the background first, it will be rendered before everything else (so you don't need the call to sendToBack() on bg), and the text should appear on top - https://jsfiddle.net/gauravdixitv/r6v7sLkw/ Perhaps, you are changing the group's order somewhere else in your code?
  40. 1 point
    Hi BabylonJs lovers, Now you can apply transparent background on videos with chromakey (green background). Check the demo here: http://www.babylonjs-playground.com/#P75330 Enjoy...
  41. 1 point

    PhysicsElapsed & Monitor Refresh rate

    desiredFps is actually the logic update rate. Usually it should be the same as the animation frame rate (60, or the monitor's refresh rate). It can't be infinite (or even very large) because there's only enough time to complete a few updates in each frame interval.
  42. 1 point
    Jean-Philippe Côté

    Empty screenshot

    I was thinking more of the API documentation. I stumbled upon a few errors that are bound to trip people up (like it did for me). As far as I can tell, the API doc is generated from source so I guess I'll just submit PRs. Thanks.
  43. 1 point

    Foody Avenue

    Hi guys, We just want to share our simulation game, it's an HTML5 game and available on google playstore too. You can try to play Foody Avenue game here: http://www.littlegiantworld.com/games/foodyavenue/play.php Feel free to tell us if you had any comments or critics. Also this game is available for sitelock sponsorship, feel free to contact us to license the game. Have a great day Guys
  44. 1 point
    Hi @hektor74 I just saw this comment yesterday while googling for the same problem. Please look this issue in the Phaser Editor repo: https://github.com/PhaserEditor2D/PhaserEditor/issues/67#issuecomment-357732936 Next time you can add issues there or mention @PhaserEditor2D here to get a notification. Regards Arian
  45. 1 point

    Tutorial Talk

    From what I have read you can have HTML tags im markdown just to lazy to to do the table.
  46. 1 point

    Resize Function in Panda 2?

    @Ninjadoodle https://www.panda2.io/docs/api/Scene There is onResize function on Scene, is that what you are looking for?
  47. 1 point

    GLSL Texture Buffer Manipulation

    Nope you can do that with no problem but using RenderTargetTexture : https://www.babylonjs-playground.com/#14VWOV#8
  48. 1 point
    Still having fun with my line2D function. Two more options 1. closed, a boolean, defaults to false, when true will close the path. 2. standardUV, a boolean, defaults to true. When true imagine scaling the line so that it fits on the texture, placing the line on the texture and cutting the texture around the line. When false the texture is squeezed onto each line segment. When the line is closed and there is are an odd number of segments the texture on the first and closing segments need to match. https://www.babylonjs-playground.com/#FA2H7X#1 EDIT When you want a line drawn in 3D space then as others have said in other topics the best way is with a tube.
  49. 1 point

    Tons of Animations

    https://www.babylonjs-playground.com/#7EEDJJ#4 for 500 mesh you just manage your scale and move or rotate condition per each mesh in vertex shader code (line 20 - 35 ) you can make more by SPS Too and More by GPU SPS (very complicated ) again but in all GPU solution you miss collision and Physics
  50. 1 point

    Creating Constant-Width 2D Lines

    I keep telling that to everyone ;D