I've been digging since while for 3D graphics tutorials for Android. I tried raw opengl (es). I also tried min3d. I found out that things can be very complex or very easy if someone else did the math for you. Min3D is really great and easy to use, but is also really minimalistic. I can't find how to make lights actually cast shadows (and I doubt it's supported), I can't find how to make the surface reflect, how to change the surface to diffuse more or less.
Is there any library that has scene handling and supports shadows (also shadow cast by diffused light), control materials to achieve different levels of diffusion, reflections and transparency.
Note: I forgot to mention I need free framework.
Since the answer of Eric convinced me that realistic 3d is hard to achieve on mobile devices I would accept answers that explain how to fake these effects (or links). Again effects I need are:
shadows
reflections
from glossy material
from matte material
transparency (I think that's in the min3d examples, but it's here for completeness
I've seen shadows in 3d android games, although I'm not 100% convinced that are real (cast by objects).
I can't think of any libraries that meet your requirements for a mobile platform, but there are several middleware products to choose from:
Unity3d : http://unity3d.com/
Unreal SDK : http://udk.com
Ogre : http://www.ogre3d.org/
All of these offer scene management, lighting, material management, etc... yet, I doubt any of these are a silver bullet for what you are asking. Regardless of pricing and licensing - upto 3500 dollars for Unity3D pro mobile - you will still have to do a serious amount of coding yourself and often in a language you may not be familar with.
Also, keep in mind that a lot of the gfx in opengl-es based products (mostly games) are often faked. While it's perfectly possible to have dynamic lighting, shadows and transparency, these things can be crippling for your performance if you have a lot of geometry. After all, a phone or tablet is not the powerhouse that a desktop cpu/gpu is these days. Not yet anyway.
Another thing to note: I'm not sure what level of realism you are trying to achieve, but all the things you mention are typically associated with raytracing/raycasting. And that's a whole other bag of tricks as you can forget about real-time interaction, especially on mobile devices.
No way around it: coding and creating with real-time graphics in mind is hard and it's even harder on mobile platforms.
Related
I am going to build of a counting of vote program with optical MC sheet in android platform
However, i find that there is not many SDK for OMR in android.
Is it possible for me to read answer on optical MC sheet answer in OCR?
OMR is much different from OCR, normally OMR on a form are template-based, so you may need to have a template designer, the technology may not be new or complex, but it is hard to make it accurate and robust, there are lots of omr engines on the market, the most efficient way is calling online omr api service from http://ssomr.com/eng/video.asp?#api
This is a very tough project. OMR is based on templates where each checkmark area has to be consistent and clearly defined. OMR is comparison of black to white threshold against blank checkmark. For example, if there is 15% or more black pixels compared to blank 'template' checkmark, then it can be considered marked.
With mobile pictures, each picture is inconsistent in size, and lighting will affect how your binarization works, so thresholding will be very tough to standardize.
In general, on device OCR (not even talking about OMR) is weak or too expensive, even for machine text. I would consider server-based processing for OMR. It is not on device, but it can be fast enough to seem like it is running right on your device.
I'm interested in making an app which would allow sequencing audio instruments and drums in real time, which would work on several mobile platforms. The visual interface I designed is quite elaborate, and I'm definitely going to need custom graphics capabilities.
The way I see it, I have two options. 1. Learn OpenGL ES and build something relatively cross-platform, and then wrap it with layers that can interact with specific OS API's. 2. Use a 2d game engine, e.g Unity 2D, and utilize that to build a responsive interface.
Option 1 is the most difficult, since I've never programmed graphics before, while option 2 may be an overkill since audio processing apps require lots of processing power lots of low-level optimization for DSP routines. Losing some of this power to an entire game engine may be undesirable.
It's very important that I don't have to reimplement the interface from scratch for every platform. It's buggy and error prone, and a pain to manage.
I'd like some feedback on the best way to go about evaluating my options. Has someone looked into something like this already?
It has been done already, i believe i saw it on the unity forums,
as for whether or not it makes sense, sure it does,
Unity does something that is truly amazing, you can develop it once and deploy to iPhone, Android and WP and more, instead of using xCode with sound effect plugins unity comes with fmod that is easy to tap into.
Not something i am going to do, but if i did, unity would be perfect for it especially when you think that you can have play functions with amazing visual ques that unity is made for.
Lol, sounds like a sales pitch, but no, its not a bad idea to choose unity for such a thing. since you can always write the missing features in plugins if needed. beats going to OpenGL which is a pain in the {bug}
I am just looking through all of the iOS performance tips regarding OpenGL ES 2.0 drawing and I am just wondering: "do they all apply equally to Android development?"
Are the processes the same irrespective of Android and iOS and are they just 'pure' OpenGL tips?
Specifically, does this tip apply to Android development too? Because it would change the way I currently create my attribute data:
When you are designing your vertex structure, align the beginning of each attribute to an offset that is either a multiple of its component size or 4 bytes, whichever is larger. When an attribute is misaligned, iOS must perform additional processing before passing the data to the graphics hardware.
As a line of principle, the same best practices apply to both platforms since some of them are "common sense" approaches (i.e. batching is one of them).
On the other side, the same golden rules do not necessarily apply to all android devices and I would like to explain what I mean.
the point is mainly due to the GPU architecture. If you read the best practices for the IOS devices, for sure they are referred to the PowerVR GPUs (excellent GPUs) which have certain characteristics that not necessarily respect the one of the other GPUs you will find in the Android massive number of devices.
For instance, in the Android market you will find for sure GPUs being part of the Adreno family, the Mali family and so on.
This means that, in order to benefit the best from all these devices, you should write the code according to the manufacturer's best practices.
This means that you should study the SDK's reccomendations of each one of them.
So, to cut a long story short, some of those best practices apply to android as well, some other, could collide with the GPUs specifics of some mobile devices.
I am starting to build my first Android app. I have reached the point where I need to start adding custom graphics and Art to make it look good. However I have also realized I have no skills or knowledge in this area at all.
What practical steps can a programmer take to develop the basic skills necessary to draw/render the kind of small, low resolution artwork suitable for mobile devices (I don't want to be able to paint a full painting or anything)?
I am particularly interested in any tools that may be of assistance, either software or devices like drawing tablets, as well as guides and tutorials.
NOTE: I know this is not strictly a programming question, and there are probably other Art forums out there, but I want to specifically hear from other programmers in a similar situation how they have acquired the skills to make mobile art.
When it comes to the tools and soft, there is nothing better than Adobe Photoshop (it's very expensive but you can download CS6 beta for free for limited time now) with a Wacom tablet (Bamboo would suffice here, or Intuos if you have too much money).
Colors are extremely important and color palettes are hard to do for a beginner. It's not simply a matter of combining two or three hexes. Check out Adobe Kuler and ColourLovers for a little help with that.
Also if you don't like beginning the work from scratch, there are plenty of PSD templates, just like this one.
And looks are nothing without feeling, so UX (user experience) is extremely important, it's also an art:). Personally I find the tips in Android Design Guidelines very useful, even if they cover mostly ICS features. You can copy most of the functionality to the pre-Honeycomb apps. There are also lots of tips on UX in the SmashingMagazine.
I am going to start on my first graphics program on the Android(http://blog.jayway.com/2009/12/03/opengl-es-tutorial-for-android-part-i/), but it would seem faster to use use javascript, and so use WebGL (http://en.wikipedia.org/wiki/WebGL) to prototype the graphical part of the game.
One difference is in how textures are done, I expect, but for the main part of the game, which is this case is something similar to Tetris, in that you try to pack various shapes into a container optimally.
I would like to prototype it in javascript, but if it will be work to get it to work on the Android then it may not be worth it, hence my question as to how similar is OpenGL on these two platforms?
both use the OpenGL ES 2.0 version. Still, for ease of use, some things are adapted for javascript (webgl). But if you worry about how different the "OpenGL Versions are" the answer is, you don't really need to worry.
I've started a Tetris WebGL application here, tested in Firefox Fennec, but still many more items to get done. http://phillihp.com/projects/creating-tetris-with-opengl-and-webgl/
I would say it is a question of taste. No doubt webgl shaders compatible with androids shaders as good as webgl shader written for one desktop compatible with mac or visa verse. Always little caveats, but not a big deal to overcome them. Moreover you can make Android application from HTML application and ship it to end user. It is possible.