Farbiges Licht



  • Hallo,

    wie kann ich eine weisse Kugel
    mit Farben bestrahlen
    möchte eine RGB Kugel darstellen
    so wie diese hier

    http://www.blender.org/development/release-logs/blender-236/normal-maps/

    die haben es mit Normal Maps gemacht
    gibt es diese auch in OpenGL ?

    kann ich eine fertige GLUT Kugel verwenden oder muss ich diese selber zeichnen?

    Gruß matthias



  • Ja, das kannst du auch mit OpenGL machen. Ja du kannst die GLUT-Kugel nehmen. Nein du brauchst dafuer keine Normalmaps, aber ja, es gibt Normalmaps in OpenGL.



  • wie gehe ich da vor?



  • wie kann ich eine Kugel mit Farben bestrahlen

    Du definierst Lichtquellen und weisst diesen Farben zu.
    In etwa so.
    Dein Beispiel wirkt aber merkwuerdig - vielleicht solltest Du nochmal genauer beschreiben was Du willst...
    Und in wie weit unterscheidet sich Dein Vorhaben jetzt ueberhaupt hier von?



  • Eine Normal Map hat mal prinzipiell sehr wenig mit Farben zu tun - die dient nur dazu einem Fragment auf einem Polygon eine von der interpolierten Normale abweichende Normale zuzuweisen, um Geometrie vorzutäuschen. Auf dem Screenshot wurde lediglich die Normal Map selber visualisiert.

    Ansonsten weiß ich auch nicht genau was du willst, du drückst dich arg schwammig aus.
    Wenn du eine weiße Kugel bestrahlen willst, musst du einfach eine weiße Kugel nehmen und sie mit einem farbigen Licht bestrahlen.
    Wenn du einfach eine Kugel wie auf dem Bild willst, kannste auch einfach eine Textur mit der Farbe über die Kugel ziehen oder sehr geschickt Vertexfarben festlegen 😉



  • habe nun eine Texut drübergelegt
    nun hab ich aber an den marktierten Stellen
    einen komischen Punkt
    Ich lade eine 256x256 Bitmap hinein.
    den BMP Loader habe ich mir selbst geschrieben
    die Textur möchte ich später selbst
    erstellen
    (2 For schleifen welche Helligkeit und Farbton ausrechnen
    und dieses dann in ein Textur array schreiben)

    Warum kommt bei mir nun der komische Punkt?
    was überlappt sich da?

    Gruß Matthias

    http://www.asselborn-matthias.de/sp34.jpg



  • @MatthiasA

    Meine Vermutung: der Texturmodus muss auf Clamp (bzw. Clamp To Edge) statt auf Repeat in der Richtung gesetzt werden. Dadurch, dass dies nicht der Fall ist, entstehen an der Kante der Textur bei der "Polkappe" Artefakte von der gegenüberliegenden Seite.



  • Hallo

    mit Clamp hab ich einen schwarze Strich um die Kugel herum

    sobald ich die 2 Filter

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);	
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
    

    deaktiviere ist der schwarze Punkt weg, aber auch die Qualität der Textur
    wie lässt sich dies ändern?

    anbei mein Loader

    void LoadGLTextures()
    {
    	HBITMAP hBMP;							BITMAP	BMP;
    	byte	Texture[]={	id1 };
    	glGenTextures(sizeof(Texture), &texture[0]);	
    	hBMP=(HBITMAP)LoadImage(GetModuleHandle(NULL),
    MAKEINTRESOURCE(Texture[0]), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
    		if (hBMP)												
    		{														
    			GetObject(hBMP,sizeof(BMP), &BMP);																		
    			glPixelStorei(GL_UNPACK_ALIGNMENT,4);				
    			glBindTexture(GL_TEXTURE_2D, texture[0]);		
    			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);	
    			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
    			gluBuild2DMipmaps(GL_TEXTURE_2D, 3, BMP.bmWidth, BMP.bmHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);
    			DeleteObject(hBMP);
    		}
    	}
    


  • Das bilineare Filter interpoliert jeweils zwischen 2x2 benachbarten Texel.
    Fuer Texel ganz am Rand der Textur ist der Nachbarpixel aber auf der anderen Seite.
    Darum verlaeuft dort das Schwarz zu Weiss und umgekehrt.
    Dieser Effekt tritt dann eben nicht mehr auf wenn Du das Filter abschaltest.
    Wie schon gesagt willst Du aber eigentlich verhindern, dass ueber den Rand hinaus gelesen wird indem Du GL_TEXTURE_WRAP_T mit glTexParameter auf GL_CLAMP stellst.
    Wenn das nicht klappt hast Du was falsch gemacht...



  • Vielleicht noch als Anmerkung:

    probiere es auch mal mit GL_TEXTURE_WRAP_S aus. Kam durchaus schon vor, dass Texturkoordinaten verdreht sind.


Anmelden zum Antworten