Posted May 26, 201510 yr Okay previously I made a topic asking about using the Tessellator and I was told to just use the GlStateManager and I've really been trying. What I'm trying to do is render a square that rotates with the camera based on the player view. I've been trying to use code from Render.class but it's been a struggle still. Here's what I've got so far: public void drawNameWithHealth(Entity entity, RendererLivingEntity renderer) { Tessellator t = Tessellator.getInstance(); WorldRenderer tw = t.getWorldRenderer(); tw.startDrawingQuads(); GL11.glPushMatrix(); GL11.glEnable(GL11.GL_BLEND); tw.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); GL11.glRotatef(-renderer.func_177068_d().playerViewY, 0.0F, 1.0F, 0.0F); GL11.glRotatef(renderer.func_177068_d().playerViewX, 1.0F, 0.0F, 0.0F); tw.addVertex(0,2,0); tw.addVertex(0,3,0); tw.addVertex(1,3,0); tw.addVertex(1,2,0); GL11.glPopMatrix(); t.draw(); } @SubscribeEvent public void handlerRenderLiving(RenderLivingEvent.Pre event) { drawNameWithHealth(event.entity, event.renderer); } And when I run it, the player gets an ugly semi-transparent square to the upper left of it's model. This is okay, however even though I'm calling GlStateManager.rotate, it does not rotate. Also if you're wondering, the function func_177068_d() does, is it simply returns a RenderManager because the variable renderManager is protected and thus I cannot call renderer.renderManager, but this is essentially what I'm doing. The reason i'm calling the renderer.func_177068_d() code is because in the Render.class, they use GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GlStateManager.rotate(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); to achieve the effect I desire. What am I doing wrong and how can I fix it? Thank you! Edit: Changed GlStateManager to GL11 so it all uses GL11 instead of some of each. http://imagizer.imageshack.com/img661/3383/gPcPiH.gif[/img]
May 26, 201510 yr Try .addVertexWithUV(); Have you looked at this guide? It is actually pretty useful http://greyminecraftcoder.blogspot.com/2013/08/the-tessellator.html
May 26, 201510 yr Author Try .addVertexWithUV(); Have you looked at this guide? It is actually pretty useful http://greyminecraftcoder.blogspot.com/2013/08/the-tessellator.html It somewhat helped, atleast for understand the UV section, so thank you for that However the plane I've created still does not rotate... http://imagizer.imageshack.com/img661/3383/gPcPiH.gif[/img]
May 26, 201510 yr Author Show me the code that you added Alright it's broken into two methods, which are: public void drawUglyQuad(Entity entity, RendererLivingEntity renderer) { Tessellator t = Tessellator.getInstance(); WorldRenderer tw = t.getWorldRenderer(); tw.startDrawingQuads(); GL11.glPushMatrix(); GL11.glEnable(GL11.GL_BLEND); tw.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); GL11.glRotatef(-renderer.func_177068_d().playerViewY, 0.0F, 1.0F, 0.0F); GL11.glRotatef(renderer.func_177068_d().playerViewX, 1.0F, 0.0F, 0.0F); tw.addVertexWithUV(0,2,0, 0, 0); tw.addVertexWithUV(0,3,0, 0, 0); tw.addVertexWithUV(1,3,0, 0, 0); tw.addVertexWithUV(1,2,0, 0, 0); GL11.glPopMatrix(); t.draw(); } @SubscribeEvent public void handlerRenderLiving(RenderLivingEvent.Pre event) { drawUglyQuad(event.entity, event.renderer); } http://imagizer.imageshack.com/img661/3383/gPcPiH.gif[/img]
May 27, 201510 yr Author Okay so I've done some changes and I've gotten it to a point where it will render a quad above an entity's head. However it still will not rotate. The code I'm using now is: public void drawUglyQuad(Entity entity, RendererLivingEntity renderer) { double x = (Minecraft.getMinecraft().thePlayer.getPosition().getX() - entity.getPosition().getX()) * -1; double y = (Minecraft.getMinecraft().thePlayer.getPosition().getY() - entity.getPosition().getY()) * -1; double z = (Minecraft.getMinecraft().thePlayer.getPosition().getZ() - entity.getPosition().getZ()) * -1; GL11.glPushMatrix(); Tessellator t = Tessellator.getInstance(); WorldRenderer tw = t.getWorldRenderer(); tw.startDrawingQuads(); GL11.glEnable(GL11.GL_BLEND); GlStateManager.translate(x,y,z); GlStateManager.rotate(-renderer.func_177068_d().playerViewY % 360, 1.0F, 1.0F, 1.0F); GlStateManager.rotate(renderer.func_177068_d().playerViewX, 1.0F, 1.0F, 1.0F); tw.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); tw.addVertexWithUV(x,y+2,z, 0, 0); tw.addVertexWithUV(x,y+3,z, 0, 0); tw.addVertexWithUV(x+1,y+3,z, 0, 0); tw.addVertexWithUV(x+1,y+2,z, 0, 0); GL11.glPopMatrix(); t.draw(); } @SubscribeEvent public void handlerRenderLiving(RenderLivingEvent.Pre event) { drawUglyQuad(event.entity, event.renderer); } Any help on getting the rotation to work? I suspect the GlStateManager.translate and .rotate are doing nothing... http://imagizer.imageshack.com/img661/3383/gPcPiH.gif[/img]
May 27, 201510 yr Dude! GL11.glPopMatrix(); t.draw(); should be t.draw(); GL11.glPopMatrix(); Your pop before draw undoes the translate and rotate before OpenGL gets a chance to see it. The rendering commands aren't sent to OpenGL until you call t.draw(). -TGG
May 27, 201510 yr Author Dude! GL11.glPopMatrix(); t.draw(); should be t.draw(); GL11.glPopMatrix(); Your pop before draw undoes the translate and rotate before OpenGL gets a chance to see it. The rendering commands aren't sent to OpenGL until you call t.draw(). -TGG Oh my gosh. I feel like an idiot, but thank you! I can get it to work from here, now that it actually rotates http://imagizer.imageshack.com/img661/3383/gPcPiH.gif[/img]
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.