JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=4eca758d4eaf9852e8caaba9e4a0ad9fMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Verzerrung
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 18:21    Titel: Verzerrung Antworten mit Zitat

Hallo,

ich zeichne eine Würfelpyramide auf dem Schirm, jedoch verzerrt sich das ganze ganz schön in die Breite.
Ich probier jetzt die ganze Zeit rum, woran das liegen könnte.
Hier ist der Code der aufrufenden Datei.
Wenn jemand sich bereiterklärt, schick ich ihm auch gern das Projekt per Mail.
Soll jetzt kein extremes Codereading werden, aber vielleicht weiß einer von euch auf Anhieb Rat!

CPP:
// Cube.cpp : Definiert den Einstiegspunkt für die Anwendung.
//

#include "stdafx.h"
#include "Cube.h"
#include <d3d9.h>
#include <d3dx9.h>
#include <dxerr9.h>
#include "Box.h"
#define MAX_LOADSTRING 100

// Globale Variablen:
HWND hWnd;
LPDIRECT3D9 lpD3D = NULL;
LPDIRECT3DDEVICE9 lpD3DDevice = NULL;
LPDIRECT3DSURFACE9 lpBackBuffer = NULL;
HINSTANCE hInst;                        // Aktuelle Instanz
TCHAR szTitle[MAX_LOADSTRING];               // Titelleistentext
TCHAR szWindowClass[MAX_LOADSTRING];         // Klassenname des Hauptfensters
Box* cube;

// Vorwärtsdeklarationen der in diesem Codemodul enthaltenen Funktionen:
ATOM            MyRegisterClass(HINSTANCE hInstance);
BOOL            InitInstance(HINSTANCE, int);
LRESULT CALLBACK   WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK   About(HWND, UINT, WPARAM, LPARAM);
BOOL Init(HWND hWnd, BOOL bWindowed);
void CleanUp(void);
void DrawScene(void);
void InitScene();

int i =0;
float angle =0.0f;

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Hier Code einfügen.
   MSG msg;
   HACCEL hAccelTable;

   // Globale Zeichenfolgen initialisieren
   LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
   LoadString(hInstance, IDC_CUBE, szWindowClass, MAX_LOADSTRING);
   MyRegisterClass(hInstance);

   // Anwendungsinitialisierung ausführen:
   if (!InitInstance (hInstance, nCmdShow))
   {
      return FALSE;
   }

   hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_CUBE);

   if(!Init(hWnd,true))
   {
      return -1;
   }

   cube = new Box(lpD3DDevice);

   if(!cube->InitVertexBuffer())
   {
      return -1;
   }

   InitScene();
   // Hauptmeldungsschleife:
   while (TRUE)
   {
      if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
      {
         TranslateMessage(&msg);
         DispatchMessage(&msg);

         if (msg.message == WM_QUIT)
               break;
      }

      DrawScene();
      
   }


   CleanUp();

   return (int) msg.wParam;
}



//
//  FUNKTION: MyRegisterClass()
//
//  ZWECK: Registriert die Fensterklasse.

ATOM MyRegisterClass(HINSTANCE hInstance)
{
   WNDCLASSEX wcex;

   wcex.cbSize = sizeof(WNDCLASSEX);

   wcex.style         = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
   wcex.lpfnWndProc   = (WNDPROC)WndProc;
   wcex.cbClsExtra      = 0;
   wcex.cbWndExtra      = 0;
   wcex.hInstance      = hInstance;
   wcex.hIcon         = LoadIcon(hInstance, (LPCTSTR)IDI_CUBE);
   wcex.hCursor      = LoadCursor(NULL, IDC_ARROW);
   wcex.hbrBackground   = (HBRUSH)(COLOR_WINDOW+1);
   wcex.lpszMenuName   = (LPCTSTR)IDC_CUBE;
   wcex.lpszClassName   = szWindowClass;
   wcex.hIconSm      = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

   return RegisterClassEx(&wcex);
}

//
//   FUNKTION: InitInstance(HANDLE, int)
//
//   ZWECK: Speichert das Instanzenhandle und erstellt das Hauptfenster.

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   

   hInst = hInstance; // Instanzenhandle in der globalen Variablen speichern

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  FUNKTION: WndProc(HWND, unsigniert, WORD, LONG)
//
//  ZWECK:  Verarbeitet Meldungen vom Hauptfenster.
//
//  WM_COMMAND   - Verarbeiten des Anwendungsmenüs
//  WM_PAINT   - Zeichnen des Hauptfensters
//  WM_DESTROY   - Beenden-Meldung anzeigen und zurückgeben
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   int wmId, wmEvent;
   PAINTSTRUCT ps;
   HDC hdc;

   switch (message)
   {
   case WM_COMMAND:
      wmId    = LOWORD(wParam);
      wmEvent = HIWORD(wParam);
      // Menüauswahl bearbeiten:
      switch (wmId)
      {
      case IDM_ABOUT:
         DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
         break;
      case IDM_EXIT:
         DestroyWindow(hWnd);
         break;
      default:
         return DefWindowProc(hWnd, message, wParam, lParam);
      }
      break;
   case WM_PAINT:
      hdc = BeginPaint(hWnd, &ps);
      // TODO: Fügen Sie hier den Zeichnungscode hinzu...
      EndPaint(hWnd, &ps);
      break;
   case WM_DESTROY:
      PostQuitMessage(0);
      break;
   default:
      return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

// Meldungshandler für Infofeld.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
   switch (message)
   {
   case WM_INITDIALOG:
      return TRUE;

   case WM_COMMAND:
      if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
      {
         EndDialog(hDlg, LOWORD(wParam));
         return TRUE;
      }
      break;
   }
   return FALSE;
}

BOOL Init(HWND hWnd, BOOL bWindowed)
{
    // Direct3D-Objekt erzeugen
    lpD3D = Direct3DCreate9(D3D_SDK_VERSION);

    if(NULL == lpD3D)
    {
        // Fehler, D3D-Objekt wurde nicht erzeugt
        return FALSE;
    }

    // Parameter für den Modus festlegen
    D3DPRESENT_PARAMETERS PParams;
    ZeroMemory(&PParams,sizeof(PParams));

    PParams.SwapEffect       = D3DSWAPEFFECT_DISCARD;
    PParams.hDeviceWindow    = hWnd;
    PParams.Windowed         = bWindowed;

    PParams.BackBufferWidth  = 800;
    PParams.BackBufferHeight = 600;
    PParams.BackBufferFormat = D3DFMT_A8R8G8B8;

   PParams.EnableAutoDepthStencil = TRUE;
   PParams.AutoDepthStencilFormat = D3DFMT_D16;

    HRESULT hr;
   
    // Direct3D-Gerät anlegen
    if(FAILED(hr = lpD3D->CreateDevice(
                                 D3DADAPTER_DEFAULT,
                                 D3DDEVTYPE_HAL,
                                 hWnd,
                                 D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                 &PParams,
                                 &lpD3DDevice)))
    {
        // Fehler, Gerät kann nicht angelegt werden
        const char* Err = DXGetErrorDescription9(hr);
 
        DXTRACE_MSG(Err);


        return FALSE;
    }

       // Zeiger auf dem Hintergrundpuffer holen
    lpD3DDevice->GetBackBuffer(0,0,
                                 D3DBACKBUFFER_TYPE_MONO,
                                 &lpBackBuffer);


    return TRUE;
}

void CleanUp(void)
{

   if(lpD3DDevice!=NULL)
   {
      lpD3DDevice->Release();
   }
      if(lpD3D!=NULL)
   {
      lpD3D->Release();
   }

   if(cube!=NULL)
   {
      delete cube;
   }

   if(lpBackBuffer!=NULL)
   {
      lpBackBuffer->Release();
   }
}

void DrawScene(void)
{
         angle+=0.01f;
            // Beginn der Szene
            lpD3DDevice->Clear(0,0,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(255,255,255),1.0f,0);
   
         lpD3DDevice->BeginScene();

         D3DXMATRIX WorldMatrix;
            D3DXMATRIX TransMatrix;
         D3DXMATRIX RotationMatrix;
         
           
            // die Quelle für den Würfel setzen
         lpD3DDevice->SetStreamSource(0,cube->getVertexBuffer(),0,sizeof(CustomVertex));
            D3DXMatrixRotationY(&RotationMatrix, angle);

         //Würfel
            D3DXMatrixTranslation(&TransMatrix,-2.2f,0.0f,0.0f);
         D3DXMatrixMultiply(&WorldMatrix,&TransMatrix,&RotationMatrix);
           
            lpD3DDevice->SetTransform(D3DTS_WORLD,&WorldMatrix);


            lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,12);

}

void InitScene()
{
   lpD3DDevice->SetFVF(D3D_CUSTOMVERTEX);
       // Die Kamera wird an der Position (0.0f, 0.0f, -10.0f) aufgestellt
    D3DXMATRIX ViewMatrix;
    D3DXMatrixLookAtLH(&ViewMatrix,
                       &D3DXVECTOR3(0.0f, 30.0f,28.0f),
                       &D3DXVECTOR3(0.0f, 0.0f, 0.0f),
                       &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
   
    lpD3DDevice->SetTransform(D3DTS_VIEW,&ViewMatrix);


    // Sichtkegel definieren
    D3DXMATRIX ProjMatrix;
    D3DXMatrixPerspectiveFovLH(&ProjMatrix,
                               D3DX_PI/4,
                               (float)((float)800 / (float)600),
                               1.0f,
                               100.0f );

    lpD3DDevice->SetTransform(D3DTS_PROJECTION,&ProjMatrix);

    // Beleuchtung abschalten
    lpD3DDevice->SetRenderState(D3DRS_LIGHTING,FALSE);
}


_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 09.02.2005, 18:30    Titel: Antworten mit Zitat

Ich tippe auf folgende stelle:

CPP:
D3DXMatrixPerspectiveFovLH(&ProjMatrix,
                               D3DX_PI/4,
                               (float)((float)800 / (float)600),
                               1.0f,
                               100.0f );


Kenn leider den Befehl nicht auswendig (also parameter,...).
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 18:30    Titel: Antworten mit Zitat

Guck Dir mal die FensterClientgröße an und dann mal die Auflösung die Du erstellst, das kann nicht klappen.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 18:34    Titel: Antworten mit Zitat

OT:
Wie schnell in diesem Forum gepostet wird ist wirklich der Hammer.
Man könnte glatt denken manche Leute haben nichts besseres zu tun als alle 5 min nach neuen Posts zu schauen. Wink
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 18:47    Titel: Antworten mit Zitat

Sorry, abe ich steh aufm Schlauch. Kann mir einer die Stelle im Code zeigen?
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 18:48    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
Kenn leider den Befehl nicht auswendig (also parameter,...).


Parameter sind richtig. Aber seine Fenstergröße ist undefiniert aber er will ne Auflösung von 800x600 das knallt natürlich kräftigst im Fenstermodus wenn das Fenster zu klein ist.

PeaceKiller
Sind doch oft nur kleine Fragen Wink

Catscratch1
Bitte nicht mehr all den Code posten, der Initialisierungs und Renderingteil hätte gereicht. Und auf ZFX ist ne gute einführung in die Matrizenrechnung, da kannste mal D3DX vergessen und mal Hinter die Kullissen gucken Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 18:50    Titel: Antworten mit Zitat

Catscratch1 hat Folgendes geschrieben:
Sorry, abe ich steh aufm Schlauch. Kann mir einer die Stelle im Code zeigen?


Frage am Rande: Weißt Du überhaupt was Du da für 'nen Code vor Dir hast und was er macht?

CPP:
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);


Das 1. CW_USEDEFAULT durch 800 ersetzen.
Das 2. CW_USEDEFAULT durch 600 ersetzen.

Damit sollte der Großteil des Problemes behoben sein, natürlich wird dann noch immer Skaliert da du nicht die Clientgröße abfragst mit GetClientRect.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 18:55    Titel: Antworten mit Zitat

Genau das ist der Punkt,

das tu ich nämlich nicht.
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 19:11    Titel: Antworten mit Zitat

Ok dann geb ich Dir den Rat (Auch wenn das jetzt ein Schlag ins Gesicht ist): Scheiß auf DX und lern erst die Grundlagen!

So wie Du jetzt codest behinderst Du Dich nur selbst wie ein Autofahrer der Bremse mit Gaspedal verwechselt mit angezogener Handbremse in einem Wagen mit V8 Litermaschine. Das hat keinen Zweck.

Grundlagen zu C++: http://www.volkard.de/vcppkold/inhalt.html
Grundlagen zur Win32API: http://www.win-api.de/
Grundlagen zu Direct3D: http://www.zfx.info/Tutorials.php?ID=1

Das Direct3D Tutorial ist sehr zu Empfehlen da es vorallem auf die Matrizenrechnung eingeht. Kurz: Nieder mit D3DX.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 19:22    Titel: Antworten mit Zitat

Danke für die Tipps,

mein Problem ist nur C++.
Ich habe keine Ahnung von COM und versteh die WINAPI noch nicht. Aber liegt daran, dass ich mich erst seit einer Woche damit beschäftige. In C# ist das alles etwas einfacher.

Das seltsame ist, ich habe zwei Arten das Fenster zu erstellen. In der einen verzerrt es und in der anderen nicht.

Ich versteh nur nicht, warum das in dieser verzerrt!
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 19:23    Titel: Antworten mit Zitat

Lass erstmal den ganzen DX Kram weg, wenn Du die Basis nicht kapiert hast (Hier C++ und Win32API) kommst Du überhaupt nicht weiter, wie soll das später dann mit Pointer werden oder mit dem Laden von Grafiken? Denkste der D3DX-Schrott nimmt Dir jede Arbeit weg? Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 19:29    Titel: Antworten mit Zitat

Hast Recht.
Das hab ich jetzt beschlossen.
Bin froh, dass ich wenigstens das Entzerren jetzt hinbekommen habe!

Thx for help!

------------------
Ich will wieder mein ABAP!
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 19:31    Titel: Antworten mit Zitat

Catscratch1
Warte noch bis Sonntag, dann stell ich mein Tutorial online Wink Darin wird Stück für Stück erklärt wie man templates benutzt, die Win32API, Direct3D (incl. Device Lost ohne MANAGED), Keyboardmanagement, Exceptions, Debugsystem uvm Smile

Kurz: Professionelle Ebene ^^
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 19:40    Titel: Antworten mit Zitat

Alles klar.
Bin mal gespannt.

Wenn du das mal mit nem SAP WAS Server online Stellen willst, sag bescheid
Laughing

Weil das kann ich. Cool
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 09.02.2005, 21:25    Titel: Antworten mit Zitat

Catscratch1 hat Folgendes geschrieben:
Alles klar.
Bin mal gespannt.

Wenn du das mal mit nem SAP WAS Server online Stellen willst, sag bescheid
Laughing

Weil das kann ich. Cool


Was kann der server denn so? ^^
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum