Libgdx create sky / environment in 3D - java

I am developing a 3D game using the Libgx 3D api. Now i want to add some environment (not the Libgdx Environment, but a real environment), like the sky or some background. I have heard about the so called skybox, and i understood, more or less, how it works.
This "skybox" is a Box arround your Gameworld. So you are inside this box. You add a Texture to all 6 faces at the inside of this box. Now you set your camera to the center of this box, but with the right view direction, and start the rendering, so you have always the same distance to the faces, but you can rotate arround at look at other faces. Then you set your camera where you really are in the world and render all the models, objects, whatever. Did i understand that right?
I could not find a tutorial on how to do that with libgdx. So my question is: How do i create a "skybox" in libgdx, how do i add my Textures to it and how do i render it as background/environment? Or are there other, maybe easier possibilities?

You can use big sphere which is textured inside around your world. If use blender, just create sphere object and unwrap this mesh. Then flip normals to see texture inside the sphere.
Another way is to create cubemap as you described above. I have made a class which works with cubemap. Just follow this link: LibGDX 0.9.9 - Apply cubemap in environment

Related

Fog in openGL dependent on camera position

I am trying to make a simple game using OpenGL. I have already modeled 3D scene. Now I want to add some fog to make it look like in horror. I have used this code below
gl.glEnable(GL2.GL_FOG);
gl.glFogi(GL2.GL_FOG_MODE,GL2.GL_LINEAR);
gl.glFogi(GL2.GL_FOG_START,(int)1);
gl.glFogi(GL2.GL_FOG_END,(int)5);
However that just creates a static fog with some random coordinates. How to make It dependent on the camera movement? So the player will only see clearly on the set distance?
You can find the definition of glFog (and all the other OpenGL commands, even the classic ones) at www.opengl.org. Fog is always calculated according to the distance from the eye / camera / viewpoint coordinates, so you don't need to do anything special.
Be warned that glFog is part of the old classic OpenGL API and may not work reliably on modern 3D systems.

How do I push and pop the matrix stack in LibGDX

I'm having a hard time finding the equivalent of the very basic OpenGL functionality glPushMatrix and glPopMatrix in LibGDX.
I have rendered my scene and I would like to render an overlay on top of the scene but I would like to do it in screen coordinates so I want to push the modelview matrix and load identity.
In essence I would like to perform the equivalent of:
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
... stuff ...
glPopMatrix();
But for the life of me, I cannot find a single mention of push or pop in the LibGDX documentation nor in the parts of source code that I have looked at.
Am I missing something? Is there some other preferred way of achieving this?
Edit:
What I want to achieve is a fade to black while I load the next level and then fade in. I do this by rendering a black rectangle over the display with alpha. None of that is a problem, I just want to have a fixed, known coordinate system independent of the current world transform to render this rectangle in.
Those methods are part of the fixed render pipe of OpenGL ES 1. Support for OpenGL ES 1 has been removed since libGDX version 1.0.0. Only the programmable render pipe op OpenGL ES 2 and up is supported. If you really want to use such old methods then you could use an older version of libGDX.
The question "how to render a HUD overlay?" is too broad to explain here. But for basic methods (like rendering a HUD overlay) libGDX abstracts away the need of using any gl methods at all. You might want to have a look at the wiki, which includes some basic examples. And follow a tutorial (although tutorials tend to get outdated of time, so be aware of that).
But assuming you are using SpriteBatch, then use batch.setProjectionMatrix()

2D Moving Camera (LWJGL)

I'm currently developing a 2D RPG with LWJGL, and am still in the engine stage of development. I've got a lot of the tech I want created, but one of my big problems is fixing the camera on the player. All the solutions I've seen involve moving the world and keeping the player still, which can work, but it seems apparent that this can cause some calculation issues if not closely monitored. Normally, I'd write a system where I wouldn't have to worry about it, but I refuse, because I eventually intend on adding multiplayer capability, where a moving world would be unplayable.
Is there a way to affix the camera to an object or point that can move WITHOUT using translate to move the world around? Also, I'd like to avoid Slick if possible. That would require me to rework much of my game engine as it currently stands.
Whenever you are going to project the 3d viewport onto a 2d screen you need to move everything according to the point of view of the observer (the so called camera or view).
I guess you can't escape from this. What you usually do is having a Camera object which holds position and rotation that is used to build the view matrix which is passed to the vertices of your scene through a uniform to the shaders. Passing transformation matrices to shaders is the normality so you shouldn't feel burdened by it. You can always premultiply it with the perspective matrix.
You must move the whole world to match the position of your camera just because you need to transform everything in your scene as it is seen from that point of view, otherwise how could you then project it on your screen? There is no "move the camera, keep the world still" concept.
Move the world visually, it's how every other RPG does it. Don't move the actual world's location though.
Draw everything but the ui normally, than translate it all according to the players position (i.e. glTranslate2f(-player.x,-player.y)). This is all done in the render method. On networked multiplayer, the viewport is done to that specific player (i.e. Bob's screen is translated based off Bob's position, Jane's is translated based off Jane's position). Should you instead want single-screen multiplayer, you will probably have to use mutliple framebuffers (one per player), and use them as viewports.

Android LibGDX Particle System is fixed on screen

I have a 3D scene that runs on libGDX(Android). I want to use particle system. When I create one using the tutorials/examples found online (e.g. Particle System libGDX) I get a particle system which works fine. Except for one thing: it is fixed on screen.
When I move the camera around the particle system stays on the same place on screen (like a fixed HUD element or so). Maybe it's because of Sprite-nature of ParticleEffect.
The other issue related is that the ParticleEffect.setPosition() method takes values not in the World coordinates but in screen pixels. Is this correct? I can calculate new on-screen coordinates in pixels and update ParticleEffect position every frame. But that seems like a hack to me.
Is there a more "right" way to make my particle system behave like other objects in my 3D scene and not be fixed on screen?
The Particle System is just working in 2D System. It's not a 3D Particle System thats why you wont get it into your world. That's why it's inside of the g2d package (graphics 2D). Thats also the reason why it just take 2D cords and not 3D cords.
Also the Feature list says that it's inside of the 2D Highlevel API.
Featurelist

Third Person Perspective Camera with Opengl

I want to implement a TPP Camera for my project, but something is not working + i don't know if i use the right concept.
Should I rotate the whole scene model-view matrices except my main model, which will be centered on the screen or rotate the lookAt camera?
Other thing is how to make the model move in given direction after rotating? (I think moving the whole scene makes it easier?) + how to add collision detection to it?
Collision detection is nothing to do with openGL you use you game state variables to work that out you can manage it in the same loop as the game where you do user input and display.
You should use a LookAtMatrix for the third person camera you will have the eye component behind the player and the at somewhere infront. Persective can be implemented by using a perspective matrix.
So the matrix multiplication will look like.
PerspectiveMatrix * LookAtMatrix * worldSpacePosition
Here is a good answer from gamedev explaining a lookatmatrix, most OpenGL / Computer Graphics books will also cover this.
Are you working with the new or old pipeline model?

Categories

Resources