Aktuelle Zeit: 08.01.2025, 20:49

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Arbeiten mit Texturen
BeitragVerfasst: 30.04.2007, 11:31 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Hi,

ich komme mit dem IrrlichtManual noch nicht ganz so gut zurecht
und deshalb habe ich hier mal ein neues Thread aufgemacht. :)

Weiß jemand wie ich aus einem Handle einer Texture die Breite und Höhe abfragen kann?

So in etwa meine ich es:

Code:
video::ITexture* hImg;
// "hImg.width" oder so ähnlich ^^

Gruß LukasBanana

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Zuletzt geändert von LukasBanana am 13.05.2007, 11:46, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 30.04.2007, 11:35 
Offline

Registriert: 12.04.2007, 11:47
Beiträge: 108
da gibt man ITexture in der hilfe datei ein und tada da hat man dann alle möglichen befehle....mein gott......

naja egal hier du faulpelz:


ITexture* blubb;
irr::s32 width = blubb->getOriginalSize().Width;
irr::s32 height = blubb->getOriginalSize().Height;


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 01.05.2007, 13:24 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Ich bin zwar kein Gott, aber Danke trotzdem :mrgreen:

Gruß LukasBanana

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13.05.2007, 11:49 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Also ich wollte jetzt erst mal auch ein bischen mit 2D Grafiken arbeiten bevor ich so richtig mit 3D anfange.

Ich hab mal in dem Manual gesucht aber leider irgendwie nichts gefunden:
Wie kann ich denn ein 2DImage (letztendlich auch eine texture) Rotieren bzw. die Farbe angeben die Transparent sein soll (die Farbe die ausgeblendet werden soll)

Kann mir da jemand helfen, oder wenigstens schreiben wo ich das im Manual finde?!

Danke :)

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13.05.2007, 13:04 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Anscheinend kann Irrlicht keine 2D-Grafiken gedreht darstellen.
Lightfeather kann das.
Du kannst natürlich dir die Funktionen selber schreiben, indem du das Bild als 2 Dreiecke renderst, das hab ich mal gemacht, hab aber den Code nicht mehr...
Die transparente Farbe kannst du dann auch als tatsächlich transparent in die Datei speichern, zB png (und für Maskierung auch gif) unterstützen das.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13.05.2007, 15:54 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
WAS? So ne gute GrafikEngine und die kann nicht selber 2D Bilder rotieren?! :?
Das ist aber ärgerlich, und die Transparentz kann man auch nicht direkt als Parameter an eine Funktion übergeben?!

Aber wie genau soll ich denn ein Bild als zwei Dreiecke rendern? Ich hab schon Probleme das mein C++ andauernd wegen der Typen Unterscheidung 'mekert'. Und dann sollen die zwei Dreiecke keine Z-Achse haben.

Gibt es denn keine andere Möglichkeit?

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13.05.2007, 17:01 
Offline

Registriert: 08.04.2007, 16:55
Beiträge: 115
du könntest dir einen rotationscode selberschreiben, der ein image dreht...
(ist ja nicht so schwer.. für jeden pixel des neune Bildes den texcoordvector mit ner 2D rotationsmatrix mutiplizieren, von der entsprechenden Position des alten image sampeln und fertig..) aber das ist durchaus dumm...


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13.05.2007, 17:34 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
im englischen forum haben das schon ein paar leute gemacht..
bin zu faul zu suchen.. machs selber :P ;)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13.05.2007, 18:37 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Hab meinen Code doch wieder gefunden.
Sollte so funktionieren:
Code:
void draw2DImage(video::ITexture *image, core::position2d<s32> center, core::dimension2d<s32> dimension, float rotation = 0, bool alphachannel = true, bool addcolor = false, bool mirrorx = false, bool mirrory = false)
{
    video::SMaterial tmpmat;
    tmpmat.Lighting = false;
    tmpmat.BackfaceCulling = false;
    tmpmat.ZBuffer = false;
    tmpmat.ZWriteEnable = false;
    tmpmat.Texture1 = image;

    if (alphachannel)
    tmpmat.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
    if (addcolor)
    tmpmat.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;

    driver->setMaterial(tmpmat);

    float centerx = (-(ScreenWidth/2) + center.X) * 2;
    float centery = -(-(ScreenHeight/2) + center.Y) * 2;

    float halfdimx = float(dimension.Width);
    float halfdimy = float(dimension.Height);

    int left = (!mirrorx)?(0) : (1);
    int top = (!mirrory)?(0) : (1);


    video::S3DVertex vertices[4];
    vertices[0] = video::S3DVertex((centerx - cos(rotation / 180 * M_PI) * halfdimx + sin(rotation / 180 * M_PI) * halfdimy) / (ScreenWidth),
                                   (centery + sin(rotation / 180 * M_PI) * halfdimx + cos(rotation / 180 * M_PI) * halfdimy) / (ScreenHeight), 0, 0, 0, 0, video::SColor(255, 255, 255, 255), left, top);
    vertices[1] = video::S3DVertex((centerx + cos(rotation / 180 * M_PI) * halfdimx + sin(rotation / 180 * M_PI) * halfdimy) / (ScreenWidth),
                                   (centery - sin(rotation / 180 * M_PI) * halfdimx + cos(rotation / 180 * M_PI) * halfdimy) / (ScreenHeight), 0, 0, 0, 0, video::SColor(255, 255, 255, 255), (left+1)%2, top);
    vertices[2] = video::S3DVertex((centerx + cos(rotation / 180 * M_PI) * halfdimx - sin(rotation / 180 * M_PI) * halfdimy) / (ScreenWidth),
                                   (centery - sin(rotation / 180 * M_PI) * halfdimx - cos(rotation / 180 * M_PI) * halfdimy) / (ScreenHeight), 0, 0, 0, 0, video::SColor(255, 255, 255, 255), (left+1)%2, (top+1)%2);
    vertices[3] = video::S3DVertex((centerx - cos(rotation / 180 * M_PI) * halfdimx - sin(rotation / 180 * M_PI) * halfdimy) / (ScreenWidth),
                                   (centery + sin(rotation / 180 * M_PI) * halfdimx - cos(rotation / 180 * M_PI) * halfdimy) / (ScreenHeight), 0, 0, 0, 0, video::SColor(255, 255, 255, 255), left, (top+1)%2);



    u16 indices[6] = {0, 1, 3, 1, 2, 3};

    driver->drawIndexedTriangleList(vertices, 4, indices, 2);
}


EDIT:
Ja, ich weiß, schlimmer Stil und nicht kommentiert... aber auch schon älter... ^^

EDIT2: 2 Smilies im Code entfernt... phpBB nervt... ^^


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13.05.2007, 19:05 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
viele klammern sind ja schön.. aber operatoren-reihenfolge muss nicht bekannt sein um zu wissen das punkt vor strich geht... ;) :mrgreen:


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13.05.2007, 19:09 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Zitat:
viele klammern sind ja schön.. aber operatoren-reihenfolge muss nicht bekannt sein um zu wissen das punkt vor strich geht... Wink Mr. Green

lol... klar, weiß ich... ich finds leserlicher so :p

EDIT: Moment... wo findest du da überflüssige Klammern, die man aufgrund von der Operatoren-Reihenfolge weglassen kann?


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 13.05.2007, 19:20 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
:oops: öhhhhh tjaa.... ähem...


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de