Farbiges Licht
-
Hallo,
wie kann ich eine weisse Kugel
mit Farben bestrahlen
möchte eine RGB Kugel darstellen
so wie diese hierhttp://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
-
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.