Tag: 上海后花园夜生活

zhubzrzr

Byron Jennings Replaces Rene Auberjonois in She Loves Me

first_imgBroadway switcheroo alert! Byron Jennings has boarded the starry cast of She Loves Me. The Great White Way alum replaces the previously announced René Auberjonois as Maraczek in the revival, who has departed the production due to personal reasons. Headlined by Laura Benanti, Zachary Levi and Jane Krakowski, the show will play a limited engagement February 19, 2016 through June 5. Opening night is scheduled for March 17 at Roundabout’s Studio 54.Jennings returns to the Roundabout Theatre Company stage, where his credits include The Man Who Came To Dinner, Heartbreak House, A Touch of the Poet, Twelve Angry Men and A Month in the Country. Other recent Broadway credits include You Can’t Take It With You and Macbeth.Directed by Scott Ellis and featuring a book by Joe Masteroff, lyrics by Sheldon Harnick and music by Jerry Bock, She Loves Me follows Georg (Levi) and Amalia (Benanti), two parfumerie clerks who aren’t quite the best of friends. Constantly bumping heads while on the job, the sparring coworkers can’t seem to find common ground. But little do they know, the anonymous romantic pen pals they have both been falling for happen to be each other! Will love continue to blossom once their identities are finally revealed? The score features favorites such as “Vanilla Ice Cream,” “A Romantic Atmosphere,” “Dear Friend” and “She Loves Me.”The musical comedy’s cast will also include Gavin Creel and Michael McGrath. Zachary Levi Star Files View Comments Laura Benantilast_img read more

CONTINUE READING
tchojqig

ThurstonTalk’s Weekend Event Calendar For Olympia

first_imgTemperatures are dropping slightly but the Olympia weekend weather forecast is still glorious.  Thurston County residents have a wide variety of activities on the events calendar for this weekend.  ThurstonTalk is your one-stop place for info about cool things happening around town.  Our full events calendar can be found here.Here’s a sampling of some events happening this weekend in Olympia.27 Feet of Art and More! – The Washington Center for the Performing Arts fills its gallery with local artists.  Art will be on exhibit through October 6th but kicks off on Friday.Waterfront Art Tour – A free waterfront art tour leaves from the Olympia Famers Market at 11:00 am on Saturday.  The one-hour tour highlights public art around downtown Olympia.Ballet Northwest Holds Auditions for the Nutcracker – On Saturday afternoon, dancers will view for spots in the holiday tradition of Ballet Northwest’s Nutcracker.Mijas – Bringing Women Together To Create Delicious Mexican Food – On the third Saturday of each month, a group of women, connected through SafePlace Olympia, prepare an authentic Mexican meal.  Reservations recommended.  Dinner served at the Governor Hotel in downtown Olympia from 3:00 – 9:00 pm.Salmon Migration Continues Through Downtown Olympia – I stopped by the 5th Avenue bridge on Thursday and the salmon are still schooling below the dam.  Swing by, take a peak, and learn about the migration process from the Pacific Ocean all the way to Tumwater Falls and the Deschutes River.ThurstonTalk aims to be your source for positive information and events happening in Olympia.  If you have a suggestion for a post, send us a note at [email protected]  For more events and to learn what’s happening in Olympia and the surrounding area, click here. Facebook15Tweet0Pin0last_img read more

CONTINUE READING
thlqtbot

4 LANTERNS USL: WINS FOR ROVERS, HARPS, CITY AND COCKHILL

first_img4 Lanterns USL Results & Reports 27.04.14ResultsSwilly Rovers 2 1 Fanad Utd. Drumkeen Utd. 2 3 Derry City Res.Bonagee Utd. 1 2 Finn Harps Res.Cockhill Celtic 1 0 Letterkenny Rovers  ReportsDrumkeen Utd. 2Derry City Res. 3The first half of this game was fairly uneventful with the Drumkeen goal the only real highlight.That came on 17 minutes, David Shovlin ran from his own half and then played a good pass to Conor Carlin just inside the penalty area and he made no mistake as he calmly slotted it past the advancing keeper Mihael Lynch. Up to that point and indeed after that it had been scrappy enough, neither side were creating many clear cut chances. Derry’s only chance of note came on 22 minutes when Rory Patterson shot narrowly wide when the ball fell to him following a Derry corner. Drumkeen would have been happy enough going in a goal up at half time, they had a goal and they had managed to keep Rory Patterson quiet apart from that one chance, Patterson had a quiet first half and anytime he did get the ball Ryan Gildea was always in close attendance. The game really came alive at the start of the second half, a Drumkeen free went straight to keeper Michael Lynch, his long kick up the pitch was headed on by Rory Patterson into the path of Nathan Boyle who fired it home from the right side of the penalty box. Derry then had a couple of chances,  Conor McDermott  and Rory Patterson both had efforts saved by Stephen Conroy and Drumkeen then had a chance when Ronan Coyle just failed to get on the end of a Carlin cross from the right wing.Shortly after that the action switched to the other end and Derry took the lead, Nathan Boyle got the ball out wide right, he ran parallel to the end line into the box and shot across the goal into the net at the far post. Drumkeen kept going and got themselves level again 8 minutes later when they were awarded a penalty, Darren Mc Cready stepped up and  converted it to leave it all square again. That situation did not last long as Derry were back in front two minutes later, that man Boyle again. This time he ran through the middle and managed to get his shot away while under pressure from a Drumkeen defender. In the last twenty minutes Drumkeen tried hard but could not create another goal scoring chance for themselves. All the talk was about Rory Patterson before the game but it was Nathan Boyle who stole the show with his hat trick, based on that second half Derry will give everyone a good game and could upset a few more teams before the season is over. That win lifts them up to joint top with Cockhill. A disappointing result for the home team who will now find it very difficult to repeat their feat of last season when they pushed Cockhill all the way. The cup competitions may be their best hope of winning something this year. They now turn their attention to their Knockalla cup semi-final against Letterkenny next week and they are still well placed in the League cup.DRUMKEEN -Stephen Conroy, Michael Carroll, Dean Bonner, Ryan Gildea, Paddy Mc Laughlin, Philip White, Darren Cassidy, Darren Mc Cready, Ronan Coyle, Conor Carlin, David Shovlin, SUBS Eunan Kelly on for Coyle 66 mins, Chris Mc Bride on for White 66 mins, Gary Patton on for Shovlin 76 mins DERRY – Michael Lynch, Michael Barr, Dylan Mc Callion, Shane Mc Eleney, Ciaron Harkin, Ryan Doherty, Connor Barr, Caolan  Mc Laughlin, Nathan Boyle, Conor Mc Dermott, Rory Patterson, SUBS Paul Ramsey, Dylan Harkin, Adrian Mc Cauley,REFEREE- Tommy Mc Aree Swilly Rovers 2Fanad Utd. 1 A victory for Swilly in this local derby in front of a great crowd on this sunny evening. Swilly’s Gareth Colhoun crossed on seven minutes and David Fisher’s powerful header was just over. Fisher was then replaced by Darren Dunworth following a shoulder injury. Fanad’s Brian Mc Veigh went close for Fanad with a low drive on 17 minutes. Calvin Mooney with a delightful lobbed effort and a stunning Michael Mc Hugh 25 yard volley both within a minute put Swilly very much in control. Swilly lead 2-0 at the break. Swilly’s Gareth Wade was sent off on 51 minutes in controversial circumstances. Fanad pulled a goal back on 52 minutes when the impressive Daire Mc Daid delivered a fine free kick which was glanced home by Adam Seranna. Mc Hugh was denied by a clearance off the line by a Fanad defender on 76 minutes. Ryan Mc Daid then had an effort narrowly wide on 80 minutes. Fanad piled on the pressure in the final ten minutes but the points stayed in Ramelton. Former Swilly legend John Roulstone replaced Wade in the Swilly goal. Match referee was Vincent Mc Laughlin.Swilly Rovers: Gareth Wade, Duncan Patterson, Gareth Colhoun, Martin Boyce, Dylan Hegarty, Columba O’Donnell, David Fisher, Martin Mc Daid, Michael Mc Hugh, Laurence Toland, Calvin Mooney. Subs used: Ryan Mc Daid, Darren Dunworth, John Roulstone. Subs not used: Cathal Diver, Mark Wilson. Fanad United: Shane Graham, Kevin Murray, Daire Mc Daid, Declan Sweeney, James Mc Cahill, Jordan Mc Bride, Oisin Hassett, Conor Blaney, Adam Seranna, Johnny Logue, Brian Mc Veigh. Subs used: Caolan Mc Daid, Dean Mc Carry. Subs not used: Shay Durning, Kyle Burke, Conor Mc Gonigle, Darragh Harper. Champions Win Close EncounterCockhill Celtic 1Letterkenny Rovers 0 Played in near perfect conditions both sides cancelled each other out for much of the 1st half. Both sides struggled to gain a foothold in a scrappy affair. Chances were at a premium with defences on top. Letterkenny’s only chance of the 1st half fell to Stevie Okakpu when he ghosted in behind the Cockhill defence on 15 minutes, with only Cullen to beat he shot over from 15 yards. Cockhill had a major shout for a penalty on 40 mins when a Derek Doherty cross seemed to hit a Rovers defender’s arm but the Ref wasn’t having it. Half time 0 -0.Cockhill started the second half on the front foot and brought the game to Rovers. Mark Moran went close from distance on 50 minutes. Jimmy Bradley missed an open goal on 53 when the young Rovers Keeper misjudged a Gavin Cullen punt up-field. Malachy Mc Dermott seemed to have given the home side a lead on 60 when he connected from a Moran free but Ref Paul Duddy gave a free out for a foul much to the astonishment to the home side. Cockhill continued to press Rovers for much of the 2nd half but couldn’t find a break through a resolute Rovers defence. Cockhill freshened up their attack with the introduction of Gerry Gill and Garbhain Friel on 70 minutes and it was that combination which provided the only goal of the game. Gill swung a free into the box on 82 and the big centre forward rose to power an unstoppable header to the top corner. Rovers piled men forward for the remainder of the game, forcing the home defence to sit back but with Johnny Havlin in outstanding form Cockhill held out for a hard fought victory.Final score: Cockhill Celtic 1 Letterkenny Rovers 0. Harps get Second WinBonagee Utd. 1Finn Harps Res. 2An entertaining game played in the sunshine yesterday afternoon, Finn Harps came away with all three points, but yet again this season, Bonagee will rue a host of missed chances. The home side went ahead in the 19th minute, when a long ball into the area by Mark Harkin was met by the head of Kevin Barr, who scored from 6 yards.  Further chances fell the way of Aidan McLaughlin and Anthony Appiah in the first half, but the score remained one nil going in at the break.  The visitors began the second period brightly and deservedly drew level in the 58th minute, when a free from wide on the left caused confusion in the Bonagee penalty area, and Gareth Harkin capitalised on the hesitation to make the score one each.  Bonagee had an excellent chance to regain their lead, but somehow Appiah blazed over.  Harps got their winner in the 77th minute, when Graham Fisher crossed into the area where Daragh Black side footed home from six yards.  Ref Packie Coll Bonagee: Smyth, Lynagh, Harkin, Frankowski, Breslin, McBrearty, Doran (Murphy), A Harkin (McGee), McLaughlin, Barr & Browne (Appiah)Harps: Patton, Flanagan, McDermott, Scanlon, Gallagher, Curran, Henry, Fisher, Black, Buchanan, G Harkin  FixturesKnockalla Caravans Cup Semi-FinalsThursday, May 1st at 7pmLetterkenny Rovers v Drumkeen Utd. Sunday, May 4thSwilly Rovers v Cockhill Celtic4 LANTERNS USL: WINS FOR ROVERS, HARPS, CITY AND COCKHILL was last modified: April 27th, 2014 by John2Share this:Click to share on Facebook (Opens in new window)Click to share on Twitter (Opens in new window)Click to share on LinkedIn (Opens in new window)Click to share on Reddit (Opens in new window)Click to share on Pocket (Opens in new window)Click to share on Telegram (Opens in new window)Click to share on WhatsApp (Opens in new window)Click to share on Skype (Opens in new window)Click to print (Opens in new window)Tags:Cockhill Celticdrumkeen unitedFinn Harps ReservesLetterkenny RoversUlster Senior Leaguelast_img read more

CONTINUE READING
ghhejcki

Some Aunt Jemima products being recalled for possible Listeria contamination

first_imgOTTAWA – The Canadian Food Inspection Agency says Pinnacle Foods Canada Corporation is recalling Aunt Jemima Frozen Waffles and Frozen French Toast Slices due to possible Listeria monocytogenes contamination.The CFIA says distributors, retailers and food service establishments such as hotels, restaurants, cafeterias, hospitals and nursing homes should not sell or use the recalled products.The CFIA says the recalled products were sold to food service accounts nationally, but there have been no reported illnesses.The recalled items are Aunt Jemima Waffles, 144 count, 3.57 kilograms, with UPC code 1 00 19600 43575 1; Aunt Jemima Original Thin French Toast, 144 count, 6.1 kilogram, with UPC 0 00 19600 05870 0; and Aunt Jemima Thick French Toast, 72 count, 4.86 kilogram with UPC 0 00 19600 43560 0.Food contaminated with Listeria monocytogenes may not look or smell spoiled. Symptoms can include vomiting, nausea, persistent fever, muscle aches, severe headache and neck stiffness.The CFIA says the recall was triggered by a voluntary recall in another country.last_img read more

CONTINUE READING
tchojqig

Records office criticised Police extends hours to reduce wait

first_imgFacebook Twitter Google+LinkedInPinterestWhatsApp Facebook Twitter Google+LinkedInPinterestWhatsAppTurks and Caicos, July 20, 2017 – Providenciales – Royal Turks and Caicos Police hopes that extended hours at their records office will reduce the long waits and long lines for police character certificates.    Just as a resident wrote to Magnetic Media about the frustrating experience of getting a police record document, there came a notice to say the hours of operation are now from 8AM to 4:30PM Monday to Thursday and until 4PM on Friday.The resident said, “It’s a huge disappointment for the public to be treated in such a way that we are not important. Why the delays, and short staff for public service?”   We contacted police; Deputy Commissioner Trevor Botting replied to the query with, ” We were aware of some delays for those applying for police records, that is why we have revised the process.   We will be monitoring the effect of the changes but I am optimistic that the public will notice an improvement in the service we are providing.”The Police notice informs that it will take two days to get a police record and pick up times will be from 1:30PM to 4:30PM daily. The full notice is posted online.#MagneticMediaNews#TCIPolicerecordsoffice Related Items:#magneticmedianews, #TCIPolicerecordsofficelast_img read more

CONTINUE READING
zjqfopfy

Body of man found in drainage channel in Sonarpur

first_imgKolkata: The body of an unidentified middle-aged man was found in a drainage channel at Sonarpur in South 24-Parganas on Sunday morning. Police said locals who went out on a morning walk noticed the body and informed the police. Policemen from the local police station went to the spot. After preliminary investigation, police found injury marks on his body.Police have initiated a probe in this connection and they are trying to identify the man. They have spoken to the locals to know whether they had seen the man earlier in the area. They are also trying to ascertain whether there is any foul play behind the incident or he received the injuries when he fell in the drainage channel. Police have contacted adjacent police stations to get the identity of the man.last_img read more

CONTINUE READING
uasvrdye

How Dreamt It Got Approved for Apples App Store in 2 Hours

first_img Free Webinar | Sept. 9: The Entrepreneur’s Playbook for Going Global Growing a business sometimes requires thinking outside the box. Register Now » min read Opinions expressed by Entrepreneur contributors are their own. June 12, 2012 If you’re thinking about building an app and want to know what it takes to get an app approved by Apple, check out what Jason Becker has to say on the topic. He and his team created Dreamt It — an ingenious little app that taps into the iPhone’s Siri voice recognition software to help its users keep track of and share their dreams. After a 60-day build, Dreamt It was approved for the Apple app store in about two hours.Apple’s app submission process is often viewed as mysterious or extremely difficult. Use these tips to successfully navigate it and get your app approved:Understand Apple’s standards before building your app. Apple takes care to establish clear guidelines for developing applications for its app store. Dreamt It’s developers understood the constraints and expectations that Apple has for new applications, which helped the start-up quickly refine its app’s functional goals.Build your app with open-source tools. Dreamt It uses ShareKit, an open-source tool that developers can integrate into their apps to enable users to share content through social networks, email and SMS. Dreamt It didn’t need to invent its own sharing capabilities to be successful, and you don’t, either.Related: There’s an App Maker for ThatSubmit once you’re a user, not a tester. A winning recipe for application approval is to submit an app that’s bug-free, looks great and provides clear, differentiated value for users. If you find yourself happily using (not testing) your app every day, you’re probably ready for submission.Don’t forget the details. Apple has a lot of secondary requirements for apps, including logo size, links to support pages and age-appropriate settings. Overlooking these details is a surefire way to have your app rejected.Expect a subjective feedback. A real, live person leads the app review process, so you should expect a review from Apple. While review times vary, your Apple reviewer will be assigned between seven and 10 days following your submission. How long a review takes and whether you’ll pass on the first try is anyone’s guess. Be sure your expectations for launch include time to fix issues and re-submit to Apple if necessary.Related: Three Ways to Make Your App Stand Out (Video)last_img read more

CONTINUE READING
zjqfopfy

Building VR experiences with React VR 20 How to create maze thats

first_imgIn today’s tutorial, we will examine the functionality required to build a simple maze. There are a few ways we could build a maze. The most straightforward way would be to fire up our 3D modeler package (say, Blender) and create a labyrinth out of polygons. This would work fine and could be very detailed.However, it would also be very boring. Why? The first time we get through the maze will be exciting, but after a few tries, you’ll know the way through. When we construct VR experiences, you usually want people to visit often and have fun every time.This tutorial is an excerpt from a book written by John Gwinner titled Getting Started with React VR. In this book, you will learn how to create amazing 360 and virtual reality content that runs directly in your browsers.A modeled labyrinth would be boring. Life is too short to do boring things. So, we want to generate a Maze randomly. This way, you can change the Maze every time so that it’ll be fresh and different. The way to do that is through random numbers to ensure that the Maze doesn’t shift around us, so we want to actually do it with pseudo-random numbers. To start doing that, we’ll need a basic application created. Please go to your VR directory and create an application called ‘WalkInAMaze’:react-vr init WalkInAMazeAlmost random–pseudo random number generatorsTo have a chance of replaying value or being able to compare scores between people, we really need a pseudo-random number generator. The basic JavaScript Math.random() is not a pseudo-random generator; it really gives you a totally random number every time. We need a pseudo-random number generator that takes a seed value. If you give the same seed to the random number generator, it will generate the same sequence of random numbers. (They aren’t completely random but are very close.) Random number generators are a complex topic; for example, they are used in cryptography, and if your random number generator isn’t completely random, someone could break your code.We aren’t so worried about that, we just want repeatability. Although the UI for this may be a bit beyond the scope of this book, creating the Maze in a way that clicking on Refresh won’t generate a totally different Maze is really a good thing and will avoid frustration on the part of the user. This will also allow two users to compare scores; we could persist a board number for the Maze and show this. This may be out of scope for our book; however, having a predictable Maze will help immensely during development. If it wasn’t for this, you might get lost while working on your world. (Well, probably not, but it makes testing easier.)Including library code from other projectsUp to this point, I’ve shown you how to create components in React VR (or React). JavaScript interestingly has a historical issue with include. With C++, Java, or C#, you can include a file in another file or make a reference to a file in a project. After doing that, everything in those other files, such as functions, classes, and global properties (variables), are then usable from the file that you’ve issued the include statement in.With a browser, the concept of “including” JavaScript is a little different. With Node.js, we use package.json to indicate what packages we need. To bring those packages into our code, we will use the following syntax in your .js files:var MersenneTwister = require(‘mersenne-twister’);Then, instead of using Math.random(), we will create a new random number generator and pass a seed, as follows: var rng = new MersenneTwister(this.props.Seed);From this point on, you just call rng.random() instead of Math.random().We can just use npm install and the require statement for properly formatted packages. Much of this can be done for you by executing the npm command:npm install mersenne-twister –saveRemember, the –save command to update our manifest in the project. While we are at it, we can install another package we’ll need later:npm install react-vr-gaze-button –saveNow that we have a good random number generator, let’s use it to complicate our world.The Maze render()How do we build a Maze? I wanted to develop some code that dynamically generates the Maze; anyone could model it in a package, but a VR world should be living. Having code that can dynamically build Maze in any size (to a point) will allow a repeat playing of your world.There are a number of JavaScript packages out there for printing mazes. I took one that seemed to be everywhere, in the public domain, on GitHub and modified it for HTML. This app consists of two parts: Maze.html and makeMaze.JS. Neither is React, but it is JavaScript. It works fairly well, although the numbers don’t really represent exactly how wide it is.First, I made sure that only one x was displaying, both vertically and horizontally. This will not print well (lines are usually taller than wide), but we are building a virtually real Maze, not a paper Maze.The Maze that we generate with the files at Maze.html (localhost:8081/vr/maze.html) and the JavaScript file—makeMaze.js—will now look like this:x1xxxxxxxx x xxxx x x xx x x xx xxxxx xx x x xx x x x xx x 2xxxxxxxxxIt is a little hard to read, but you can count the squares vs. xs. Don’t worry, it’s going to look a lot fancier. Now that we have the HTML version of a Maze working, we’ll start building the hedges.This is a slightly larger piece of code than I expected, so I broke it into pieces and loaded the Maze object onto GitHub rather than pasting the entire code here, as it’s long. You can find a link for the source at: http://bit.ly/VR_Chap11Adding the floors and type checkingOne of the things that look odd with a 360 Pano background, as we’ve talked about before, is that you can seem to “float” against the ground. One fix, other than fixing the original image, is to simply add a floor. This is what we did with the Space Gallery, and it looks pretty good as we were assuming we were floating in space anyway.For this version, let’s import a ground square. We could use a large square that would encompass the entire Maze; we’d then have to resize it if the size of the Maze changes. I decided to use a smaller cube and alter it so that it’s “underneath” every cell of the Maze. This would allow us some leeway in the future to rotate the squares for worn paths, water traps, or whatever.To make the floor, we will use a simple cube object that I altered slightly and is UV mapped. I used Blender for this. We also import a Hedge model, and a Gem, which will represent where we can teleport to. Inside ‘Maze.js‘ we added the following code:import Hedge from ‘./Hedge.js’;import Floor from ‘./Hedge.js’;import Gem from ‘./Gem.js’;Then, inside the Maze.js we could instantiate our floor with the code:Notice that we don’t use ‘vr/components/Hedge.js‘ when we do the import; we’re inside Maze.js. However, in index.vr.js to include the Maze, we do need:import Maze from ‘./vr/components/Maze.js’;It’s slightly more complicated though. In our code, the Maze builds the data structures when props have changed; when moving, if the maze needs rendering again, it simply loops through the data structure and builds a collection (mazeHedges) with all of the floors, teleport targets, and hedges in it. Given this, to create the floors, the line in Maze.js is actually: mazeHedges.push();Here is where I ran into two big problems, and I’ll show you what happened so that you can avoid these issues. Initially, I was bashing my head against the wall trying to figure out why my floors looked like hedges. This one is pretty easy—we imported Floor from the Hedge.js file. The floors will look like hedges (did you notice this in my preceding code? If so, I did this on purpose as a learning experience. Honest).This is an easy fix. Make sure that you code import Floor from ‘./floor.js’; note that Floor not type-checked. (It is, after all, JavaScript.) I thought this was odd, as the hedge.js file exports a Hedge object, not a Floor object, but be aware you can rename the objects as you import them.The second problem I had was more of a simple goof that is easy to occur if you aren’t really thinking in React. You may run into this. JavaScript is a lovely language, but sometimes I miss a strongly typed language. Here is what I did:Inside the maze.js file, I had code like this:for (var j = 0; j After some debugging, I found out that the value of j was going from 0 to 42. Why did it get 42 instead of 6? The reason was simple. We need to fully understand JavaScript to program complex apps. The mistake was in initializing SizeX to be ‘4’ ; this makes it a string variable. When calculating j from 0 (an integer), React/JavaScript takes 2, adds it to a string of ‘4’, and gets the 42 string, then converts it to an integer and assigns this to j.When this is done, very weird things happened.When we were building the Space Gallery, we could easily use the ‘5.1’ values for the input to the box:Then, later use the transform statement below inside the class: transform: [ { translate: [ this.props.MyX, -1.7, this.props.MyZ] } ]React/JavaScript will put the string values into This.Props.MyX, then realize it needs an integer, and then quietly do the conversion. However, when you get more complicated objects, such as our Maze generation, you won’t get away with this.Remember that your code isn’t “really” JavaScript. It’s processed. At the heart, this processing is fairly simple, but the implications can be a killer.Pay attention to what you code. With a loosely typed language such as JavaScript, with React on top, any mistakes you make will be quietly converted to something you didn’t intend.You are the programmer. Program correctly.So, back to the Maze. The Hedge and Floor are straightforward copies of the initial Gem code. Let’s take a look at our starting Gem, although note it gets a lot more complicated later (and in your source files):import React, { Component } from ‘react’;import { asset, Box, Model, Text, View} from ‘react-vr’;export default class Gem extends Component {constructor() {super();this.state = {Height: -3 };}render() {return ();}}CopyThe Hedge and Floor are essentially the same thing. (We could have made a prop be the file loaded, but we want a different behavior for the Gem, so we will edit this file extensively.)To run this sample, first, we should have created a directory as you have before, called WalkInAMaze. Once you do this, download the files from the Git source for this part of the article (http://bit.ly/VR_Chap11). Once you’ve created the app, copied the files, and fired it up, (go to the WalkInAMaze directory and type npm start), and you should see something like this once you look around – except, there is a bug. This is what the maze should look like (if you use the file  ‘MazeHedges2DoubleSided.gltf‘ in Hedge.js, in the statement):>Now, how did we get those neat-looking hedges in the game? (OK, they are pretty low poly, but it is still pushing it.) One of the nice things about the pace of improvement on web standards is their new features. Instead of just .obj file format, React VR now has the capability to load glTF files.Using the glTF file format for modelsglTF files are a new file format that works pretty naturally with WebGL. There are exporters for many different CAD packages. The reason I like glTF files is that getting a proper export is fairly straightforward. Lightwave OBJ files are an industry standard, but in the case of React, not all of the options are imported. One major one is transparency. The OBJ file format allows that, but at of the time of writing this book, it wasn’t an option. Many other graphics shaders that modern hardware can handle can’t be described with the OBJ file format.This is why glTF files are the next best alternative for WebVR. It is a modern and evolving format, and work is being done to enhance the capabilities and make a fairly good match between what WebGL can display and what glTF can export.This is however on interacting with the world, so I’ll give a brief mention on how to export glTF files and provide the objects, especially the Hedge, as glTF models.The nice thing with glTF from the modeling side is that if you use their material specifications, for example, for Blender, then you don’t have to worry that the export won’t be quite right. Today’s physically Based Rendering (PBR) tends to use the metallic/roughness model, and these import better than trying to figure out how to convert PBR materials into the OBJ file’s specular lighting model. Here is the metallic-looking Gem that I’m using as the gaze point:Using the glTF Metallic Roughness model, we can assign the texture maps that programs, such as Substance Designer, calculate and import easily. The resulting figures look metallic where they are supposed to be metallic and dull where the paint still holds on.I didn’t use Ambient Occlusion here, as this is a very convex model; something with more surface depressions would look fantastic with Ambient Occlusion. It would also look great with architectural models, for example, furniture.To convert your models, there is user documentation at http://bit.ly/glTFExporting. You will need to download and install the Blender glTF exporter. Or, you can just download the files I have already converted. If you do the export, in brief, you do the following steps:Download the files from http://bit.ly/gLTFFiles. You will need the gltf2_Principled.blend file, assuming that you are on a newer version of Blender.In Blender, open your file, then link to the new materials. Go to File->Link, then choose the gltf2_Principled.blend file. Once you do that, drill into “NodeTree” and choose either glTF Metallic Roughness (for metal), or glTF specular glossiness for other materials.Choose the object you are going to export; make sure that you choose the Cycles renderer.Open the Node Editor in a window. Scroll down to the bottom of the Node Editor window, and make sure that the box Use Nodes is checked.Add the node via the nodal menu, Add->Group->glTF Specular Glossiness or Metallic Roughness.Once the node is added, go to Add->Texture->Image texture. Add as many image textures as you have image maps, then wire them up. You should end up with something similar to this diagram.To export the models, I recommend that you disable camera export and combine the buffers unless you think you will be exporting several models that share geometry or materials. The Export options I used are as follows:Now, to include the exported glTF object, use the component as you would with an OBJ file, except you have no MTL file. The materials are all described inside the .glTF file. To include the exported glTF object, you just put the filename as a gltf2 prop in the : To find out more about these options and processes, you can go to the glTF export web site. This site also includes tutorials on major CAD packages and the all-important glTF shaders (for example, the Blender model I showed earlier).I have loaded several .OBJ files and .glTF files so you can experiment with different combinations of low poly and transparency. When glTF support was added in React VR version 2.0.0, I was very excited as transparency maps are very important for a lot of VR models, especially vegetation; just like our hedges. However, it turns out there is a bug in WebGL or three.js that does not render the transparency properly. As a result, I have gone with a low polygon version in the files on the GitHub site; the pictures, above, were with the file MazeHedges2DoubleSided.gltf in the Hedges.js file (in vr/components).If you get 404 errors, check the paths in the glTF file. It depends on which exporter you use—if you are working with Blender, the gltf2 exporter from the Khronos group calculates the path correctly, but the one from Kupoman has options, and you could export the wrong paths.We discussed important mechanics of props, state, and events. We also discussed how to create a maze using pseudo-random number generators to make sure that our props and state didn’t change chaotically.To know more about how to create, move around in, and make worlds react to us in a Virtual Reality world, including basic teleport mechanics, do check out this book Getting Started with React VR. Read More:Google Daydream powered Lenovo Mirage solo hits the marketGoogle open sources Seurat to bring high precision graphics to Mobile VROculus Go, the first stand alone VR headset arrives!last_img read more

CONTINUE READING