 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 03.11.2005, 17:40 Titel: |
|
|
Wenn ich XYZ nehem funktinoirt es leider nicht. (JAHA ich habe das RHW aus dem Vertexformat genommen...) _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 03.11.2005, 17:50 Titel: |
|
|
Was funktioniert nicht? _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 03.11.2005, 18:14 Titel: |
|
|
es wird nix angezeigt wenn ich statt "XYZW" oder "XYZRHW" "ZXY" benutze. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
OLiver Super JLI'ler

Alter: 33 Anmeldedatum: 29.06.2003 Beiträge: 306 Wohnort: Jena Medaillen: Keine
|
Verfasst am: 03.11.2005, 18:21 Titel: |
|
|
Dann hast du irgendwas falsch gemacht. _________________ http://www.sieder25.org/ (Siedler 2 - Remake) |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 03.11.2005, 22:05 Titel: |
|
|
@Patrick
hallo? Könntets du dich bitte mal etwas genauer artikulieren???
Deine Antwort hört sich für mich ungefähr so an: "Tja, deine Vorahnung ist wahr, du hast was falsch gemacht, ist aber auch kein wunder weil du sowieso n Idiot bist."
@Oliver
Deine Antowrt ist auch nicht besser, wenns nciht funktinoiert hat man meistens was falsch gemacht...
wieder @ Patrick
Könntest du mir bitte sagen was an der Matriz berechnung falsch ist? Viewmatrix hab ich ja, mag ja sein das die falsch ist, deshalb hab ich die ja shcon extra im ersten Post beide aufgeführt, weil ich schon ahnte das es ein Matriz-Problem ist. Sag doch einfach,"Zeile so und so muss xyz heißen, da dann sollte es funktionieren". Damit wäre mir schnell geholfen, es gäb nicht so viele unnötige Posts. Ich hab wirklich bald das Gefühl das du einfach nur zeigen willst das du mal wieder der beste von allen bist, andere grundlos beleidigen willst, damit du vielleicht noch ein wenig besser dastehst und es nicht nötig hast andern Leuten zu helfen. Solche können wir hier im Forum nciht gebrauchen. Du solltest lieber versuchen durch Freundlihckeit und Hilfsbereitschaft auszufallen statt durch übertriebene Aroganz. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 03.11.2005, 22:19 Titel: |
|
|
CPP: | // ///////////////////////////////////////////////////////////////////////////
// PUBLIC
//
// Erstellt eine Orthogonale Projektion! ACHTUNG: NUR PROVISIORISCH!
// ///////////////////////////////////////////////////////////////////////////
void direct3d::createOrtho (unsigned long width, unsigned long height, float nearPlane, float farPlane)
{
direct3d_device_->SetRenderState (D3DRS_LIGHTING, false);
// Temporäre Matrix erstellen
matrix temp;
// Orthogonale Projektion erstellen
temp.zero();
temp._11 = 2.0f/static_cast<float>(width);
temp._22 = 2.0f/static_cast<float>(height);
temp._33 = 1.0f/(farPlane-nearPlane);
temp._43 = nearPlane/(nearPlane-farPlane);
temp._44 = 1.0f;
// Projektionsmatrix setzen
direct3d_device_->SetTransform (D3DTS_PROJECTION, reinterpret_cast<D3DMATRIX*>(&temp));
// Es muss eine frische Matrix her mit der wir die VIEW-Matrix erstellen können
temp.identity();
temp._22 = -1.0f;
temp._41 = -(static_cast<float>(width)*0.5f);
temp._42 = (static_cast<float>(height)*0.5f);
temp._43 = nearPlane+0.1f;
// Viewmatrix setzen
direct3d_device_->SetTransform (D3DTS_VIEW, reinterpret_cast<D3DMATRIX*>(&temp));
}
// ///////////////////////////////////////////////////////////////////////////
// PUBLIC
//
// Erstellt eine Projektionsmatrix!
// ///////////////////////////////////////////////////////////////////////////
void direct3d::createProjection (float fov, float aspect, float nearPlane, float farPlane)
{
if (abs<float>(farPlane-nearPlane) < epsilon<float>::value)
return;
if (abs<float>(sin<float>(deg2rad<float>(fov)/2)) < epsilon<float>::value)
return;
// Zwischenwerte berechnen
const float cosin = cos<float>(deg2rad<float>(fov)/2) / sin<float>(deg2rad<float>(fov)/2);
const float farinv = farPlane / (farPlane - nearPlane);
// Temporäres Objekt
matrix temp;
// Matrix verändern
temp._11 = aspect*cosin;
temp._22 = 1.0f*cosin;
temp._33 = farinv;
temp._34 = 1.0f;
temp._43 = -farinv*nearPlane;
temp._44 = 0.0f;
// Projektionsmatrix setzen
direct3d_device_->SetTransform (D3DTS_PROJECTION, reinterpret_cast<D3DMATRIX*>(&temp));
} |
Du wirst nur die Orthofunktion gebrauchen, diese setzt automatisch auch die VIEW-Matrix von der du dann später die ruhe hast.
So kannste dann rendern: CPP: | void menurect::render (long x, long y, unsigned long w, unsigned long h, unsigned long color)
{
// Testen ob VertexBuffer schon erstellt wurde
if (!vb_)
return;
// Temporärer Kram
static vertex rect[6]; // Eckpunkte des Rechtecks
static matrix trans; // Transformationsmatrix
// Das Rechteck erstellen
rect[0] = vertex ( 0.0f, 0.0f, 0.5f, color, 0.0f, 0.0f);
rect[1] = vertex ( static_cast<float>(w-6), 0.0f, 0.5f, color, 1.0f, 0.0f);
rect[2] = vertex ( static_cast<float>(w), 6.0f, 0.5f, color, 1.0f, 0.0f);
rect[3] = vertex ( static_cast<float>(w), static_cast<float>(h), 0.5f, color, 1.0f, 1.0f);
rect[4] = vertex ( 0.0f, static_cast<float>(h), 0.5f, color, 0.0f, 1.0f);
// Pointer für Speicherbereich
void* vertices = NULL;
// Daten kopieren
vb_->Lock (0, sizeof(rect), (void**)&vertices, D3DLOCK_DISCARD);
memcpy (vertices, rect, sizeof(rect));
vb_->Unlock ();
// Translationsmatrix berechnen
trans.translate (vector(static_cast<float>(x), static_cast<float>(y), 0.0f), true);
// Translation durchführen
core::direct3d::getInstance().direct3d_device_->SetTransform (D3DTS_WORLD, reinterpret_cast<D3DMATRIX*>(&trans));
// Alphablending aktivieren
core::direct3d::getInstance().setRenderState (D3DRS_ALPHABLENDENABLE, true);
core::direct3d::getInstance().setRenderState (D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
core::direct3d::getInstance().setRenderState (D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
core::direct3d::getInstance().setTextureStageState (0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
// Rechteck rendern
core::direct3d::getInstance().direct3d_device_->SetFVF (D3D_FVF);
core::direct3d::getInstance().direct3d_device_->SetStreamSource (0, vb_, 0, sizeof(vertex));
core::direct3d::getInstance().direct3d_device_->DrawPrimitive (D3DPT_TRIANGLEFAN, 0, 3);
// Einen schönen stylischen Rahmen erstellen
rect[0] = vertex ( 0.0f, 0.0f, 0.5f, 0xDF3F90FF, 0.0f, 0.0f);
rect[1] = vertex ( static_cast<float>(w-6), 0.0f, 0.5f, 0xDF3F90FF, 1.0f, 0.0f);
rect[2] = vertex ( static_cast<float>(w), 6.0f, 0.5f, 0xDF3F90FF, 1.0f, 1.0f);
rect[3] = vertex ( static_cast<float>(w), static_cast<float>(h), 0.5f, 0xDF3F90FF, 1.0f, 1.0f);
rect[4] = vertex ( 0.0f, static_cast<float>(h), 0.5f, 0xDF3F90FF, 1.0f, 1.0f);
rect[5] = vertex ( 0.0f, 0.0f, 0.5f, 0xDF3F90FF, 1.0f, 1.0f);
// Daten kopieren
vb_->Lock (0, sizeof(rect), (void**)&vertices, D3DLOCK_DISCARD);
memcpy (vertices, rect, sizeof(rect));
vb_->Unlock ();
// Rahmen rendern
core::direct3d::getInstance().direct3d_device_->DrawPrimitive (D3DPT_LINESTRIP, 0, 5);
// Alphablending deaktivieren
core::direct3d::getInstance().setRenderState (D3DRS_ALPHABLENDENABLE, false);
} |
Vertexstruktur: CPP: | // ###########################################################################
// Datei: vertex.h
// ###########################################################################
// Autor: Patrick Ullmann
// Erstellt: 24.09.2005
// Änderungen: 24.09.2005 (Patrick) Datei erstellt
// ###########################################################################
// Beschreibung: Allgemeine Vertexstruktur
#if !defined(__vertex_h__)
#define __vertex_h__
// I N C L U D E S ###########################################################
// Noch keine
// D E F I N I T I O N E N ###################################################
const unsigned long D3D_FVF = 0x002 | 0x040 | 0x100;
// S T R U K T U R E N #######################################################
class vertex
{
public:
// C'tor und D'tor
vertex (void)
: x(0.0f), y(0.0f), z(0.0f), color(0xFFFFFFFF), u(0.0f), v(0.0f) {}
vertex (float x_, float y_, float z_, unsigned long color_, float u_, float v_)
: x(x_), y(y_), z(z_), color(color_), u(u_), v(v_) {}
~vertex (void) {}
// Position
float x;
float y;
float z;
// Farbe
unsigned long color;
// Texturkoordinaten
float u;
float v;
};
#endif |
Fertig. _________________ '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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 03.11.2005, 22:40 Titel: |
|
|
ok, ich habs geschafft, mir die Marizen von dir auseinander zu fummeln, und mit meinen zu Vergleichen und folgendes gefunden:
CPP: | 1.0f/(1.0f, 0.1f) //falsch!
1.0f/(1.0f-0.1f)//richtig
0.1 //neraplane+0.1, falsch
0.2 //richtig
|
hatte halt definiert far plan=1 undnera plane =0.1
jetzt funktinoiert es recht gut. Beim ersten frag ich mich, wieso es keine fehler gab, ich wüsste nicht als was man das interpretiern sollte.
Aber wie es aussihet, funktinoiert jetzt alles mit den Matrizen perfekt, Skalieren und Verchieben hat prima geklappt. Dank an alle die mir geholfen haben, die Fehler zu finden. _________________ https://jonathank.de/games/ |
|
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
|