 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 18.04.2005, 16:17 Titel: |
|
|
nee, glaub ich net. Im Buch werden die Wände nicht als Rechteck jeweils einzeln definiert; sondern eine Wand besteht aus acht Quadraten. Es existieren nämlich net vier Wände extra, sonder nur ein einziges Quadrat( ), das insgesamt 32 mal pro Schleifendurchlauf gerendert wird:
erst wird das Quadrat einmal gerendert, dann jeweils 8 mal um sich selber nach rechts transliert wird, darauf 4 mal um 90° um die Y-Achse rotiert und wieder 8 mal gerendert wird...
Also: CPP: | for(int i=0;i<4;++i)
{
for(int j=0;j<8;++j)
{
Translation um sich selber nach rechts;
}
Rotaion 90° um die Y-Achse;
} |
edit:
zu deiner Frage: normalerweise müsstest die Y-Werte dieses Quadrats höher machen. In diesem Bsp. geht das IMHO glaub ich nur sehr schwer, weil das Quadrat ja genau die richtigen Werte für die Texturierung hat. Also musst du dafür sorgen, wenn dus nicht unnötig schwer haben willst , dass jeweils X- und Y-Achse um den selben Wert erhöht werden. So wird zwar deine Sxybox größer, aber das macht ja nix(wenn schon, dann musst du das Quadrat eben nur 6 mal oder so von jeder Seite render.
Gruß DirectXer, der natürlich auch gerne hilft
PS: Puh, das war viel...  |
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 19.04.2005, 11:59 Titel: |
|
|
DirectXer: XYZ sind von TU/TV voll unabhängig? Merkst du dich noch
Du kannst die Vertexkoordinaten verschieben wie du willst. _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 19.04.2005, 14:53 Titel: |
|
|
schon, aber da das Muster als Quadrat gespeichert ist, würde es schon Sch***e aussehen, wenn man die Ziegelsteine nur an der Y-Achse streckt. Außerdem gibts ja auch einen Grund, wieso Christian im Buch die Wand nicht direkt als Rechteck rendert, sondern nur eins als Quadrat, welches dann 32x gerendert wird
Gruß DirectXer  |
|
Nach oben |
|
 |
Lukash Mini JLI'ler
Alter: 32 Anmeldedatum: 09.04.2005 Beiträge: 35
Medaillen: Keine
|
Verfasst am: 19.04.2005, 15:22 Titel: Hallo! |
|
|
Gibt es denn keine möglichkeit, die Einfach wäre?
Ich würde einfach die Eckpunkte der Wand verschieben.
-Mit welchem Eckpunkt fängt denn das Vertex-Format an?
Beispiel:
CPP: | CustomVertex WallVertices[] =
{
{ -4.0f, -4.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 4.0f }, //Eckpunkt Links oben?
{ -4.0f, 4.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f },
{ 4.0f, -4.0f, 0.0f, 0.0f, 0.0f, -1.0f, 4.0f, 4.0f },
{ 4.0f, 4.0f, 0.0f, 0.0f, 0.0f, -1.0f, 4.0f, 0.0f },
}; |
|
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 19.04.2005, 15:27 Titel: |
|
|
das kommt auf dein Vertex-Format an(das ist die Struktur CustomVertex, die du selber geschrieben hast) Ich nehme an, du hast den aufbau so:
CustomVertex Vertices[]=
{
{ x, y, z, nx, ny, nz, tu, tv};
}
also musst du die x- und y-Werte(die, die ich fett makiert hab) um den gleich Wert erhöhen. |
|
Nach oben |
|
 |
Lukash Mini JLI'ler
Alter: 32 Anmeldedatum: 09.04.2005 Beiträge: 35
Medaillen: Keine
|
Verfasst am: 19.04.2005, 15:30 Titel: Danke! |
|
|
Danke,Danke,Danke!!!
Es klappt,aber die Textur wird auseinander gezerrt.
-Kennt jemand eine kostenlosen Modell-Editor mit dem Man X-Modelle erstellen kann  |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 19.04.2005, 15:50 Titel: |
|
|
das mit dem Textur-Auseinander zerren hab ich ja oben beschrieben, wie du das vermeiden kannst. Du kannst aber auch(was allerdings ein bisschen anspruchsvoller ist) das erste Quadrat in der größe behalten und die Mauer dann jeweils einmal komplett rendern dann die Y-Achse erhöhen und die Mauer dadrüber noch mal rendern. Dann bleibt die Textur schön klein. Wenn du wissen willst wie das geht, dann poste ich das heute abend vielleicht nochmal. Muss jetzt aber weg.
Gruß DirectXer, der jetzt zum Friseur geht |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
 |
HomeLess_PunkDrummer JLI Master Trainee

Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 19.04.2005, 17:07 Titel: |
|
|
Ja man, Jona hat recht! gmax ist geil, aber nur wenn du die entsprechenden Exporter hast um nach .x erxportiern zu können.
Siehe dazu das hier. _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
 |
Lukash Mini JLI'ler
Alter: 32 Anmeldedatum: 09.04.2005 Beiträge: 35
Medaillen: Keine
|
Verfasst am: 20.04.2005, 17:53 Titel: Frage! |
|
|
Hi,
Noch ne Frage.Wo bekommt man gmax denn her.Der Link den du gegeben hast da muss man sich erst anmelden. Kann Irgendjemand
die vieleicht auf nen Server laden.Ich hab DSL ,dann kann ich die runterladen.
Gibt es ne möglichkeit,den Mauszeiger in meiner Demo zu ändern,so dass ich meinen eigenen benutzen kann???
Gruss Lukas
PS.: DirectXer: Kannst du den Code mal posten,wenn du vom Friseur zurück bist?  |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 20.04.2005, 18:44 Titel: |
|
|
code kommt gleich, erst mal zu deiner 2. Frage:
bei deiner CreateMainWindow-Funktion kann man ein Handle auf deinen Zeiger übergeben. Wie das geht müsste im Buch auf S.195 bei der Zeile
[...]
HICON hIcon
HCURSOR hCursor;
HBRUSH hbrBackground;
[...]
stehen. Du musst dann mit LoadCursor() den Cursor laden, wies geht steht in der MSDN |
|
Nach oben |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 20.04.2005, 19:39 Titel: |
|
|
ok, sorry, dass es so lange gedauert hat, hab heute net viel Zeit. d.H. hab jetzt keine Zeit, dass eleganter zu machen. Eigentlich musst du nur die ersten for-Schleifen in der Scene.cpp Render-Methode Kopieren, so oft du willst, um die Mauer höher zu haben:
CPP: | int j,i;
// bei jedem durchlauf wird um 90 Grad gedreht
for(j=0;j<4;j++)
{
D3DXMatrixRotationAxis(&RotMatrix,&AxisY,90.0f * D3DX_PI / 180.0f * j);
// da die Wand 8 Einheiten Breit ist und der Boden 64 muss die
// Wand auf jeder Seite 8 mal gerendert werden
for(i=0;i<8;i++)
{
D3DXMatrixTranslation(&TransMatrix,8 * i - 28.0f,-1.0f, 32.0f);
D3DXMatrixMultiply(&WorldMatrix,&TransMatrix,&RotMatrix);
// berechnete Welt Matrix setzen
m_lpD3DDevice->SetTransform(D3DTS_WORLD,&WorldMatrix);
// die Wand als Trianglestrip rendern - es werden zwei Dreiecke gezeichnet
m_lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
}
}
for(j=0;j<4;j++)
{
D3DXMatrixRotationAxis(&RotMatrix,&AxisY,90.0f * D3DX_PI / 180.0f * j);
// da die Wand 8 Einheiten Breit ist und der Boden 64 muss die
// Wand auf jeder Seite 8 mal gerendert werden
for(i=0;i<8;i++)
{
D3DXMatrixTranslation(&TransMatrix,8 * i - 28.0f,7.0f, 32.0f);
D3DXMatrixMultiply(&WorldMatrix,&TransMatrix,&RotMatrix);
// berechnete Welt Matrix setzen
m_lpD3DDevice->SetTransform(D3DTS_WORLD,&WorldMatrix);
// die Wand als Trianglestrip rendern - es werden zwei Dreiecke gezeichnet
m_lpD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);
}
} |
bei Fragen, schreib mir ne PN. Das geht dann schneller
Gruß DirectXer |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 20.04.2005, 21:39 Titel: |
|
|
Für jede Fläche ein Renderaufruf, gehts denn noch langsamer O.o _________________ "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 |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 21.04.2005, 14:32 Titel: |
|
|
hab ja gesagt, no Time for eleganter
Allerdings, du hast schon recht, is net gerade ne schöne Lösung
Aber sie is leicht zu verstehen. Ich nehme an, weitere Nachforschungen kann Luaksh damit selber anstellen.
Gruß DirectXer  |
|
Nach oben |
|
 |
Lukash Mini JLI'ler
Alter: 32 Anmeldedatum: 09.04.2005 Beiträge: 35
Medaillen: Keine
|
Verfasst am: 22.04.2005, 15:36 Titel: Funktioniert nicht :-( !!! |
|
|
Es klappt nicht.
Wenn ich die Funktion LoadCursorFromFile() ausführe klappt es nicht.
Mein Code:
CPP: | // Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
WNDCLASSEX wndClass =
{
sizeof(WNDCLASSEX), // Größe angeben
CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW, // Standardstile
MessageHandler, // Callback-Funktion
0, // Zusätzliche Angaben
0, // nicht benötigt
hInstance, // Anwendungsinstanz
LoadIcon(NULL, IDI_WINLOGO), // Windows-Logo
LoadCursorFromFile(C:\Cursor.cur), // Mein Cursor
(HBRUSH)GetStockObject(WHITE_BRUSH), // Weißer Pinsel
NULL, // kein Menü
"WindowClass", // Der Name der Klasse
LoadIcon(NULL, IDI_WINLOGO) // Windows Logo
};
|
Kann mir jemand helfen??? |
|
Nach oben |
|
 |
|
|
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
|