Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Marlon

Pages: 1 ... 3 4 [5]
61
Hallo mal wieder!
Ich habe zu diesem Thema verzweifelt gesucht, jedoch nichts brauchbares gefunden.

Eine kurze Erläuterung meines Problems:
Ich habe in Anlehnung an das hier zur Verfügung gestellte AdvancedExample ein eigenes Testprogramm geschrieben, dass genau wie die Vorlage die OPENGL Unterstützung verwendet.
Ich bin sehr zufrieden mit meinen Fortschritten, jedoch möchte ich nun zusätzlich zur 3D Ausgabe auch ein 2D Menu verwenden.
Da OPENGL nativ ist, steht keine AWT-Zeichentechnik zur Verfügung (habe ich da wirklich richtig verstanden?), das heisst ein g.drawImage() kann ich an dieser Stelle vergessen (Im Softwaremodus in einem JFrame hat das wunderbar geklappt).

Ich habe etwas von buffer.blit() gelesen und ausprobiert, jedoch stellen Pixelgrabber und Textur keine Lösung dar, da sich die Menuelemente ja zur Laufzeit verändern und das damit zu rechenintensiv wäre.
Ich könnte mir vorstellen alle Elemente so wie Fenster, Kontextmenu, Buttons, etc. auf ein BufferedImage zu malen und dieses dann nach dem Aufruf von buffer.displayGLOnly() zu zeichnen, jedoch weiss ich nicht, wie ich das am besten anstelle.

Wenn jemand an dieser Stelle performante Lösungen parat hat würde ich mich echt sehr freuen!
Danke im Vorraus! :)
Marlon

62
German corner / Re: Texturen und .3ds Objekte
« on: November 03, 2011, 10:51:41 am »
...und diese Geschwindigkeit lässt sich ja dann für jede Animation individuell festlegen.
Ich habe es hinbekommen und bin echt sehr zufrieden mit dem Ergebnis!
Danke für die Hilfe!

63
German corner / Re: Texturen und .3ds Objekte
« on: November 02, 2011, 10:50:36 pm »
Ah, alles klar, danke!
Bei der Walk Animation im 3ds Format hatte ich lediglich 4 Stufen benutzt und es sah gut aus, wenn JPCT auch beim MD2 Format interpoliert werde ich das für das MD2 Format ähnlich halten und die 100 Schritte auf 4 (bzw. 5) reduzieren. Wie ist das denn dann mit der Geschwindigkeit der Animation, wird die lediglich über die Ticks (siehe AdvancedExample) festgelegt?

64
German corner / Re: Texturen und .3ds Objekte
« on: November 02, 2011, 06:04:02 pm »
So... ich habe mich nun mal an das mp2 Format rangewagt.
Für den Md2 Export bei Blender soll ja eine md2.txt Datei angegeben werden, die beschreibt, wie viele Frames exportiert werden sollen.
Ist es nun üblich alle an das Objekt gebundenen Animationen in diese Datei aufzunehmen?
Ich habe für eine Laufanimation also "walk" 100 angegeben, da in meiner Blender3D Datei die Laufanimation genau 100 Frames (die ersten 100 Frames) umfasst.
Die Output Datei ist dann für diese eine Animation 500 KB gross.
Mache ich das ganze über das 3ds Format, so spare ich viel mehr Platz.
Hat jemand eine Idee wie so eine md2.txt im Idealfall auszusehen hat, bzw. kann mir jemand Tipps geben, die mir weiterhelfen könnten?
Wie geht ihr in einem solchen Falle vor?
Danke im Vorraus!

65
German corner / Re: Texturen und .3ds Objekte
« on: October 30, 2011, 07:55:37 pm »
Alles klar, ich wollte mich auch fürs erste so gut es geht am AdvancedExample orientieren, und demenstprechend für Animationen MD2 Objekte verwenden. Leider unterstützt Blender keinen MD2 Export, allerdings lässt sich das bestimmt durch die Integration eines Scripts lösen.
Ich habe jetzt auch hinbekommen, dass ich dem 3ds Model eine Textur zuweise, es hat auch vorher mit deiner Beispieldatei "disco" geklappt, bloss war bei meinem Model nur Schwarz zu sehen, so dass ich dachte, es würde nicht funktionieren.
Mit setTexture() kann man also doch ganz einfach eine Textur dem 3ds Model zuweisen, ist ja gar nicht kompliziert;)

66
German corner / Re: Texturen und .3ds Objekte
« on: October 30, 2011, 12:40:59 pm »
Oh ok, danke für deine Antwort! :)
Das klingt natürlich alles etwas komplizierter und der Fakt, dass ich ein Model in den selteneren Fällen öfter als einmal verwende lässt mich mit dem Gedanken spielen, dieses Model dann einfach mehrmals zur Verfügung zu stellen - und dann mit unterschiedlichen Texturen.
Für mein 2D Spiel habe ich alle Nicht-Menu-Grafiken in Blender erstellt, würde also Low-Poly-Models daraus machen und diese für die neue 3D-Version zur Verfügung stellen. Zu welchem Format würdest du mir denn persönlich raten (3ds, obj, md2 oder doch was anderes)?

67
German corner / Texturen und .3ds Objekte
« on: October 29, 2011, 12:50:23 pm »
Hallo!
Ich beschäftige mich seit heute wieder mit JPCT und möchte mein 2D Spiel nun auch für eine 3D Umgebung realisieren.
Um den Einstieg etwas zu erleichtern benutze ich als Vorlage das AdvancedExample.java und es klappt soweit alles ganz gut.
Ein Boden, ein Charakter, ein paar Lichter und eine Kamera, die mit dem Charakter bewegt wird sind schon integriert.
Das erste Problem auf das ich stosse ist das Unverständnis, wie ich dem .3ds Objekt nun eine Textur zuweise.
Dem im AdvancedExample vorhandenen .md2 Objekt (snork) wird ja mit setTexture() ganz simpel eine Textur zugewiesen, allerdings lässt sich das auf
das .3ds Objekt nicht so einfach anwenden. Nun habe ich im Forum gelesen, dass die Texturen automatisch geladen werden (anhand des Texturenamens im .3ds File). Was ist aber, wenn ich im Programm ein und das selbe Model mehrmals verwenden möchte, jedoch unterschiedliche Texturen zuweisen will?
Gibt es einen (einfachen) Weg, dies zu ermöglichen?
Danke für jegliche Hilfe im Vorraus!!!
Marlon

68
Support / Painting a background image into the scene
« on: April 13, 2011, 04:55:10 pm »
Hello again!
Now I want to add a background image to the world, so that the background of the scene isn't black but shows the image on which all objects of the world are painted on.
More detailed I want to add a webcam stream into the scene to place the objects in the "real world scene" (-> augmented reality).
Do you know if this is possible or there is a way to achieve this aim?
Thanks in advance!
Marlon

69
Support / Re: 2 cameras with opengl
« on: January 27, 2011, 11:48:06 am »
Ha, yeah!
Sometimes its that simple!
(Although I thought a "FlowLayoutManager" would do the whole position stuff)
Yeah, I'm not a big fan of Swing either, i use to write my own GUI frameworks.
But now it works, many many thanks!!!
Marlon

70
Support / Re: 2 cameras with opengl
« on: January 26, 2011, 03:38:32 pm »
Now I have written a small program which shows the problem.
2 worlds, 2 objects, 2 cameras but only left camera renders the scene.
(at software mode it runs great)

Code: [Select]
import java.awt.Canvas;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;

import javax.swing.JFrame;

import com.threed.jpct.Config;
import com.threed.jpct.FrameBuffer;
import com.threed.jpct.IRenderer;
import com.threed.jpct.Lights;
import com.threed.jpct.Object3D;
import com.threed.jpct.Primitives;
import com.threed.jpct.SimpleVector;
import com.threed.jpct.World;


public class MainProgram implements Runnable {
private final int WIDTH=800, HEIGHT=600;

private World worldLeft, worldRight;
private Object3D objLeft, objRight;
private FrameBuffer bufferLeft, bufferRight;
private Canvas canvasLeft=null, canvasRight=null;
private float camStartX=0, camStartY=-30, camStartZ=-90;

private JFrame frame;
private int titleBarHeight, leftBorderWidth;
private boolean running=true;

public static void main(String[] args) throws Exception {
Config.glVerbose = true;
new MainProgram();
}

public MainProgram() throws Exception {
Config.maxPolysVisible=20000;

//frame
initFrame();

//world
worldLeft = createWorld();
worldRight = createWorld();

//object
objLeft = add3DObject(worldLeft);
objRight = add3DObject(worldRight);

//camera
adjustCamera(worldLeft, objLeft, true);
adjustCamera(worldRight, objRight, false);

initWorld();

new Thread(this).start();
}

private void initFrame() {
frame = new JFrame("OpenGL Stereoscopic Test");
frame.pack();
Insets insets = frame.getInsets();
titleBarHeight = insets.top;
leftBorderWidth = insets.left;
frame.setSize(WIDTH + leftBorderWidth + insets.right, HEIGHT + titleBarHeight + insets.bottom);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private World createWorld() {
// world
World world = new World();

// light
Config.fadeoutLight = false;
world.getLights().setOverbrightLighting(Lights.OVERBRIGHT_LIGHTING_DISABLED);
world.getLights().setRGBScale(Lights.RGB_SCALE_2X);
world.setAmbientLight(25, 30, 30);
world.addLight(new SimpleVector(-1000, -150, 1000), 8, 3, 2);

return world;
}

private Object3D add3DObject(World world) {
Object3D box = Primitives.getBox(13f, 2f);
box.setEnvmapped(Object3D.ENVMAP_ENABLED);
box.build();
world.addObject(box);

return box;
}

private void adjustCamera(World world, Object3D obj, boolean left) {
float add = camStartX;
if (left) {
add = 14;
}

world.getCamera().setPosition(add, camStartY, camStartZ);
world.getCamera().lookAt(obj.getTransformedCenter());
}

private void initWorld() {
//layout
FlowLayout flLayout = new FlowLayout();
frame.setLayout(flLayout);
frame.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

//left side
bufferLeft = new FrameBuffer(WIDTH/2, HEIGHT, FrameBuffer.SAMPLINGMODE_NORMAL);
canvasLeft=bufferLeft.enableGLCanvasRenderer();
bufferLeft.disableRenderer(IRenderer.RENDERER_SOFTWARE);
canvasLeft.setSize(new Dimension(WIDTH/2, HEIGHT));
frame.add(canvasLeft);

//right side
bufferRight = new FrameBuffer(WIDTH/2, HEIGHT, FrameBuffer.SAMPLINGMODE_NORMAL);
canvasRight=bufferRight.enableGLCanvasRenderer();
bufferRight.disableRenderer(IRenderer.RENDERER_SOFTWARE);
canvasRight.setSize(new Dimension(WIDTH/2, HEIGHT));
frame.add(canvasRight);
}

private void loop() {
bufferLeft.clear(java.awt.Color.BLACK);
worldLeft.renderScene(bufferLeft);
worldLeft.draw(bufferLeft);
bufferLeft.update();
bufferLeft.displayGLOnly();
canvasLeft.repaint();

bufferRight.clear(java.awt.Color.BLACK);
worldRight.renderScene(bufferRight);
worldRight.draw(bufferRight);
bufferRight.update();
bufferRight.displayGLOnly();
canvasRight.repaint();

try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}

Thread.yield();
}

@Override
public void run() {
while(running) {
loop();
}

bufferLeft.disableRenderer(IRenderer.RENDERER_OPENGL);
bufferLeft.dispose();
bufferRight.disableRenderer(IRenderer.RENDERER_OPENGL);
bufferRight.dispose();
frame.dispose();
System.exit(0);
}
}


If you are able to find a solution, please let me know.
Many many thanks!!!
Marlon

71
Support / Re: 2 cameras with opengl
« on: January 26, 2011, 11:02:31 am »
A test case...the simplest possible, compilable class(es) that show the problem.
Code has 20 kb of size :(
There are 8 classes.
Here are the most important fragments:

Code: [Select]
private void initFrame() {
frame = new JFrame("3D Car");
frame.pack();
Insets insets = frame.getInsets();
titleBarHeight = insets.top;
leftBorderWidth = insets.left;
frame.setSize(width + leftBorderWidth + insets.right, height + titleBarHeight + insets.bottom);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(new MyKeyListener(this));
gFrame = frame.getGraphics();
}

Code: [Select]
private void loop() {
World.setDefaultThread(Thread.currentThread());

//layout
FlowLayout flLayout = new FlowLayout();
frame.setLayout(flLayout);
frame.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);

buffer = new FrameBuffer(width / 2, height, FrameBuffer.SAMPLINGMODE_NORMAL);
canvas=buffer.enableGLCanvasRenderer();
buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
frame.add(canvas);

buffer2 = new FrameBuffer(width / 2, height, FrameBuffer.SAMPLINGMODE_NORMAL);
canvas2=buffer2.enableGLCanvasRenderer();
buffer2.disableRenderer(IRenderer.RENDERER_SOFTWARE);
frame.add(canvas2);

Timer timer = new Timer(25);
timer.start();

Timer fpsTimer = new Timer(1000);
fpsTimer.start();

while (!exit) {
if (!isIdle) {
long ticks = timer.getElapsedTicks();

for (int i = 0; i < ticks; i++) {
moveCar();
if(i==0) {
moveCamera();
}
}


buffer.clear(java.awt.Color.BLACK);
world.renderScene(buffer);
world.draw(buffer);
buffer.update();
buffer.displayGLOnly();
canvas.repaint();


buffer2.clear(java.awt.Color.BLACK);
world2.renderScene(buffer2);
world2.draw(buffer2);
buffer2.update();
buffer2.displayGLOnly();
canvas2.repaint();

fps++;
pps += world.getVisibilityList().getSize();

if (fpsTimer.getElapsedTicks() > 0) {
totalFps = (fps - lastFps);
lastFps = fps;
lastPps = pps;
pps = 0;
}

Thread.yield();

} else {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
}

buffer.disableRenderer(IRenderer.RENDERER_OPENGL);
buffer.dispose();
buffer2.disableRenderer(IRenderer.RENDERER_OPENGL);
buffer2.dispose();
frame.dispose();
System.exit(0);
}

72
Support / Re: 2 cameras with opengl
« on: January 26, 2011, 10:30:09 am »
Can you assemble a little test case for me to try?

Erm.. you mean you want to test it out for yourself?
I could send you the project files (211kb), but how should I upload the data?
Thanks for your help,
Marlon

73
Support / Re: 2 cameras with opengl
« on: January 25, 2011, 02:30:53 pm »
Thanks for your help!
I took a look at the suggested HelloWorldAWTGL.java Example and changed my code.
Unfortunately only the left (camera 1) side of the AWT frame is displayed.

I don't know, maybe I am missing something...
Here is my code, does anybody know what is wrong?

Thanks in advance!
Marlon

Init buffer and canvas of each camera:
Code: [Select]
buffer = new FrameBuffer(width / div, height, FrameBuffer.SAMPLINGMODE_NORMAL);
canvas=buffer.enableGLCanvasRenderer();
buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
frame.add(canvas);

buffer2 = new FrameBuffer(width / 2, height, FrameBuffer.SAMPLINGMODE_NORMAL);
canvas2=buffer2.enableGLCanvasRenderer();
buffer2.disableRenderer(IRenderer.RENDERER_SOFTWARE);
frame.add(canvas2);


Render scene within loop method:
Code: [Select]
buffer.clear(java.awt.Color.BLACK);
world.renderScene(buffer);
world.draw(buffer);
buffer.update();
buffer.displayGLOnly();
canvas.repaint();

buffer2.clear(java.awt.Color.BLACK);
world2.renderScene(buffer2);
world2.draw(buffer2);
buffer2.update();
buffer2.displayGLOnly();
canvas2.repaint();

74
Support / 2 cameras with opengl
« on: January 25, 2011, 11:12:11 am »
Hello to all out there!
I am working with JPCT since 1 week now and I am really enjoying it!
It's a great engine, which is easy to use and there is much potential and many possibilities!

And here I start my first thread to raise my hope in solving a difficult problem:

I have written a program, which shows 1 object rendered by 2 cameras.
The reason why I use 2 cameras is to view this object in stereoscopic 3D.
In software mode the program runs great and it works, but I want the movement more smooth and so I
decided to use opengl.
Further I took a closer look at the AdvancedExample.
The problem here is that no AWT frame was used and so I don't see any possibilities to display 2 cameras (splitscreen)
in one AWT frame in opengl mode.

If somebody know how to solve the problem I would be very glad.
Thank you!
Marlon

Pages: 1 ... 3 4 [5]