# 2 Fenster bei JPCT



## Titanpharao (13. Jul 2008)

Hallo, habe mir mal den Beispielcode herrangezogen. Nur wenn ich 

```
buffer.enableRenderer(IRenderer.RENDERER_OPENGL);
```

benutze habe ich auf einmal 2 Fenster? Eins OpenGL gerendet das andere Software...ist das normal?


```
package test;

import com.threed.jpct.*; 
import javax.swing.JFrame;

public class Test1 extends JFrame{ 
    
   private World world; 
   private Camera camera; 
   private FrameBuffer buffer; 
   boolean running = true; 
   Object3D box; 
   TextureManager texman; 

   public static void main(String[] args){ 
      new Test1(); 
   } 
    
   public Test1(){ 

      //Engine konfigurieren 
      Config.maxPolysVisible = 10000;  //max. sichtbare Polygone 
      
     world  = new World();  // Hauptklasse instanziieren 
     world.setAmbientLight(0,255,0); //grünes Umgebungslicht 
      
     texman = TextureManager.getInstance(); 
    Texture spot=new Texture("textures/envmap.jpg"); 
    TextureManager.getInstance().addTexture("car", spot); 
    
    //Box erzeugen 
     box = Primitives.getBox(8f,1f); 
     box.setTexture("car"); 
     box.setSpecularLighting(true); 
     //   Textur als Umgebungs-Map. Noch keine so rechte Ahnung was gemeint ist, sieht 
     box.setEnvmapped(Object3D.ENVMAP_ENABLED); 
     box.build();      
     world.addObject(box); //Box in die Welt packen 
      
    camera = world.getCamera(); //Kamera abholen 
    camera.setPosition(50,-50,-5); //Position verändern 
    camera.lookAt(box.getTransformedCenter()); //auf die Box gucken 

     //Frame erzeugen 
    setTitle("jPCT "+Config.getVersion()); 
    pack(); 
    setSize(800,600); 
    setResizable(false); 
    setVisible(true);
    

    loop();    
      
   } 
    
   private void loop(){ 
        
      World.setDefaultThread(Thread.currentThread());  //JPCT-Funktionen werde aus diese Thread aufgerufen 
      buffer = new FrameBuffer(800,600,FrameBuffer.SAMPLINGMODE_NORMAL); //FrameBuffer zum Zeichnen 
      buffer.enableRenderer(IRenderer.RENDERER_OPENGL); //Renderer zuweisen 
      buffer.optimizeBufferAccess();//schnellst Buffer-Zugriff ermitteln 
        
      while(running){        
       buffer.clear(); //no comment 
       world.renderScene(buffer); 
       //world.drawWireframe(buffer, Color.white);// um im Wireframe zu zeichnen 
       world.draw(buffer); //zeichne in den Buffer 
       buffer.update(); //gewährleistet, daß alle Änderungen übernommen werden. Update des Output-Buffers 
       buffer.display(getGraphics()); 
         Thread.yield(); 
         try { Thread.sleep(20);}
         catch (InterruptedException e) { System.out.println(e);}
      }
      
   } 
    
}
```


----------



## EgonOlsen (13. Jul 2008)

Ja, es geht beides gleichzeitig...wobei das meistens nicht sehr sinnvoll ist. Du müsstest den Software-Renderer explizit disablen. Dann brauchst du aber auch den JFrame nicht mehr, weil der OpenGL-Renderer sein eigenes, natives Fenster mitbringt.


----------



## Titanpharao (13. Jul 2008)

Achso dachte ich mir fast. Gut werde mal nur das OGL fenster betrachten sieht irgendwie schöner aus ;-)

*neuer anhänger*

Macht deine 3D Engine auch Collsionserkennung? Also das ich nicht durch Wände laufen kann, oder muss ich das selber machen ... werde mir mal die Codebeispiele ansehen ...


----------



## EgonOlsen (13. Jul 2008)

Titanpharao hat gesagt.:
			
		

> Macht deine 3D Engine auch Collsionserkennung? Also das ich nicht durch Wände laufen kann, oder muss ich das selber machen ... werde mir mal die Codebeispiele ansehen ...


Macht sie auch. Es gibt drei verschiedene Varianten. Im fps-Beispiel findest du ein bisschen was oder halt im Forum (www.jpct.net/forum2).


----------



## Titanpharao (13. Jul 2008)

Wie kann ich eine Oberfläche erstellen quasi ein Menu?
Wie komme ich an das OGL Fenster ran, um dort KeyListener etc unterzubringen? Stelle die Fragen auch gern im JPCT Forum, nur warst dort lange nicht mehr aktiv  :?


----------



## EgonOlsen (13. Jul 2008)

Ich bin da jeden Tag mehrmals!? Es gab nur nicht sooo viele Fragen in den letzten Wochen...Sommerloch halt.

Was die GUI angeht: Wenn du ein natives OpenGL-Fenster nutzt, gibt es keine Key- und MouseListener und auch keine GUI-Komponenten, weil das Fenster mit Swing/AWT nichts zu tun hat.
Maus und Tastaturabfragen laufen dann über die entsprechenden LWJGL-Klassen ab. Fürs Keyboard bringt jPCT einen Wrapper mit, für die Maus findest du ähnliches im Forum.
Du kannst auch alternativ einen AWTGLRenderer aktivieren, der eine AWTCanvas zum Rendern nutzt. Damit gehen dann Maus und Tastatur wie bei Swing/AWT. Swing-Komponenten gehen mit Einschränkungen auch. Allerdings ist diese Variante des Hardware-Renderers nicht ganz so kompatibel wie die native.


----------

