|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RebornX JLI'ler
Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 24.05.2008, 08:23 Titel: Rotations-Problem |
|
|
Hi,
ich bin dabei tetris in 3D zu programmieren, allerdings habe ich hier ein kleines Problem. Wenn ein würfel fällt soll man ihn ja auch mit der [pfeil nach oben] taste drehen können um ihn richtig positionieren zu können, allerdings ist bei mir der fall, dass der würfel zwar richtig fällt, aber wenn ich ihn drehe (mit D3DXMatrixRotationZ), verschiebt sich der würfel auch an eine andere stelle ^^
Dh. sobald ich die [pfeil nach oben]-taste drücke, verschwindet der Würfel von seiner aktuellen position und wird weiter rechts oder links oder oben oder unten (kommt halt drauf an um welcher Achse ich das drehe) etwas gedreht dargestellt
Dabei soll man den Würfel auf seiner aktuellen position drehen können^^
GameLoop:
CPP: | else
{
Cinptm.getKeyboardInput(keys);
speed = 0.05f;
stop = -6.5f;
rotationquestion = 0;
//AddText(keys);
if(keys[DIK_LEFT])
{
if (x != 1)
{
x--;
xposition -= 0.25f;
}
}
else if(keys[DIK_RIGHT])
{
if (x != 20)
{
x++;
xposition += 0.25f;
}
}
else if(keys[DIK_UP])
{
rotationquestion = 1;
}
//speed erhöhen
else if(keys[DIK_DOWN] && yposition > stop)
{
yposition -= speed;
y = static_cast<int>(abs(yposition) / 0.25f);
}
//Collision erkennen
if(feld[x-1][y-1] == 1)
{
stop += (y-1)*0.25;
//Addfloat(y-1);
}
//schritte zählen und y position versetzen
if(yposition > stop)
{
yposition -= speed;
y = static_cast<int>(abs(yposition) / 0.25f);
//AddInt(feld[7][20]);
//Addfloat(position);
}
D3DXMATRIX TransMatrix, RotationMatrix, WorldMatrix;
D3DXMATRIX IdentityMatrix;
Direct3D.BeginScene();
// Das Vertex-Format festlegen
Direct3D.GetDevice()->SetFVF(D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE );
Direct3D.GetDevice()->SetStreamSource(0, VB_WALL, 0, sizeof(CustomVertex));
D3DXMatrixIdentity(&IdentityMatrix);
Direct3D.GetDevice()->SetTransform(D3DTS_WORLD, &IdentityMatrix);
Direct3D.GetDevice()->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 10);
// Das Vertex-Format festlegen
Direct3D.GetDevice()->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE );
Direct3D.GetDevice()->SetStreamSource(0, VB_BUTTON, 0, sizeof(CustomVertex));
D3DXMatrixIdentity(&IdentityMatrix);
Direct3D.GetDevice()->SetTransform(D3DTS_WORLD, &IdentityMatrix);
Direct3D.GetDevice()->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 4);
// Das Vertex-Format festlegen
Direct3D.GetDevice()->SetFVF(D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE );
Direct3D.GetDevice()->SetStreamSource(0, VB_STONES, 0, sizeof(CustomVertex));
D3DXMatrixTranslation(&TransMatrix, xposition, yposition, 0.0f);
D3DXMatrixIdentity(&RotationMatrix);
if(rotationquestion == 1)
{
D3DXMatrixRotationZ(&RotationMatrix, 1.0f);
}
D3DXMatrixMultiply(&WorldMatrix, &TransMatrix, &RotationMatrix);
Direct3D.GetDevice()->SetTransform(D3DTS_WORLD, &WorldMatrix);
Direct3D.GetDevice()->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 10);
Direct3D.EndScene();
} |
Den kompletten Source Code + compilierte exe gibts hier (59,3KB):
http://rebornx.re.funpic.de/tetris_3D.rar _________________ Besucht meine Seite:
www.cpparchiv.dl.am |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 24.05.2008, 11:04 Titel: |
|
|
Hi
Rotation erfolg IMMER um den Ursprung. Stell dir einen Kreis vor mit dem Mittelpunkt im Ursprung:
(Der Punkt im Mittelpunkt bleibt gleich, alle anderen Punkte bewegen sich auf einer Kreisbahn die jeweils den Ursprung als Zentrum hat).
Der Mittelpunkt wird theoretisch um sich selbst gedreht, aber da ein Punkt keine Ausrichtung hat, merkt man das nicht. Jetzt überleg dir, du schiebst dein Objekt aus dem Mittelpunkt heraus und drehst dann. Es wird logischerweise seine Position verändern (so wie die Eckpunkte des Vierecks auch ihre Position verändern). _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
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
|