Java Использование OpenGL Stencil для создания Outline

Я пытаюсь сделать контур объекта поверх него, но у меня возникают некоторые трудности. Я не слишком хорошо разбираюсь в OpenGL, поэтому большая часть этого была из следующих руководств. Желаемый эффект должен быть примерно таким:

Но вот результат на данный момент:

Код, который я использую для этого:

GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glClearStencil(0);
GL11.glClear(GL11.GL_STENCIL_BUFFER_BIT);
GL11.glEnable(GL11.GL_STENCIL_TEST);
GL11.glStencilFunc(GL11.GL_ALWAYS, 1, 0xFFFF);
GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_REPLACE);
GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL);
GL11.glColor3f(0.0f, 0.0f, 0.0f);

// Render original.
this.doRender((AbstractClientPlayer) par1Entity, par2, par4, par6, par8, par9);

GL11.glDisable(GL11.GL_LIGHTING);
GL11.glStencilFunc(GL11.GL_NOTEQUAL, 1, 0xFFFF);
GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_REPLACE);
GL11.glLineWidth(3.0f );
GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
GL11.glColor3f(1.0f, 1.0f, 1.0f);
GL11.glColor4f(1.0F, 0, 0, 0.5F);
GL11.glDisable(GL11.GL_TEXTURE_2D);

// Render stencil.
this.doRender((AbstractClientPlayer) par1Entity, par2, par4, par6, par8, par9);

GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glColor4f(1.0F, 1, 1, 1F);
GL11.glPopAttrib();

И doRender — это метод, который уже существует для рендеринга игрока. Что-нибудь на этом будет полезно.


person user3166950    schedule 18.01.2015    source источник
comment
У вас есть трафаретный буфер? Обычно вы запрашиваете это при настройке контекста/поверхности.   -  person Reto Koradi    schedule 18.01.2015