[3D OpenGL]Probleem met texturen sphere.

Pagina: 1
Acties:

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
Ik weet niet of er hier veel mensen zijn die bekend zijn met OpenGL, maargoed een poging wil ik toch wagen.

Ik ben bezig, een deel van het universum na te bootsen in OpenGL, en zoals gewoonlijk begin je dan met de Aarde en de Zon ;). Zon is gedaan, maar nu loop ik bij de aarde tegen een "glitch" aan.

Ik zal de code even blijsluiten voor de duidelijkheid, in princiepe zijn deze lijnjtes hoofdzakelijk verantwoordelijk voor het tekenen van de sphere :
code:
1
2
3
4
gluQuadricTexture(pObj, true);                      
gluQuadricDrawStyle(pObj, GLU_FILL);            
glRotatef( 65, 1.0f, 0.0f, 0.0f);        
gluSphere(pObj, 1.5f, 100, 100);

De rede dat ik glRotate gebruik is dat de texture map met de noordpool naar mij wijst, en ik em dus over 90 graden op de X as moet draaien om de noordpool gewoon omhoog te laten wijzen. Resultaat van de bovenstaande code :
Afbeeldingslocatie: http://home.planet.nl/~rme_2001/Render1.jpg
So far so good, maar zoals je mischien al ik opgevallen, ik draai em daar nog maar 65, maar ik wil hem uiteindelijk 90 graden draaien. Maar daar gaat het dus mis. Als ik de sphere verder dan 75 draai krijg ik de volgende "glitch" :
Afbeeldingslocatie: http://home.planet.nl/~rme_2001/Render2.jpg
Note: Rotation was 85 hier.

Zelf al geprobeerd om de radius te verkleinen, aantal vertexen op de sphere te verhogen en verlagen. M'n texture downgescaled (orgineel was 2500x 1250) Maar ook dat moch niet baten.
Iemand enig idee waar dit door komt ?

... MMORPG Addict.


  • André
  • Registratie: Maart 2002
  • Laatst online: 11:13

André

Analytics dude

Ik verplaats deze even naar de buren, omdat dit meer met programmeren te maken heeft :)

Webdesign & Graphics > Programming & Webscripting

  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
Subtiele Kick, probleem heb ik nog niet kunnen verhelpen.

... MMORPG Addict.


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 01-05 14:20
Het is geen oplossing voor je probleem, maar de noordpool ligt niet precies aan de bovenkant van de aarde. De draai-as van de aarde loopt schuin ten opzichte van haar loopbaan.

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 23-04 14:44
Ik heb geen ervaring met OpenGL programmeren, wel met mods maken voor spellen. Daarin is het standaard dat texturen een afmeting hebben van een macht van 2. Helpt het als je je textuur verkleint naar bijv. 2048x1024?

Full-stack webdeveloper in Groningen


  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
ZanderZ schreef op zondag 03 juli 2005 @ 12:09:
Ik heb geen ervaring met OpenGL programmeren, wel met mods maken voor spellen. Daarin is het standaard dat texturen een afmeting hebben van een macht van 2. Helpt het als je je textuur verkleint naar bijv. 2048x1024?
Ik heb dit al geprobeerd, immers de orginele texture 2500 x 1250 is ook een macht van 2.

... MMORPG Addict.


  • RayNbow
  • Registratie: Maart 2003
  • Nu online

RayNbow

Kirika <3

CRiMiNaL schreef op zondag 03 juli 2005 @ 12:15:
[...]

Ik heb dit al geprobeerd, immers de orginele texture 2500 x 1250 is ook een macht van 2.
Als die twee getallen machten van twee waren, dan waren ze op te schrijven als 2x, waarbij x een geheel getal is. Dat zijn ze echter niet:
2log 2500 = 11.28771238...
2log 1250 = 10.28771238...

De afmeting die het dichts in de buurt liggen zijn en machten van twee zijn:
211 x 210 = 2048 x 1024

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • CRiMiNaL
  • Registratie: Mei 2002
  • Laatst online: 10-01-2024
RayNbow schreef op zondag 03 juli 2005 @ 12:46:
[...]


Als die twee getallen machten van twee waren, dan waren ze op te schrijven als 2x, waarbij x een geheel getal is. Dat zijn ze echter niet:
2log 2500 = 11.28771238...
2log 1250 = 10.28771238...

De afmeting die het dichts in de buurt liggen zijn en machten van twee zijn:
211 x 210 = 2048 x 1024
Ja ik moet je gelijk geven 2500 x 1250 is inderdaad geen macht van 2. De JPG class die ik hiervoor gebruik maakt hier alleen geen probleem van, mijn fout.

Ik heb het advies opgevolgt en m'n texture omgezet naar 2048 x 1024, het zelfde probleem blijf nog steeds helaas.

... MMORPG Addict.


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Ik weet niet of je hier iets aan hebt, maar op deze manier voeg ik de texture coordinaten toe aan een sphere in Direct3D:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    sDeltaRingAngle = (g_PI / lNumSphereRings)
    sDeltaSegAngle = (2# * g_PI / lNumSphereSegments)

    sScale = sTextureScale

    ' Generate the group of rings for the sphere
    For Ring = 0 To (lNumSphereRings - 1)
        r0 = Sin((Ring + 0) * sDeltaRingAngle) * sWidth
        r1 = Sin((Ring + 1) * sDeltaRingAngle) * sWidth
        y0 = Cos((Ring + 0) * sDeltaRingAngle) * sHeight
        y1 = Cos((Ring + 1) * sDeltaRingAngle) * sHeight

        ' Generate the group of segments for the current ring
        For Seg = 0 To (lNumSphereSegments)
        
            x0 = r0 * Sin(Seg * sDeltaSegAngle)
            z0 = r0 * Cos(Seg * sDeltaSegAngle)
            x1 = r1 * Sin(Seg * sDeltaSegAngle)
            z1 = r1 * Cos(Seg * sDeltaSegAngle)

            ' Add two vertices to the strip which makes up the sphere
            Vertex(I).p = vec3(x0, y0, z0)
            D3DXVec3Normalize Vertex(I).n, Vertex(I).p
            Vertex(I).tu1 = -(Seg) / lNumSphereSegments
            Vertex(I).tv1 = (Ring + 0) / lNumSphereRings
            Vertex(I).tu1 = Vertex(I).tu1 * sScale
            Vertex(I).tv1 = Vertex(I).tv1 * sScale
            I = I + 1

            Vertex(I).p = vec3(x1, y1, z1)
            D3DXVec3Normalize Vertex(I).n, Vertex(I).p
            Vertex(I).tu1 = -(Seg) / lNumSphereSegments
            Vertex(I).tv1 = (Ring + 1) / lNumSphereRings
            Vertex(I).tu1 = Vertex(I).tu1 * sScale
            Vertex(I).tv1 = Vertex(I).tv1 * sScale
            I = I + 1
        Next Seg
    Next Ring

    D3DVertexBuffer8SetData m_pEarthVB, 0, Len(Vertex(0)) * m_lNumSphereVertices, 0, Vertex(0)


Variabelen om in te stellen:
sHeight
sWidth
lNumSphereRings
lNumSphereSegments
sTextureScale

Te declareren variabelen:
Dim Ring As Long, Seg As Long, I As Long ' Counters
Dim sDeltaRingAngle As Single
Dim sDeltaSegAngle As Single
Dim vT As D3DVECTOR4
Dim sScale As Single
Dim r0 As Single, r1 As Single
Dim x0 As Single, x1 As Single
Dim y0 As Single, y1 As Single

Het is wel Visual Basic Code, maar hopelijk heb je hier iets aan ;-)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 05-05 18:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het klinkt meer als een bug in de driver / je videokaart, want dit hoort gewoon niet. Kun je eens een wireframe render maken van diezelfde rotatie als waar het fout gaat, en die hier posten?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1