OpenGL grafikában hamis színű vonalak

OpenGL grafikában hamis színű vonalak
2013-10-28T20:15:24+01:00
2013-11-30T18:15:58+01:00
2022-11-30T03:10:42+01:00
Stella_209
Készítettem egy 3d Föld/bolygókat megjelenítő applikációt OpenGL segítségével (StGlobe). Csodálatosan működik a gömb felszínére textúrázott kép, szépen forog a térben.
A probléma ott kezdődött, amikor a gömbi köröket (szélesség, hosszúság) próbáltam rárajzolni mondjuk piros színnel.
Meglepetésemre a színes vonalak nem helyesen jelennek meg (piros helyett feketében!) és a gömb szélei felé még csillag is.
Ugyanez a problémám, ha OpenGL-ben egy térképészeti programban bitmap textúrát töltök be háttérnek, máris helytelen színűvé (halvánnyá) válik az előtér vektoros rajza.
Hogyan rajzolhatnék rá színhelyes vonalas ábrát?

Foráskód és install a SourceForge.net-en:
StGloba program:

A helytelenül rajzoló részlet:


// Gömbi fokhálózat kirajzolása: szélesség, hosszúaág 10 fokonként procedure TForm1.DrawSphereCoords; var szKor,hKor: integer; dx,dy: double; begin glColor3d(0,0,1); for szKor:=0 to 9 do begin dx := cos(DegToRad(10*szKor)); dy := sin(DegToRad(10*szKor)); glPushMatrix; gltranslatef(0,0,dy); glCircle(0,0,dx); glPopMatrix; glPushMatrix; gltranslatef(0,0,-dy); glCircle(0,0,dx); glPopMatrix; end; for hKor:=0 to 36 do begin glPushMatrix; glRotatef(90,1,0,0); glRotatef(10*hKor,0,1,0); glCircle(0,0,1); glPopMatrix; end; end;

A fenti linken található a teljes forráskód.
Mutasd a teljes hozzászólást!
Képet nem tudsz mutatni a problémáról?

Nem tudom hogy rajzolsz, de problémát okozhatja, ha egy síkban van a polygon és a vonal, tehát ugyanazokra a koordinátákra rajzolod.

A vonal vastagságát lehet ki kellene hagyni a polygonoknál, vagy nagyon kicsit távolabb rajzolni a gömb középpontjától, illetve felületétől.
Vagy csak a látható vonalakat rajzolni és kikapcsolni a Z-buffert.

Vagy biztos van még pár megoldási lehetőség.
Ha tudsz akkor lophatnál belőle egy képet (PrintScreen?) , hátha tudunk valami okosabbat mondani.
Mutasd a teljes hozzászólást!

  • Szia!
    Próbáld ki, hogy a vonalak kirajzolása előtt kikapcsolod a megvilágítást és a textúra leképezést:
    glDisable(GL_LIGHTING);
    glDisable(GL_TEXTURE_2D);
    Mutasd a teljes hozzászólást!
  • Kedves Barátom!
    Tisztelettel megköszönöm ötletedet, de...
    Miután beírtam a fény kikapcsolást, a föld élénk színei tüntek el! (Pirosak lettek a kontinensek).
    Sajna, a fpkhálózat továbbra is csillog-villog, szóval nem a meghatározott színnel jelenik meg.
    Egyszerűen:
    - Csodálatosan (színhelyesen) tudok 2D vektorgrafikát megjeleníteni OpenGL-ben;
    - Ha egy texturált képet teszek ki a háttérben, abban a pillanatban elromlanak a színek! (csillogó vonalak, nem pedig az általam definiált szín!
    Már kínomban mindent állítottam, de azok a fránya vonalak továbbra is furcsa csillogó színekben jelennek meg.
    Mutasd a teljes hozzászólást!
  • Úgy próbáltad, hogy kirajzoltad a földet, majd kikapcsoltad a textúrát/fényt és utána rajzoltad a vonalakat?
    Vagy a kettőt megcserélve, először vonalakat aztán földet?

    A kettőt egyszerre biztos nem jó rajzolni.
    De a paramétereket rajzolás közben is lehet módosítani.
    Mutasd a teljes hozzászólást!
  • Abban tényleg igazad van, hogy a hálózatrajz előtt, amennyiben kikapcsolom a fényt, akkor már a helyes színnel jelennek meg a vonalak, de továbbra is szakadozottan. Tipródok még.
    Mutasd a teljes hozzászólást!
  • Képet nem tudsz mutatni a problémáról?

    Nem tudom hogy rajzolsz, de problémát okozhatja, ha egy síkban van a polygon és a vonal, tehát ugyanazokra a koordinátákra rajzolod.

    A vonal vastagságát lehet ki kellene hagyni a polygonoknál, vagy nagyon kicsit távolabb rajzolni a gömb középpontjától, illetve felületétől.
    Vagy csak a látható vonalakat rajzolni és kikapcsolni a Z-buffert.

    Vagy biztos van még pár megoldási lehetőség.
    Ha tudsz akkor lophatnál belőle egy képet (PrintScreen?) , hátha tudunk valami okosabbat mondani.
    Mutasd a teljes hozzászólást!
  • Köszönöm a javaslataitokat és végül megoldódott a probléma.
    Előző javaslat bevált, vagyis nem közvetlenül a gömbre kell rajzolni a fokhálózatot, hanem egy kicsit fölé.
    Ez a mellékelt programrészletben 1.001 - szeres gömbsugár szorzást jelent.


    // Gömbi fokhálózat kirajzolása: szélesség, hosszúaág 10 fokonként procedure TForm1.DrawSphereCoords; var szKor,hKor: integer; dx,dy: double; begin glColor3d(1,0,0); for szKor:=0 to 9 do begin dx := cos(DegToRad(10*szKor)); dy := sin(DegToRad(10*szKor)); glPushMatrix; gltranslatef(0,0,dy); glCircle(0,0,dx*1.001); glPopMatrix; glPushMatrix; gltranslatef(0,0,-dy); glCircle(0,0,dx*1.001); glPopMatrix; end; for hKor:=0 to 18 do begin glPushMatrix; glRotatef(90,1,0,0); glRotatef(10*hKor,0,1,0); glCircle(0,0,1.001); glPopMatrix; end; end; És hogy az egészet egyben is lássátok: SourceForgeNet-en a forráskód
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd