Français
Source/ Codesnippets

OpenGL Licht

 

Sven
Bader
Um Eigenschaften et Positionierung de Licht dans OpenGL trop comprendre, musste je es mir seulement visualisieren. cela Ergebnis teile je volontiers avec euch.

il y a un paire API Aufrufe dabei, c'est mais alles très überschaubar gehalten.

mon Top 3 Learnings étions:
- Glanzlichter sommes doch gar pas so schwer
- Platzierung de Licht ist unbeeindruckt de Pushs et Pops
- qui Lichtgenauigkeit ist direct de qui Dreiecksanzahl dépendant


 $H OpenGL.ph
declare time&, frames%
declare rtri!, light#
declare white#,red#, green#,blue#, zero#, list&,loop&
dim light#,16
dim white#,16
dim red#,16
dim green#,16
dim blue#,16
dim zero#,16
FloatArray(white#,1,1,1,1)
FloatArray(red#,1,0,0,1)
FloatArray(green#,0,1,0,1)
FloatArray(blue#,0,0,1,1)
FloatArray(zero#,0,0,0,1)
FloatArray(light#,-0.05,-0.05,-0.05, 1.0)

PROC GRID

    'il y a bessere Opportunités, Gitter trop erstellen mais pour cet Beispiel reicht es, un einzelner Quad serait
    'pas vernünftig beleuchtet volonté (siehe Würfel) "per-vertex lighting"
    parameters size!, resolution!

    si list& = 0

        list& = ogl("StartList")
        oGL("Move", -(size! * 0.5)-(size! / resolution! * 0.5),(size! * 0.5)-(size! / resolution! * 0.5), 0)

        whileloop 1, int(resolution!)

            oGL("Move", (size! / resolution!),-size!, 0)
            loop& = &loop

            whileloop 1, int(resolution!)

                si ((&loop + loop&) MOD 2) = 0

                    oGL("Color", 0.2,0.2,0.2,1.0)

                d'autre

                    oGL("Color", 1.0,1.0,1.0,1.0)

                endif

                oGL("Move", 0.0, (size! / resolution!), 0)
                oGL("Quad", (size! / resolution!),(size! / resolution!))

            endwhile

        endwhile

        ogl("EndList")

    endif

    ogl("Drawlist", list&)

ENDPROC

Proc Light

    'Zur besseren Veranschaulichung dans Proc gekapselt, si es um Performance allez nimmt on une fertigen Bereich,
    'définition de allem aus Position serait aussi einmal chez initialisation reichen, cela objet dient qui Visualisierung
    'qui Lichtposition. cela Grundlicht (Ambient) ist léger négative gesetzt là es aus irgendeinem Grund chez "0" et avec ca
    'Licht gibt
    parameters no&, r!, g!, b!
    declare color#
    dim color#, 16
    FloatArray(color#,r!, g!, b!, 1.0)
    oGL("glMaterialfv", ~GL_FRONT_AND_BACK, ~GL_EMISSION, color#)
    oGL("Color", r!, g!, b!, 1.0)
    oGL("Cuboid", 0.15, 0.15, 0.15)
    oGL("glMaterialfv", ~GL_FRONT_AND_BACK, ~GL_EMISSION, zero#)
    oGL("glLightfv",~GL_LIGHT0 + no&,~GL_AMBIENT,light#)'GL_AMBIENT
    oGL("glLightfv",~GL_LIGHT0 + no&,~GL_DIFFUSE, color#)' GL_DIFFUSE
    oGL("glLightfv",~GL_LIGHT0 + no&,~GL_POSITION,zero#)' GL_POSITION
    oGL("glLightfv",~GL_LIGHT0 + no&,~GL_SPECULAR, white#)' GL_SPECULAR
    oGL("glEnable",~GL_LIGHT0 + no&)
    dispose color#

ENDPROC

proc DrawGLScene

    oGL("Clear")
    oGL("Move", 0, 0.75, -5.0)
    oGL("glMaterialfv",~GL_FRONT_AND_BACK, ~GL_SPECULAR, white#)' Glanzlichtfarbe
    oGL("glMaterialf", ~GL_FRONT_AND_BACK, ~GL_SHININESS,128.0)' Glanzlichtgröße (grand numéro ist kleiner, max 128.0)
    oGL("glDisable",~GL_LIGHT0)'Default Licht aus
    '-------
    'Lichtpositionen laisser sich pas par Push/Pop kapseln!
    'Jegliche Positionierung muss alors après wieder negiert volonté, chez Rotationen achsenweise
    'et alles toujours dans umgekehrter Reihenfolge - une Aufnahme en dans qui Light()-Funktion wäre imaginable
    'LICHTER
    oGL("Rotate",0,0, rtri!)
    oGL("Move", 2.0, 0,0)
    'Light(Lichtnummer, rouge, vert, bleu)
    Light(1,1,0,0)' rouge
    oGL("Move", -2.0, 0,0)
    oGL("Rotate", 0,0,-rtri!)
    oGL("Rotate",0,90,0)
    oGL("Rotate",0,0, rtri!)
    oGL("Move", 2.0, 0,0)
    Light(2,0,1,0)' vert
    oGL("Move", -2.0, 0,0)
    oGL("Rotate", 0,0,-rtri!)
    oGL("Rotate", 0,-90,0)
    oGL("Rotate", 0, rtri!,0)
    oGL("Move", 2.5, 0,0)
    Light(3,0,0,1)' bleu
    oGL("Move", -2.5, 0,0)
    oGL("Rotate", 0, -rtri!,0)
    'OBJEKTE
    oGL("Color", 1, 1, 1, 1)
    'quelque chose dans qui vers herumschauen:
    oGL("Rotate",sin(rtri!*0.01) * 10.0, sin(rtri!*0.01) * 20.0, sin(rtri!*0.01) * 5.0)
    oGL("Push")'Boden
    oGL("Move", 0, -2.2, -4)
    oGL("Rotate",270, 0,0)
    GRID(20,40)
    oGL("Pop")
    oGL("Push")'Würfel, seulement très eingeschränktes Lighting
    oGL("Move", -0.65, 0.5, 0)
    oGL("Rotate", -45, 45, 0)
    oGL("Cuboid", 0.75, 0.75,0.75)
    oGL("Pop")
    oGL("Push")'Kugel, avec vielen Dreiecken siehts richtig bien aus
    oGL("Move", 1, 0, 0)
    oGL("Sphere", 0.65, 192,192)
    oGL("Pop")
    oGL("Push")'quille / Cone
    oGL("Move", 2.5, -1.5, -1.0)
    oGL("Cylinder", 1.0, 0,2.0,192)
    oGL("Pop")
    oGL("Push")'Cylinder, sieht aussi avec wenigen Unterteilungen déjà bien aus
    oGL("Move", -2.0, -0.5, -1.5)
    oGL("Rotate", -15, -30, 30)
    oGL("Cylinder", 0.20, 0.20,4,30)
    oGL("Pop")
    oGL("Show")
    rtri! = rtri! + 1

endproc

Proc FloatArray

    parameters x&,a!,b!,c!,d!
    long x&,0  = single(a!)
    long x&,4  = single(b!)
    long x&,8  = single(c!)
    long x&,12 = single(d!)

ENDPROC

' Hauptprogramm
' -------------
declare ende%
CLS 0
oGL("Init", %hWnd, 0,0,0,1)
oGL("PosMode", 1)
oGL("glEnable",~GL_CULL_FACE)
oGL("glEnable",~GL_DEPTH_TEST)
oGL("BlendMode", 1)
oGL("Fog", 3, 6, 14)
time&   = &GetTickCount
frames% = 0
ende%   = 0

WhileNot ende%

    'WaitInput sollte dans 3D-Anwendungen et Spielen dans chaque le cas vermieden volonté,
    'là là aussi sans timer ca. 8 ms unkontrollierbar verschwinden

    si isKey(27)

        ende% = 1

    endif

    DrawGLScene()
    inc frames%

    si &GetTickCount - time& >= 1000' 1 seconde ist 'rum

        setText %hWnd, str$(frames%) + " Frames/sek"
        time&   = &GetTickCount
        frames% = 0

    endif

Endwhile

end

115 kB
Bezeichnung:Licht
Hochgeladen:05.08.2021
Downloadcounter75
Download
 
05.08.2021  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

1.545 Views

Untitledvor 0 min.
Sven Bader01.02.2023
Walter28.11.2022
Ernst29.05.2022
Stringray05.01.2022
plus...

Themeninformationen

cet Thema hat 1 participant:

Sven Bader (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie