Geladene Datei wird nicht gerendert



  • Hi!
    Ich habe jetzt eine Klasse für meinen .3ds Loader geschrieben. Bis jetzt kann man nur die Vertices einlesen. Wenn der vertex Chunk erreicht wird wird von meinen Programm eine MessageBox angezeigt. Nur mein problem ist, dass die MessageBox 3 mal angezeigt wird. Wenn alles klappen würde dürfte sie eigentlich doch nur einmal angezeigt werden.
    Außerdem wird das Modell nicht geladen

    hier die Main Datei:

    #include "rbw3d.h"
    #include "RBWInit.h"
    #include "RBWModell.h"
    #include <windows.h>
    
    bool bDone = false;
    bool g_bIsActive = false;
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    	InitD3D spitz;
    	PDIRECT3DDEVICE9 g_pD3DDevice;
    	RBWModell modell("spaceship.3ds");
    	WNDCLASS wndclass;
    	MSG msg;
    	HWND hwnd;
    
    	wndclass.cbClsExtra = 0;
    	wndclass.cbWndExtra = 0;
    	wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wndclass.hInstance = hInstance;
    	wndclass.lpfnWndProc = WndProc;
    	wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    	wndclass.lpszMenuName = NULL;
    	wndclass.lpszClassName = "3D Game";
    
    	RegisterClass(&wndclass);
    
    	hwnd = CreateWindow("3D Game", "3D", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    		         NULL, NULL, hInstance, NULL);
    
    	ShowWindow(hwnd, SW_SHOW);
    
    	spitz.Init(hwnd);
    	g_pD3DDevice = spitz.GetDevice();
    	RBWMatrix mProjection;
    	RBWMatrix mRotation;
    	RBWMatrix mTranslation;
    	RBWMatrix mWorld;
    
    	g_pD3DDevice->SetFVF(D3DFVF_XYZ);
    
    	g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
    	g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE);
    	g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    
    	mProjection.Projection(0.7f, 1280/1024, 0.1f, 100.0f);
    
    	while(!bDone)
    	{
    		while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		};
    		if(g_bIsActive) {
    
    			mTranslation.Translation(RBWVector3(0.0f, 0.0f, 2.0f));
    			mRotation.RotationX(0.2f);
    			mWorld = mRotation * mTranslation;
    			g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
    
    			g_pD3DDevice->BeginScene();
    
    			g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(2, 0, 0), 1.0f, 0);
    
    			modell.Render(g_pD3DDevice);
    
    			g_pD3DDevice->EndScene();
    			g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
    
    		}
    
    	}
    
    	return 0;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    
          case WM_ACTIVATE: {
             g_bIsActive = bool(wParam);
             } break;
    
          case WM_KEYDOWN: {
             switch (wParam) {
                case VK_ESCAPE: {
                   bDone = true;
                   PostMessage(hwnd, WM_CLOSE, 0, 0);
                   return 0;
                   } break;
                }
             } break;
    
          case WM_DESTROY: {
             bDone = true;
             PostQuitMessage(0);
             return 1;
             } break;
    
          default: break;
          }
    	return DefWindowProc(hwnd, message, wParam, lParam);
    }
    

    Und hier die Moidellklasse:

    #include "RBWModell.h"
    
    RBWModell::RBWModell()
    {
    	this->m_AnzVertices = 0;
    	this->m_chunkID = 0;
    	this->m_chunkLength = 0;
    	this->m_mode = ios::in | ios::binary;
    
    };
    
    RBWModell::RBWModell(const char *cFilename)
    {
    	this->m_AnzVertices = 0;
    	this->m_chunkID = 0;
    	this->m_chunkLength = 0;
    	this->m_mode = ios::in | ios::binary;
    
    	m_file.open(cFilename, m_mode);
    
    	if(!m_file)
    	{
    		MessageBox(NULL, "Datei konnte nicht geöffnet werden", "Fehler", MB_OK | MB_ICONEXCLAMATION);
    	}
    
    	while(!m_file.eof())
    	{
    		ReadHeader();
    
    		switch(m_chunkID)
    		{
    		case 0x4d4d:
    			break;
    
    		case 0x3d3d:
    			break;
    
    		case 0x4000:
    			ReadName();
    			break;
    
    		case 0x4100:
    			break;
    
    		case 0x4110:
    			ReadVertices();
    			break;
    
    		default:
    			m_file.seekg(m_chunkLength - 6, ios_base::cur);
    		};
    	};
    	m_file.close();
    
    };
    
    void RBWModell::ReadName()
    {
    	int i = 0;
    	do
    	{
    		m_file.read((char*)&m_temp, 1);
    		m_name[i] = m_temp;
    		i++;
    	} while(m_temp != '\0' && i < 20);
    };
    
    void RBWModell::ReadVertices()
    {
    	m_file.read((char*)&m_AnzVertices, sizeof(unsigned short));
    
    	for(int i = 0; i < m_AnzVertices; ++i)
    	{
    		m_file.read((char*)&m_VertexList[i].x, sizeof(float));
    		m_file.read((char*)&m_VertexList[i].y, sizeof(float));
    		m_file.read((char*)&m_VertexList[i].z, sizeof(float));
    	};
    };
    
    void RBWModell::ReadHeader()
    {
    	m_file.read((char*)&m_chunkID, 2);
    	m_file.read((char*)&m_chunkLength, 4);
    };
    
    void RBWModell::Render(LPDIRECT3DDEVICE9 pDevice)
    {
    	pDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, m_AnzVertices/3, m_VertexList, sizeof(RBWVector3));
    };
    


  • Setze einfach ein Flag, wenn die MsgBox kommt. Bei nächstem Mal fragst du das ab, und wenn es gesetzt ist, dann zeigst du sie nicht wieder an.

    Bye, TGGC \-/



  • Danke für den tip!
    HAst du villeicht eine Idee, warum das Modell nicht gerendert wird? Habe ich irgend einen Fehler in der Ladaroutine?



  • ff_freak schrieb:

    HAst du villeicht eine Idee, warum das Modell nicht gerendert wird? Habe ich irgend einen Fehler in der Ladaroutine?

    'Nen Fehler hast du, jetzt musst du ihn bloß mal suchen...

    Bye, TGGC (Reden wie die Großen)



  • Ich habe jetzt die Faces ausgelesen und danach die Vertexstruktur mit den geordnet. Aber es kommt nur ein wirrer Haufen von Dreiecken heraus und von dem richtigen Modell ist nicht s zu sehen. Ich finde einfach keinen Fehler.

    Main:

    #include "rbw3d.h"
    #include "RBWInit.h"
    #include "RBWModell.h"
    #include <windows.h>
    
    bool bDone = false;
    bool g_bIsActive = false;
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    	InitD3D spitz;
    	PDIRECT3DDEVICE9 g_pD3DDevice;
    	RBWModell modell("spaceship.3ds");
    	WNDCLASS wndclass;
    	MSG msg;
    	HWND hwnd;
    
    	wndclass.cbClsExtra = 0;
    	wndclass.cbWndExtra = 0;
    	wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wndclass.hInstance = hInstance;
    	wndclass.lpfnWndProc = WndProc;
    	wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    	wndclass.lpszMenuName = NULL;
    	wndclass.lpszClassName = "3D Game";
    
    	RegisterClass(&wndclass);
    
    	hwnd = CreateWindow("3D Game", "3D", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    		         NULL, NULL, hInstance, NULL);
    
    	ShowWindow(hwnd, SW_SHOW);
    
    	spitz.Init(hwnd);
    	g_pD3DDevice = spitz.GetDevice();
    	RBWMatrix mProjection;
    	RBWMatrix mRotation;
    	RBWMatrix mTranslation;
    	RBWMatrix mWorld;
    
    	g_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE);
    
    	g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
    	g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE);
    	g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    
    	mProjection.Projection(1.6f, 1280/1024, 1.0f, 100.0f);
    
    	g_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection));
    
    	while(!bDone)
    	{
    		while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		};
    		if(g_bIsActive) {
    
    			mTranslation.Translation(RBWVector3(0.0f, 0.0f, 20.0f));
    			mRotation.RotationX(0.8f);
    			mWorld = mRotation * mTranslation;
    			g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
    
    			g_pD3DDevice->BeginScene();
    
    			g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(2, 0, 0), 1.0f, 0);
    
    			modell.Render(g_pD3DDevice);
    
    			g_pD3DDevice->EndScene();
    			g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
    
    		}
    
    	}
    
    	return 0;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    
          case WM_ACTIVATE: {
             g_bIsActive = bool(wParam);
             } break;
    
          case WM_KEYDOWN: {
             switch (wParam) {
                case VK_ESCAPE: {
                   bDone = true;
                   PostMessage(hwnd, WM_CLOSE, 0, 0);
                   return 0;
                   } break;
                }
             } break;
    
          case WM_DESTROY: {
             bDone = true;
             PostQuitMessage(0);
             return 1;
             } break;
    
          default: break;
          }
    	return DefWindowProc(hwnd, message, wParam, lParam);
    }
    

    Modell:

    #include "RBWModell.h"
    
    RBWModell::RBWModell()
    {
    	this->m_AnzVertices = 0;
    	this->m_chunkID = 0;
    	this->m_chunkLength = 0;
    	this->m_mode = ios::in | ios::binary;
    
    };
    
    RBWModell::RBWModell(const char *cFilename)
    {
    	this->m_AnzVertices = 0;
    	this->m_chunkID = 0;
    	this->m_chunkLength = 0;
    	this->m_mode = ios::in | ios::binary;
    
    	m_file.open(cFilename, m_mode);
    
    	if(!m_file)
    	{
    		MessageBox(NULL, "Datei konnte nicht geöffnet werden", "Fehler", MB_OK | MB_ICONEXCLAMATION);
    	}
    
    	while(!m_file.eof())
    	{
    		ReadHeader();
    
    		switch(m_chunkID)
    		{
    		case 0x4d4d:
    			break;
    
    		case 0x3d3d:
    			break;
    
    		case 0x4000:
    			ReadName();
    			break;
    
    		case 0x4100:
    			break;
    
    		case 0x4110:
    			ReadVertices();
    			break;
    
    		case 0x4120:
    			ReadPolygons();
    			break;
    
    		default:
    			m_file.seekg(m_chunkLength - 6, ios_base::cur);
    		};
    	};
    	m_file.close();
    
    };
    
    void RBWModell::ReadName()
    {
    	int i = 0;
    	do
    	{
    		m_file.read((char*)&m_temp, 1);
    		m_name[i] = m_temp;
    		i++;
    	} while(m_temp != '\0' && i < 20);
    };
    
    void RBWModell::ReadVertices()
    {
    	m_file.read((char*)&m_AnzVertices, sizeof(unsigned short));
    
    	for(int i = 0; i < m_AnzVertices; ++i)
    	{
    		m_file.read((char*)&m_VertexList[i].vPosition.x, sizeof(float));
    		m_file.read((char*)&m_VertexList[i].vPosition.y, sizeof(float));
    		m_file.read((char*)&m_VertexList[i].vPosition.z, sizeof(float));
    	};
    };
    
    void RBWModell::ReadHeader()
    {
    	m_file.read((char*)&m_chunkID, 2);
    	m_file.read((char*)&m_chunkLength, 4);
    };
    
    void RBWModell::Render(LPDIRECT3DDEVICE9 pDevice)
    {
    
    	if(FAILED(pDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, m_AnzPolygons, m_CompVList, sizeof(VERTEX))))
    	{
    		MessageBox(NULL, "Geht nicht", "Ne", MB_OK);
    	};
    };
    
    void RBWModell::ReadPolygons()
    {
    	m_file.read((char*)&m_AnzPolygons, sizeof(unsigned short));
    
    	for(int i = 0; i < m_AnzPolygons; ++i)
    	{
    		m_file.read((char*)&m_PolygonList[i].a, sizeof(unsigned short));
    		m_file.read((char*)&m_PolygonList[i].b, sizeof(unsigned short));
    		m_file.read((char*)&m_PolygonList[i].b, sizeof(unsigned short));
    		m_file.read((char*)&m_faceFlags, sizeof(unsigned short));
    	};
    
    	for(int j = 0; j < m_AnzPolygons; ++j)
    	{
    		m_CompVList[j].vPosition.x = m_VertexList[m_PolygonList[j].a].vPosition.x;
    		m_CompVList[j].vPosition.y = m_VertexList[m_PolygonList[j].a].vPosition.y;
    		m_CompVList[j].vPosition.z = m_VertexList[m_PolygonList[j].a].vPosition.z;
    
    		m_CompVList[j+1].vPosition.x = m_VertexList[m_PolygonList[j].b].vPosition.x;
    		m_CompVList[j+1].vPosition.y = m_VertexList[m_PolygonList[j].b].vPosition.y;
    		m_CompVList[j+1].vPosition.z = m_VertexList[m_PolygonList[j].b].vPosition.z;
    
    		m_CompVList[j+2].vPosition.x = m_VertexList[m_PolygonList[j].c].vPosition.x;
    		m_CompVList[j+2].vPosition.y = m_VertexList[m_PolygonList[j].c].vPosition.y;
    		m_CompVList[j+2].vPosition.z = m_VertexList[m_PolygonList[j].c].vPosition.z;
    
    	};
    };
    

    EDIT: Bei der ReadPolygons Methode muss irgend ein Fehler sein. Ich habe keine Ahnung, wie ich die Vertices ordnen soll, damit sie richtig gerendert werden.



  • Ordnen musst du die i.A. garnicht.

    Bye, TGGC \-/



  • Hast du ne Idee, wo der Fehler liegt? Bei mir kommt immer nur ein riesen Haufen von Dreiécken heraus...



  • ich hab jetzt keine Ahnugn vom 3ds format aber mir is sowas bei nem md2 loader passiert, da hab ich das Dateiformat ein wenig "missverstanden", dadurch waren die
    vertices natürlich falsch;

    es könnte sein, dass das auch dir passiert ist, wenn du einen Haufen an Dreiecken rausbringst...

    Vielleicht nochmal die Format-Beschreibung aufschlagen...



  • Ich habe jetzt noch mal was an der Modell Datei geändert, aber es funktioniert immer noch nicht. DrawIndexedPrimitiveUP liefert irgend einen Fehler zurück.

    #include "RBWModell.h"
    
    RBWModell::RBWModell()
    {
    	this->m_AnzVertices = 0;
    	this->m_chunkID = 0;
    	this->m_chunkLength = 0;
    	this->m_mode = ios::in | ios::binary;
    
    };
    
    RBWModell::RBWModell(const char *cFilename)
    {
    	this->m_AnzVertices = 0;
    	this->m_chunkID = 0;
    	this->m_chunkLength = 0;
    	this->m_mode = ios::in | ios::binary;
    
    	m_file.open(cFilename, m_mode);
    
    	if(!m_file)
    	{
    		MessageBox(NULL, "Datei konnte nicht geöffnet werden", "Fehler", MB_OK | MB_ICONEXCLAMATION);
    	}
    
    	while(!m_file.eof())
    	{
    		ReadHeader();
    
    		switch(m_chunkID)
    		{
    		case 0x4d4d:
    			break;
    
    		case 0x3d3d:
    			break;
    
    		case 0x4000:
    			ReadName();
    			break;
    
    		case 0x4100:
    			break;
    
    		case 0x4110:
    			ReadVertices();
    			break;
    
    		case 0x4120:
    			ReadPolygons();
    			break;
    
    		default:
    			m_file.seekg(m_chunkLength - 6, ios_base::cur);
    		};
    	};
    	m_file.close();
    
    };
    
    void RBWModell::ReadName()
    {
    	int i = 0;
    	do
    	{
    		m_file.read((char*)&m_temp, 1);
    		m_name[i] = m_temp;
    		i++;
    	} while(m_temp != '\0' && i < 20);
    };
    
    void RBWModell::ReadVertices()
    {
    	m_file.read((char*)&m_AnzVertices, sizeof(unsigned short));
    
    	for(int i = 0; i < m_AnzVertices; ++i)
    	{
    		m_file.read((char*)&m_VertexList[i].vPosition.x, sizeof(float));
    		m_file.read((char*)&m_VertexList[i].vPosition.y, sizeof(float));
    		m_file.read((char*)&m_VertexList[i].vPosition.z, sizeof(float));
    	};
    };
    
    void RBWModell::ReadHeader()
    {
    	m_file.read((char*)&m_chunkID, 2);
    	m_file.read((char*)&m_chunkLength, 4);
    };
    
    void RBWModell::Render(LPDIRECT3DDEVICE9 pDevice)
    {
    
    	if(FAILED(pDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, m_AnzVertices, 1, m_PolygonList, D3DFMT_INDEX32, m_VertexList, sizeof(VERTEX))));
    	{
    		MessageBox(NULL, "Geht nicht", "Ne", MB_OK);
    	};
    };
    
    void RBWModell::ReadPolygons()
    {
    	m_file.read((char*)&m_AnzPolygons, sizeof(unsigned short));
    
    	for(int i = 0; i < m_AnzPolygons; ++i)
    	{
    		m_file.read((char*)&m_PolygonList[i].a, sizeof(unsigned short));
    		m_file.read((char*)&m_PolygonList[i].b, sizeof(unsigned short));
    		m_file.read((char*)&m_PolygonList[i].b, sizeof(unsigned short));
    		m_file.read((char*)&m_faceFlags, sizeof(unsigned short));
    	};
    
    };
    


  • ff_freak schrieb:

    Ich habe jetzt noch mal was an der Modell Datei geändert, aber es funktioniert immer noch nicht. DrawIndexedPrimitiveUP liefert irgend einen Fehler zurück.

    Die Stimmen aus dem Jenseits sagen mir: "Mach weiter!".

    Bye, TGGC \-/



  • Hi!
    Ich finde den Fehler einfach nicht. Ich weiß nicht genau, wie ich das jetzt rendern soll. Kannst du mir nicht sagen, wo der Fehler liegt?

    #include "RBWModell.h"
    
    RBWModell::RBWModell()
    {
    	this->m_AnzVertices = 0;
    	this->m_chunkID = 0;
    	this->m_chunkLength = 0;
    	this->m_mode = ios::in | ios::binary;
    
    };
    
    RBWModell::RBWModell(const char *cFilename)
    {
    	this->m_AnzVertices = 0;
    	this->m_chunkID = 0;
    	this->m_chunkLength = 0;
    	this->m_mode = ios::in | ios::binary;
    
    	m_file.open(cFilename, m_mode);
    
    	if(!m_file)
    	{
    		MessageBox(NULL, "Datei konnte nicht geöffnet werden", "Fehler", MB_OK | MB_ICONEXCLAMATION);
    	}
    
    	while(!m_file.eof())
    	{
    		ReadHeader();
    
    		switch(m_chunkID)
    		{
    		case 0x4d4d:
    			break;
    
    		case 0x3d3d:
    			break;
    
    		case 0x4000:
    			ReadName();
    			break;
    
    		case 0x4100:
    			break;
    
    		case 0x4110:
    			ReadVertices();
    			break;
    
    		case 0x4120:
    			ReadPolygons();
    			break;
    
    		default:
    			m_file.seekg(m_chunkLength - 6, ios_base::cur);
    		};
    	};
    	m_file.close();
    
    };
    
    void RBWModell::ReadName()
    {
    	int i = 0;
    	do
    	{
    		m_file.read((char*)&m_temp, 1);
    		m_name[i] = m_temp;
    		i++;
    	} while(m_temp != '\0' && i < 20);
    };
    
    void RBWModell::ReadVertices()
    {
    	m_file.read((char*)&m_AnzVertices, sizeof(unsigned short));
    
    	for(int i = 0; i < m_AnzVertices; ++i)
    	{
    		m_file.read((char*)&m_VertexList[i].vPosition.x, sizeof(float));
    		m_file.read((char*)&m_VertexList[i].vPosition.y, sizeof(float));
    		m_file.read((char*)&m_VertexList[i].vPosition.z, sizeof(float));
    	};
    };
    
    void RBWModell::ReadHeader()
    {
    	m_file.read((char*)&m_chunkID, 2);
    	m_file.read((char*)&m_chunkLength, 4);
    };
    
    void RBWModell::Render(LPDIRECT3DDEVICE9 pDevice)
    {
    
    };
    
    void RBWModell::ReadPolygons()
    {
    	m_file.read((char*)&m_AnzPolygons, sizeof(unsigned short));
    
    	for(int i = 0; i < m_AnzPolygons; ++i)
    	{
    		m_file.read((char*)&m_PolygonList[i].a, sizeof(unsigned short));
    		m_file.read((char*)&m_PolygonList[i].b, sizeof(unsigned short));
    		m_file.read((char*)&m_PolygonList[i].b, sizeof(unsigned short));
    		m_file.read((char*)&m_faceFlags, sizeof(unsigned short));
    	};
    
    };
    

    PS: Die Render Methode ist absichtig leer, weil da sowieso immer ein Fehler auftaucht.



  • Titel schrieb:

    Geladene Datei wird nicht gerendert

    ff_freak schrieb:

    PS: Die Render Methode ist absichtig leer, weil da sowieso immer ein Fehler auftaucht.

    😃 👍



  • Klingt komisch, ist aber so...:D

    Nein, also ich habe schon alles mögliche in der Rendermethode ausprobiert(siehe ältere Posts) und da kam immer nur ein Wirr Warr von Dreiecken raus, deshalb wollte ich jetzt mal wissen, wie ich die Render-Methode aufbauen soll...


Anmelden zum Antworten