www.jpct.net
jPCT - a 3d engine for Java => Support => Topic started by: AGP on October 12, 2017, 03:02:14 am
-
I''m writing a strategy game and can't seem to properly paint a transparent PNG on my fog (so that its edges are rounded). The logic for the texture placement is sound and has been tested. But all I get is solid black.
if (!TextureManager.getInstance().containsTexture("fog-top")) {
TextureManager.getInstance().addTexture("fog-top", new Texture("Assets"+File.separator+"fog-top.png", true));
TextureManager.getInstance().addTexture("fog-left", new Texture("Assets"+File.separator+"fog-left.png", true));
TextureManager.getInstance().addTexture("fog-right", new Texture("Assets"+File.separator+"fog-right.png", true));
TextureManager.getInstance().addTexture("fog-bottom", new Texture("Assets"+File.separator+"fog-bottom.png", true));
}
-
Then most likely your objects aren't rendered with transparency enabled or your textures' alpha channel is off.
-
The textures are right. I set transparency to 0.
-
Can you upload such a texture for me to see?
-
Yup.
https://www.dropbox.com/s/yzwpl76o8zuzy2e/fog-left.png?dl=0 (https://www.dropbox.com/s/yzwpl76o8zuzy2e/fog-left.png?dl=0)
-
That texture has an alpha channel assigned to it that makes the white part transparent. I would guess that you actually want it the other way around?
-
No, those are the edges of the fog of war. The fog is black, naturally.
-
I can't see anything wrong with it nor with the rendering itself in my simple test case. Do you have a screen shot that shows the problem? Just to be sure that we are talking about the same thing here.
-
No problem.
https://www.dropbox.com/s/l7lqhpehh19f2qe/FogProblem.png?dl=0 (https://www.dropbox.com/s/l7lqhpehh19f2qe/FogProblem.png?dl=0)
-
There quads don't seem to have any transparency applied to it. Alpha channel aside, they should be transparent anyway with a value of 0.
-
They are set to 0.
-
Doesn't look like it. Do you have a test case?
-
I wrote a simple test and transparency worked. So then I wrote the following method, and all I get are "End of printOddTransparencies()" prints. So now I'm stumped.
public void printOddTransparencies(World theWorld) {
for (int y = 0; y < planes[0].length; y++)
for (int x = 0; x < planes.length; x++)
if (theWorld.containsObject(planes[x][y]) && planes[x][y].getTransparency() != 0)
System.out.println("Odd transparency at ("+x+", "+y+"): "+planes[x][y].getTransparency());
System.out.println("End of printOddTransparencies()");
}
-
Maybe the texture itself hasn't been loaded properly? Albeit that doesn't explain why it's pitch black, but just to be sure...
-
I tested both the application logic (by replacing them with solid-color textures) and the same loading line (TextureManager.getInstance().addTexture("fog-left.png", new Texture("Assets"+File.separator+"fog-left.png", true))). Could it be relative to the number of polygons, or the sheer scale of the world? Maybe force-sorting the transparency list would fix it. Because number of polygons and size of the world are the only two different things between my test and the actual game.
-
I don't think so. As long as it's transparent AND on top of the rest, it should work. What happens if you use a texture in another color? Does it show?
-
The solid-color ones are semi-transparent (and where they belong).
-
Maybe an issue with the texture coordinates somehow? If you are using a proper texture (not just a single colored one), does that look right?
-
The planes are created with the Extended Primitives class. So are the ones in my test case.
-
I've no idea what's going on then. And I can't open the video link that you've sent me. All that YouTube does when I try to, is telling me: Oops!?
-
That's weird. The video is no longer up (I just signed in from a different computer and can't see it). I wonder if Google took it down. Try again in a few hours, please. As soon as I wake up I'll check this out.
-
The new video doesn't work either. I'm getting the same opps-page...!?
-
The latest video works. But it's almost impossible to tell anything based on it IMHO. All I see are black squares...could you make a similar video based on this texture: http://jpct.de/download/tmp/testtexture.png (http://jpct.de/download/tmp/testtexture.png)?
-
I applied it only to the left and:
https://www.dropbox.com/s/zkgx3zkwcuc29r0/FogProblem.jpg?dl=0 (https://www.dropbox.com/s/zkgx3zkwcuc29r0/FogProblem.jpg?dl=0)
-
I got it working by calling recreateTextureCoords(). Is that costly? It seems like it would be.
Oh, and how could I come as close as possible to an orthographic view (in order to reduce the displacement between the fog and the gound)? Field-of-view? And would that be by increasing or decreasing it?
-
It's cheap as long as you don't call it every frame, which you shouldn't have to. To come closer to an orthographic view, you have to move the camera far(er) away and decrease the fov to compensate for that. But especially with the software renderer, you might run into accuracy issues if you are moving away too far.
-
Is this too big a scale for a Warcraft level, in your opinion?
************
World bounds:
X: -1133.6974, 318.40582
Y: -279.86633, 0.25386608
Z: -925.57733, 135.38232
************
-
No, it should be fine. You might even want to increase it, if you run into some accuracy problems.