Comments (10)
into the init method of the Viewer where the rendering loop is triggered i
chnaged that:
setInterval(function(){self.doUpdate();}, 30 );
into:
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 1000);
};
})();
function renderFrame(){
self.doUpdate();
requestAnimFrame(renderFrame);
}
requestAnimFrame(renderFrame);
and now the speed is really good in safari 5.1.7 for Windows
I didn't tested it on safari for mac and ipad but once I'll test it I'll be
back with a comment (tommorw at the office i'll do the mac and ipad test)
Original comment by [email protected]
on 11 Jul 2013 at 10:14
from jsc3d.
see this for details:
https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame?re
directlocale=en-US&redirectslug=DOM%2Fwindow.requestAnimationFrame
Original comment by [email protected]
on 11 Jul 2013 at 10:27
from jsc3d.
Tested on:
1. iMac 10.8.4
Safari 6.0.5
Firefox 22.0
2. IPad 2 (iOS 6.1.3)
Safari
Dolphin
3. Windows 7
Safari 5.1.7
Chrome 28.0.1500.71 m
Firefox 22.0
IE (9 and 10)
(On ipad and safari for windows is faster than before but still slower than
other browsers.)
Original comment by [email protected]
on 12 Jul 2013 at 7:28
from jsc3d.
Thanks Vasile! I'll look into this solution as soon as possible.
Original comment by [email protected]
on 13 Jul 2013 at 1:46
from jsc3d.
An extra hint..
the low speed framerate is caused by 2 reasons:
1. the calculations are a bit slower on some browsers (that's a fact and we all
know that is not possible to have exactly the same rendering speed for all the
browsers because some javascript engine implementations are faster and other
browsers have slower engines)
2. this call setInterval(callback, 30); will try to execute the callback every
30millisecconds.
when a new call is triggered if the previous call is not ended then the new
call is queued and will wait for it's time to be executed; and here is the
problem... (the timer will slow down when the queue will grow and the
performance will go down over time)
in the jsc3D engine the timer is set to render a frame each 30 milliseconds but
if you increase the timer (to 100 for example) you'll realize that the
rendering speed will be better in safari (because the queue will grow up
slower) so the optimal algorithm is to invoke the next rendering call
immediately after the current one is ended.
this code:
1. function renderFrame(){
2. self.doUpdate();
3. requestAnimFrame(renderFrame);
4. }
5. requestAnimFrame(renderFrame);
will call the next renderFrame after self.doUpdate() (line 2 and 3) and then
why is not ok to use:
1. function renderFrame(){
2. self.doUpdate();
3. renderFrame();
4. }
because this code will stay in a infinite loop and will lock the UI and will
keep the cpu at 100%. but requestAnimFrame(function) will tell the javascript
engine to call this method but without locking the execution only in this loop
and the browser will do it in the best momment.
Original comment by [email protected]
on 13 Jul 2013 at 6:36
from jsc3d.
[deleted comment]
from jsc3d.
Yes, you get it!
I rewrote the code replacing setInterval() with setTimeout(). Now the relavent
part looks like this:
var self = this;
(function tick() {
self.doUpdate();
setTimeout(tick, 30);
}) ();
The new implementation will not send next request until the current update
operation is completely done, thus avoids any additional call to be put to the
queue. I tested this in my webkit base browser and was glad to see it wroks
really smoothly.
I also wrote a requestAnimationFrame implementation for that. Though some
technical introduction on requestAnimationFrame looks rather promising,
unfortunately it seems to make no difference with the old setInterval() version
in my own test (based upon webkit 535.12). Anyway, I'll continue to pay
attention to this.
The fixup will be commited to the repository in one or two days.
Thanks again!
Original comment by [email protected]
on 13 Jul 2013 at 2:58
from jsc3d.
Hey,
the requestAnimationFrame is supported starting with safari6 so the safari for
windows is not using it for now that's why I used:
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 1000);
};
})();
if the browser does not have implemented one of the requestAnimationFrame or
webkitRequestAnimationFrame ... will use the default one:
function( callback ){
window.setTimeout(callback, 1000 / 1000);
};
I want to thank you for this nice project which I used in a real project for a
3D presentation of products.
http://www.berendsen.dk/new_3d (chose a product from the dropdown and you'll
see a popup with the 3d engine at work)
I would like to contribute as much as possible to this project because we
really need it for 3D web presentations of products until webGL will be
available in all the browsers.
and when the time will come a new renderer could be added for webGL and the
engine will not die.
Original comment by [email protected]
on 13 Jul 2013 at 6:52
from jsc3d.
The requestAnimationFrame() is not found in webkit 535.12. Instead it provides
a private alternative webkitRequestAnimationFrame() which is tested not to be
as powerful as the official document says. Maybe its implementation is not done
in the 535.12 edition.
A WebGL rendering backend is worth consideration. While there will be a lot of
things to do to implement that. Currently I just haven't got enough time to
complete it.
Your project is really cool! However it seems do not work in my
InternetExplorer. IE9 and IE10 already make good support for most HTML5
features especially canvas drawings. Their javascript engine are also
re-written to provide enough power to these type of applications. You could try
to modify your page's description and add this
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 5.0 Transitional//EN">
It may help your product page to be also compatible with modern IEs.
I'm glad to see jsc3d is used in such serious applications :-)
Original comment by [email protected]
on 14 Jul 2013 at 1:26
from jsc3d.
Sorry but I have to ask you what version of IE you have ?
during the testing process it was working well on all ie versions:
IE8 -> flash implementation
IE9+ -> html5 implementation
could you let me know what's happening in your system? (freezing, not
loading... )
Strangest part is that QA department did not report the issue (neither the
Berendsen staff)
(you could write by email directly not to post on this page things not related
to jsc3D)
Thank you.
Original comment by [email protected]
on 14 Jul 2013 at 7:14
from jsc3d.
Related Issues (20)
- model exported from Maya is not showing textures
- Error Generated When Identifying Canvas by Class
- CTM loader not working on IE11 HOT 1
- Transparent texture render ok in canvas but not in webgl HOT 1
- Mesh transformation working ok in canvas but not in webgl HOT 1
- Memory leak?
- texture loading HOT 1
- Product automatic rotation. HOT 1
- How to load 3ds with bmp file as texture? HOT 4
- Get the volume of loaded models
- ghh_slid
- add a image to .obj file
- Problem loading viewerA scene into viewerB scene HOT 1
- multiple viewers sharing scene HOT 1
- Scroll in newer Firefox HOT 1
- Loading .obj file - No image with no error message
- .obj models on usb flashdisk rendered in xulrunner
- Hide/show models with chechbutton (jsc3d)
- how to get a 3d point when you have canvas 2d point?
- suspect CSS syntax change
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jsc3d.