private void modelPanel1_PreRender(object sender, GLContext context) { if (pnlOptions.RenderFloor) { GLTexture _bgTex = context.FindOrCreate <GLTexture>("TexBG", GLTexturePanel.CreateBG); float s = 10.0f, t = 10.0f; float e = 30.0f; context.glDisable((uint)GLEnableCap.Lighting); context.glEnable(GLEnableCap.DepthTest); context.glPolygonMode(GLFace.Front, GLPolygonMode.Fill); context.glPolygonMode(GLFace.Back, GLPolygonMode.Line); context.glEnable(GLEnableCap.Texture2D); _bgTex.Bind(); context.glColor(0.5f, 0.5f, 0.75f, 1.0f); context.glBegin(GLPrimitiveType.Quads); context.glTexCoord(0.0f, 0.0f); context.glVertex(-e, 0.0f, -e); context.glTexCoord(s, 0.0f); context.glVertex(e, 0.0f, -e); context.glTexCoord(s, t); context.glVertex(e, 0.0f, e); context.glTexCoord(0, t); context.glVertex(-e, 0.0f, e); context.glEnd(); } }
internal unsafe void Render(GLContext ctx) { if (!_render) { return; } if (_boneColor != Color.Transparent) { ctx.glColor(_boneColor.R, _boneColor.G, _boneColor.B, _boneColor.A); } else { ctx.glColor(DefaultBoneColor.R, DefaultBoneColor.G, DefaultBoneColor.B, DefaultBoneColor.A); } Vector3 v = _frameState._translate; ctx.glBegin(GLPrimitiveType.Lines); ctx.glVertex(0.0f, 0.0f, 0.0f); ctx.glVertex3v((float *)&v); ctx.glEnd(); ctx.glPushMatrix(); ctx.glTranslate(v._x, v._y, v._z); //Render node GLDisplayList ndl = ctx.FindOrCreate <GLDisplayList>("BoneNodeOrb", CreateNodeOrb); if (_nodeColor != Color.Transparent) { ctx.glColor(_nodeColor.R, _nodeColor.G, _nodeColor.B, _nodeColor.A); } else { ctx.glColor(DefaultNodeColor.R, DefaultNodeColor.G, DefaultNodeColor.B, DefaultNodeColor.A); } ndl.Call(); DrawNodeOrients(ctx); ctx.glTranslate(-v._x, -v._y, -v._z); //Transform Bones fixed(Matrix *m = &_frameState._transform) ctx.glMultMatrix((float *)m); //Render children foreach (MDL0BoneNode n in Children) { n.Render(ctx); } ctx.glPopMatrix(); }