Posted June 9, 201411 yr Heyho Guys! I created some custom particles but sometimes (I don't exactly know why) they're just rendered in black. What can I do to avoid this annoying problem? I have to admit that I have no Idea why this problem appears. The particles are actually flying in a straight line and if I look to much downwards they appear colorless. But I can't exactly say when. Paticles code: package com.bedrockminer.mod.client.particle; import ...; public abstract class EntityModParticleFX extends EntityFX { public EntityMpdParticleFX(World world, double x, double y, double z, double vX, double vY, double vZ) { super(world, x, y, z); this.setRBGColorF(1.0F, 1.0F, 1.0F); this.motionX = vX; this.motionY = vY; this.motionZ = vZ; this.particleGravity = 0.0F; } public EntityModParticleFX(World world, double x, double y, double z) { super(world, x, y, z); this.setRBGColorF(1.0F, 1.0F, 1.0F); } @Override public void renderParticle(Tessellator t, float par2, float par3, float par4, float par5, float par6, float par7) { t.draw();//Restart so that the texture can be changed Minecraft.getMinecraft().getTextureManager().bindTexture(this.getResourceLocation()); t.startDrawingQuads(); float f6 = this.particleTextureIndexX / 4.0F; float f7 = f6 + 0.25F; float f8 = this.particleTextureIndexY / 4.0F; float f9 = f8 + 0.25F; float f10 = 0.1F * this.particleScale; GL11.glDisable(GL11.GL_LIGHTING); t.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); float f11 = (float)(this.prevPosX + (this.posX - this.prevPosX) * par2 - interpPosX); float f12 = (float)(this.prevPosY + (this.posY - this.prevPosY) * par2 - interpPosY); float f13 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * par2 - interpPosZ); t.addVertexWithUV(f11 - par3 * f10 - par6 * f10, f12 - par4 * f10, f13 - par5 * f10 - par7 * f10, f7, f9); t.addVertexWithUV(f11 - par3 * f10 + par6 * f10, f12 + par4 * f10, f13 - par5 * f10 + par7 * f10, f7, f8); t.addVertexWithUV(f11 + par3 * f10 + par6 * f10, f12 + par4 * f10, f13 + par5 * f10 + par7 * f10, f6, f8); t.addVertexWithUV(f11 + par3 * f10 - par6 * f10, f12 - par4 * f10, f13 + par5 * f10 - par7 * f10, f6, f9); t.draw();//Restart so that the texture can be changed Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation("textures/particle/particles.png")); t.startDrawingQuads(); } @Override public int getBrightnessForRender(float par1) //Copied from other particles in Vanilla { float agePercentage = (this.particleAge + par1) / this.particleMaxAge; if (agePercentage < 0.0F) { agePercentage = 0.0F; } if (agePercentage > 1.0F) { agePercentage = 1.0F; } int i = super.getBrightnessForRender(par1); int j = i & 255; int k = i >> 16 & 255; j += (int)(agePercentage * 15.0F * 16.0F); if (j > 240) { j = 240; } return j | k << 16; } /** * Gets how bright this entity is. */ @Override public float getBrightness(float par1) //Copied from other particles in Vanilla { float agePercentage = (this.particleAge + par1) / this.particleMaxAge; if (agePercentage < 0.0F) { agePercentage = 0.0F; } if (agePercentage > 1.0F) { agePercentage = 1.0F; } float f2 = super.getBrightness(par1); return f2 * agePercentage + (1.0F - agePercentage); } // Now only unnecessary stuff follows. @Override public void setParticleTextureIndex(int index) { index %= 16; this.particleTextureIndexX = index % 4; this.particleTextureIndexY = index / 4; } @Override public void nextTextureIndexX() { this.setParticleTextureIndex(this.particleTextureIndexX + this.particleTextureIndexY * 4 + 1); } @Override public void onUpdate() { super.onUpdate(); this.nextTextureIndexX(); } protected abstract ResourceLocation getResourceLocation(); public void addRandomToVelocity() { this.motionX = this.motionX + (float)(Math.random() * 2.0D - 1.0D) * 0.4F; this.motionY = this.motionY + (float)(Math.random() * 2.0D - 1.0D) * 0.4F; this.motionZ = this.motionZ + (float)(Math.random() * 2.0D - 1.0D) * 0.4F; float f = (float)(Math.random() + Math.random() + 1.0D) * 0.15F; float f1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); this.motionX = this.motionX / f1 * f * 0.4000000059604645D; this.motionY = this.motionY / f1 * f * 0.4000000059604645D + 0.10000000149011612D; this.motionZ = this.motionZ / f1 * f * 0.4000000059604645D; } public void enableGravity() { this.particleGravity = 1F; } } http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
June 10, 201411 yr Author I think this could happen because of underground mobs but i'm not sure. With Vanilla particles this doesn't happen so I think, I missed out some GL settings; but which one? http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
June 10, 201411 yr Hi This class might be of interest to you https://github.com/TheGreyGhost/SpeedyTools/blob/Working/src/speedytools/common/Utilities/OpenGLdebugging.java I've used it in the past to check what the OpenGL settings are; it's not complete, but dumpAllIsEnabled() works and has showed up problems for me before- dump for a good render, dump for a bad render, and spot the difference. -TGG
June 21, 201411 yr Author I compared the state when the particles are black with the state when they are coloured, but I can see no difference! Here is the data your GLDebugger put out: GL_VERTEX_ARRAY:false (Vertex array enable) GL_NORMAL_ARRAY:false (Normal array enable) GL_COLOR_ARRAY:false (RGBA color array enable) GL_INDEX_ARRAY:false (Color-index array enable) GL_TEXTURE_COORD_ARRAY:false (Texture coordinate array enable) GL_EDGE_FLAG_ARRAY:false (Edge flag array enable) GL_NORMALIZE:true (Current normal normalization on/off) GL_FOG:true (True if fog enabled) GL_LIGHTING:false (True if lighting is enabled) GL_COLOR_MATERIAL:true (True if color tracking is enabled) GL_LIGHT0:false (True if light 0 enabled) GL_LIGHT1:false (True if light 1 enabled) GL_LIGHT2:false (True if light 2 enabled) GL_LIGHT3:false (True if light 3 enabled) GL_LIGHT4:false (True if light 4 enabled) GL_LIGHT5:false (True if light 5 enabled) GL_LIGHT6:false (True if light 6 enabled) GL_LIGHT7:false (True if light 7 enabled) GL_POINT_SMOOTH:false (Point antialiasing on) GL_LINE_SMOOTH:false (Line antialiasing on) GL_LINE_STIPPLE:false (Line stipple enable) GL_CULL_FACE:true (Polygon culling enabled) GL_POLYGON_SMOOTH:false (Polygon antialiasing on) GL_POLYGON_OFFSET_POINT:false (Polygon offset enable for GL_POINT mode rasterization) GL_POLYGON_OFFSET_LINE:false (Polygon offset enable for GL_LINE mode rasterization) GL_POLYGON_OFFSET_FILL:false (Polygon offset enable for GL_FILL mode rasterization) GL_POLYGON_STIPPLE:false (Polygon stipple enable) GL_TEXTURE_1D:false (True if 1-D texturing enabled ) GL_TEXTURE_2D:true (True if 2-D texturing enabled ) GL_TEXTURE_GEN_S:false (Texgen enabled (x is S, T, R, or Q)) GL_TEXTURE_GEN_T:false (Texgen enabled (x is S, T, R, or Q)) GL_TEXTURE_GEN_R:false (Texgen enabled (x is S, T, R, or Q)) GL_TEXTURE_GEN_Q:false (Texgen enabled (x is S, T, R, or Q)) GL_SCISSOR_TEST:false (Scissoring enabled) GL_ALPHA_TEST:true (Alpha test enabled) GL_STENCIL_TEST:false (Stenciling enabled) GL_DEPTH_TEST:true (Depth buffer enabled) GL_BLEND:true (Blending enabled) GL_DITHER:true (Dithering enabled) GL_INDEX_LOGIC_OP:false (Color index logical operation enabled) GL_COLOR_LOGIC_OP:false (RGBA color logical operation enabled) GL_AUTO_NORMAL:false (True if automatic normal generation enabled) Any Ideas which setting can cause the problem? Additional question: Is it possible to render the particles in front of water? Normally they are always rendered behind water, even if they are in front of it. (Also with vanilla particles, try it out!) http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
June 23, 201411 yr Author PLEASE HELP!!! I have no Idea what can be wrong - I tried everything... Maybe it would help if someone posts code for working custom particles... http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
June 24, 201411 yr Here is a custom particle i created. https://github.com/brandon3055/Draconic-Evolution/blob/master/src/main/java/com/brandon3055/draconicevolution/client/render/DistortionParticle.java I hope it helps. The particle rendering behind water is a vanilla bug that is fixed in later versions of minecraft. I am the author of Draconic Evolution
June 24, 201411 yr Author Yes, it helped! I missed the setBrightness... Now it finally works http://i.imgur.com/wNvtGZw.png[/img] MODS and MODDING TUTORIALS
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.