I see...to do this with jPCT's wireframe rendering mode, you have to implement a simple IRenderHook to tweak it, because by default, jPCT uses a line width of 1 and no culling in wireframe mode. Here's a little example....however, i don't really think that the effect looks that great in motion...anyway...
import java.awt.Color;
import org.lwjgl.opengl.GL11;
import com.threed.jpct.FrameBuffer;
import com.threed.jpct.IRenderHook;
import com.threed.jpct.IRenderer;
import com.threed.jpct.Loader;
import com.threed.jpct.Object3D;
import com.threed.jpct.Texture;
import com.threed.jpct.TextureManager;
import com.threed.jpct.World;
public class Outlines {
private World world;
private FrameBuffer buffer;
private Object3D box;
public static void main(String[] args) throws Exception {
new Outlines().loop();
}
public Outlines() throws Exception {
world = new World();
world.setAmbientLight(255, 255, 255);
TextureManager.getInstance().addTexture("box", new Texture("box.jpg"));
box = Loader.loadASC("beethoven.asc", 50f, false);
box.setTexture("box");
box.rotateX((float) Math.PI / 2f);
box.rotateMesh();
box.clearRotation();
box.calcTextureWrapSpherical();
box.build();
box.compile();
world.addObject(box);
world.getCamera().setPosition(50, 20, -5);
world.getCamera().lookAt(box.getTransformedCenter());
}
private void loop() throws Exception {
buffer = new FrameBuffer(800, 600, FrameBuffer.SAMPLINGMODE_GL_AA_2X);
buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
buffer.enableRenderer(IRenderer.RENDERER_OPENGL);
Outliner ol=new Outliner();
while (!org.lwjgl.opengl.Display.isCloseRequested()) {
box.rotateY(0.01f);
box.rotateX(0.01f);
buffer.clear(java.awt.Color.BLUE);
box.invertCulling(true);
box.setRenderHook(ol);
world.renderScene(buffer);
world.drawWireframe(buffer, Color.BLACK);
box.setRenderHook(null);
box.invertCulling(false);
world.renderScene(buffer);
world.draw(buffer);
buffer.update();
buffer.displayGLOnly();
Thread.sleep(10);
}
buffer.disableRenderer(IRenderer.RENDERER_OPENGL);
buffer.dispose();
System.exit(0);
}
private static class Outliner implements IRenderHook {
@Override
public void beforeRendering(int polyID) {
GL11.glLineWidth(5);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_CULL_FACE);
}
@Override
public void afterRendering(int polyID) {
GL11.glLineWidth(1);
}
@Override
public void setCurrentObject3D(Object3D obj) {
// TODO Auto-generated method stub
}
@Override
public void setTransparency(float transparency) {
// TODO Auto-generated method stub
}
@Override
public void onDispose() {
// TODO Auto-generated method stub
}
@Override
public boolean repeatRendering() {
// TODO Auto-generated method stub
return false;
}
@Override
public void clear() {
// TODO Auto-generated method stub
}
}
}