Use Java Graphics2D vs JOGL [closed] - java

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I'm getting into learning Computer Graphics with Java. I was wondering, should I learn Java2D before learning JOGL, or should I just learn JOGL (which handles 3d graphics as well)? This (I hope) isn't an opinion based question in the sense that I'm looking for a correct path to follow. I guess, put another way, my question is: what is the point of having the Java Graphics 2D library if JOGL is around?
Note: my final goal is to be able to develop Graphics for business applications.

It's not entirely clear what you mean by "business applications". You're not talking about the "computer game business", are you? ;-)
Seriously: Nearly every question of the form "Should I use X or Y?" has the same kinds of answers:
"That depends on what exactly you want to do" and
the subjective ones.
The Graphics2D class is a rather high level abstraction, and with a few lines you can do your first custom painting operations. And they are intuitive. You want to draw a line with Graphics2D? Well, call graphics.drawLine(0,0,100,100);. You'll quickly have a feeling of success. The basic code to get started is conveniently summarized in http://docs.oracle.com/javase/tutorial/uiswing/painting/ , and with the knowledge from http://docs.oracle.com/javase/tutorial/2d/geometry/index.html and some phantasy you can already achieve nice effects.
OpenGL is a different world. First of all its focus is 3D graphics, and this is not "just a superset of 2D". While you technically can do 2D graphics with OpenGL as well, that's not what it was made for. It's much closer to the hardware, tailored for high-performance management of large 3D objects with powerful (and complex) rendering techniques. You want do draw a line with OpenGL? Well, if you want to do this with pure, modern (!) OpenGL, it will involve maybe 100 lines of code, including your own shader programs that are written in GLSL. And without a profound background certain fields of mathematics and graphics cards, and without a reading elaborate tutorials or books (like http://arcsynthesis.org/gltut/ ), you'll hardly be able to bring anything to the screen at all.
So to summarize it, concerning your actual question:
what is the point of having the Java Graphics 2D library if JOGL is around?
If you want to create some 2D drawings, maybe some bar-, pie- or line charts, and maybe a few images, you simply would not use OpenGL due to its complexity. Java2D is part of the standard API, and it is tailored for things like this (although, of course, there are still different more specialized libraries for different purposes). If you want to do anything that goes beyond 2D, or employ some really sophisticated rendering effects, you'd have to use OpenGL.

Related

How to start learning Big Data? What are the modules I need to concentrate on as a developer [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
I'm planning to learn Big Data. I just have gone through tutorials but I'm a little bit confused what the modules are that I need to concentrate on from a developer perspective. Presently I'm working on java. I hope your response will be helpful for the next step of my Big Data journey.
First I'd propose to get familiar with the term, Big Data is a bit fluffy and debated one, more a marketing catchphrase than a technical specification, covering a huge range of technology.
Starting from that I'd try to determine which aspect (IoT, build/run datacenters, etl/data integration/warehousing, analytics/statistics/machine learning...) or perhaps which field of application (retail, bioinformatics...) you're interested in, and which is reasonable to access from an employment point of view. I'd think also about the tech stack you'd like to work on (Scala, Python...).
Reverse engineering job offers could be a way to get to that information actually.
The Data Scientist profile (etl + machine learing + visualization) gained broad acceptance and encompasses certain skill sets, Big Data Analyst and Bid Data Engineer also can be found, arguably with a not so well defined profile.
Nowadays one can get whole MSCs in data science (here's a personal evaluation of it), but perhaps you can get your foot into the door on a less fancy route too. Trainigs may come in varying quality, I found Andy Ngs machine learning and deep learing (big neural networks) MOOCs stunning, and everything coming from the EPFL-Scala side (if you want to go down that road) is technically superior and from the presentation ok (I tried Big Data Analysis with Scala and Spark).

What are some performance-improving tips for Java? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
Hey guys,
I'm a relatively new programmer in Java(and in general), but I want to know different ways of minimizing memory and RAM usage in programs that I make. I've heard of a few such as StringBuilder as an alternative to + String concatenation and stuff, but I'd like to hear what you guys know about how to maximize performance and why.
Thanks in advance!
In modern programming, it is a far better use of time your time to focus on making your code readable rather than trying to micro-optimse.
Modern compilers do an extremely impressive job of these small optimisations so that everyday programmers don't have to deal with them, and in the majority of cases it is better to leave it up to the compiler than to attempt it yourself.
In general I would say that the largest performance improvements can be gained by thinking about the design of your program ahead of time, before you even start typing. Once you've already bashed out 10,000+ lines of code implementing your latest 3D high-performance MMORPG, and you realise it's not as high-performance as you were hoping, making any drastic design changes will be considerable work. Some things to think about beforehand are:
Think about your algorithms complexity, for example string concatenation can be O(n^2) using String, but O(n) using StringBuilder.
Use object pools to reuse memory rather than creating new instances each time
Reuse existing library implementations of data-structures etc, rather than trying to recreate them yourself. Many more man-hours will have been put into these implementations than you could possibly spend on them, and so they are likely to be more efficient/robust
Finally I should mention, that if you do go trying to optimise some existing code because its not performing as well as needed, it's very important to know specifically where the problem area is. In this case a profiler is invaluable, and should help pinpoint any particular areas that are affecting performance. They might not be where you expect!

C++ vs Java for simple graphics [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
I want to develop a program that topologically sorts the vertices of a directed graph as a way to practice some of the graphing data structures and algorithms I'm learning in algorithms class. To make things a bit more interesting, I also want to add some graphics to display the results of the topological sort, something like in image b) below.
I'm familiar with the basics of both C++ and Java, so I'll be choosing one of those languages to work in. First, what are the pros and cons of working in each language for a project like this? Second, what kind of libraries should I look at to implement these kinds of simple graphic? I know that there are lots of choices out there, but I'd like to choose something that I might use again in the future and isn't total overkill for a task like this.
Thanks
I would certainly prefer Java over C++. yes C++ is core but Java provides over 30,000 classes and interfaces. you get the Graphics class in awt package.
Graphics class is the abstract base class for all graphics contexts that allow an application to draw onto components that are realized on various devices, as well as onto off-screen images.
The Graphics class plays two different but related roles within the abstract windowing toolkit (AWT). First, it maintains the graphics context, which consists of all of the information that will affect the outcome of a graphics operation. This includes the drawing color, the font, and the location and dimensions of the clipping rectangle (the region in which graphics can be drawn). More importantly, the graphics context defines the destination for the graphics operations about to be discussed (destinations include components and images).
All the best

Java/Slick - Should I use multiple classes for a game [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
Hello i'm new to slick (and lwjgl) and was wondering if its best to stick to one class or multiple when I used straight java I used multiple classes but wasn't shoure about slick
Please do use multiple classes. Classes keep things organized, and it is easier to document. Also, you can use an ArrayList to have a lot of class instantiated and use them later on. The most important thing about multiple classes is that it is organized. It is hard to use only one class for a game, because there will be a lot of code, and you need to try to pack together everything. Use multiple classes!
Java is an object-oriented language for a reason, and classes are there to help you. Using multiple classes will allow you to break down the game logic and view it as the interactions between objects of different classes, limiting complexity and making the game easier to understand. I'm not sure what kind of game you're writing, but for example, you could have a Player class, of which the active player is a member, tracking things such as health or lives, position on screen, et cetera. The player object could then interact with objects of class Monster, Wall, Door, Chest, so on and so forth.
Using classes allows you to reuse code and avoid repeating yourself, manage the complexity of the project, and encapsulate logic. When you're working in Java, an object-oriented language, it'd be wise to try and write code that follows an object-oriented paradigm.

jumping form Java to C [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
Ok I gave been playing around with java for a year now an I can say that is is in my power to write a fully functional program.
A month ago I started studying vectors and so, when I tempted to implementing them into the LWJGL I realized that Java is not fast enough for the level of graphics that I wish to generate.
Now that is my problem and I have decided that I must learn a stronger Language but where do I begin I have tinkered around in C/C++ before but it kills my ambition to go and start over after already using a hole year.
my "algors" for rendering a vector are:
z = r(cos t+j sin t) //where the t is degrees and r is its length
(for the curious)
the program the continues a loop that alters its length with 1, gets its end X and Y and draws a pixel on that spot.
Not for game coding.
Name 1 free E-Book that will get Me on My feet with C
I realized that Java is not fast enough for the level of graphics that I wish to generate.
Java is plenty fast. Unless you want to work with high performance graphics, you can use it safely (and you will probably be able to use it even with high performance graphics).
In the vast majority of cases, the speed of your application will be a function of algorithmic complexity, not language used.
After your application is completed, if it doesn't run fast enough, you can optimize. If it still doesn't run fast enough, you can implement critical parts in C/C++/your-language-here.
If you start from "the language is not fast enough", you're already doing it wrong.
If you want to write a game, use an engine. There are many great engines in many languages. If you wonder about language-inherent performance, and you try to solve technological issues yourself, you are gonna be stuck doing that forever.
Do not reinvent the wheel. Stop worrying about which programming language is the best fit, and rather think about which engine is best suited for what you want to make.

Categories