Deutsch
Forum

OpenGL glDrawArrays Befehl Problem

 

Andreas
Gaida
Hi!
Habe ein Problem mit glDrawArrays Befehl irgendwie bekomme ich ihm seit vielen Tagen und Internet suche nicht so zum funktionieren wie er es soll. Habe schon paar Dutzend Varationen versucht ohne erfolg vielleicht sehe ich nur den Wald vor Lauter Bäumen nicht
Ich wäre sehr dankbar für Hilfe bei dem Problem.

Mfg
Andreas
KompilierenMarkierenSeparieren
Beispielcode des Problem :
Declare Dateiname$,Datei$,ab$,rückgabe&,ende%,byt_count&
Declare vertex_P#,vertex_N#,vertex_T#,vertex_F3#,vertex_F4#,quad_A#
Declare zähler_P&,zähler_N&,zähler_T&,zähler_F&,zähler_F3&,zähler_F4&
daten_init   Initialisiert  Bereiche und füllt sie mit Daten
cls
oGL(Init, %hWnd, 0, 0, 0, 1)
@Set(oGLDepth, 1000)
oGL(glEnableClientState,~GL_VERTEX_ARRAY)
print oGL(glIsEnabled,~GL_VERTEX_ARRAY)
oGL(glVertexPointer,3,~GL_FLOAT,0,@Addr(quad_A#))
setTimer 20  max. 50 Frames /sek.

WhileNot ende%

    WaitInput
    DrawGLScene

EndWhile

ende_init

proc DrawGLScene

    oGL(Clear)
    oGL(Move, 0,0, -4)
    quad               wenn aktiviert zeigt Quadrat an wie es aussehen soll
    oGL(glDrawArrays,~GL_QUADS, 0, 12)  soll Quadrat zeichnen aus einen Bereich heraus
    oGL(Show)

endproc

proc quad

    rückgabe& =oGL(glBegin,~GL_QUADS)
    oGL(glVertex3f,@Float(quad_A#, 0),@Float(quad_A#, 8),@Float(quad_A#, 16))
    oGL(glVertex3f,@Float(quad_A#, 24),@Float(quad_A#, 32),@Float(quad_A#, 40))
    oGL(glVertex3f,@Float(quad_A#, 48),@Float(quad_A#, 56),@Float(quad_A#, 64))
    oGL(glVertex3f,@Float(quad_A#, 72),@Float(quad_A#, 80),@Float(quad_A#, 88))
    rückgabe& = oGL(glEnd)

endproc

proc daten_init

    Dim vertex_P# ,24000000
    Dim vertex_N# ,24000000
    Dim vertex_T# ,16000000
    Dim vertex_F3#,12000000
    Dim vertex_F4#,12000000
    Dim quad_A#   ,12000000
    byt_count& = 0  Wenn 4  Zeigt  glDrawArrays was an aber nicht das was es soll
    Float quad_A#, (0 +byt_count&)  =  0.0
    Float quad_A#, (8 +byt_count&)  =  1.0
    Float quad_A#, (16+byt_count&)  =  1.0
    Float quad_A#, (24+byt_count&)  =  0.0
    Float quad_A#, (32+byt_count&)  =  0.0
    Float quad_A#, (40+byt_count&)  =  1.0
    Float quad_A#, (48+byt_count&)  =  1.0
    Float quad_A#, (56+byt_count&)  =  0.0
    Float quad_A#, (64+byt_count&)  =  1.0
    Float quad_A#, (72+byt_count&)  =  1.0
    Float quad_A#, (80+byt_count&)  =  1.0
    Float quad_A#, (88+byt_count&)  =  1.0

endproc

proc ende_init

    Dispose vertex_P#
    Dispose vertex_N#
    Dispose vertex_T#
    Dispose vertex_F3#
    Dispose vertex_F4#
    Dispose quad_A#

endproc


Administratorische Anmerkung: Für Quellcodes bitte den CODE-Tag benutzen.
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
27.05.2007  
 




Frank
Abbing
Da gehst du wohl falsch vor. Wie ich es verstanden habe, musst du dafür eine Display-Liste benutzen:

[web]https://wiki.delphigl.com/index.php/Displaylisten[/web]
Mit glNewList eine neue Liste starten, diese füllen und dann mit glCallList anzeigen.
Roland hat aber Display-Listen eingebaut. Vielleicht solltest du diese benutzen, anstatt selber welche per API nachzubauen.
 
27.05.2007  
 




Andreas
Gaida
Hi!
glDrawArrays kann in Displaylisten vorkommen.
Aber seine aufgabe ist es Vertex Daten aus Arrays schnell aus dem Arbeitsspeicher zu Zeichnen.
Z.B kann man mit einen Aufruf 10000 Dreiecke auf einmal Zeichnen oder in eine Displayliste einfügen
Displaylisten werden im Speicher der Grafikkarte gehalten und sind sehr schnell aber leider eignen sie sich nur für Statische Objekte und der Platz des Speichers ist leider begrenzt will man nun Animationen erstellen
braucht man eine schnelle Möglichkeit viele 3D Daten neu zu Zeichnen.
diese Methode:
rückgabe& =oGL(glBegin,~GL_QUADS)
oGL(glVertex3f,@Float(quad_A#, 0),@Float(quad_A#, 8),@Float(quad_A#, 16))
oGL(glVertex3f,@Float(quad_A#, 24),@Float(quad_A#, 32),@Float(quad_A#, 40))
oGL(glVertex3f,@Float(quad_A#, 48),@Float(quad_A#, 56),@Float(quad_A#, 64))
oGL(glVertex3f,@Float(quad_A#, 72),@Float(quad_A#, 80),@Float(quad_A#, 88))
rückgabe& = oGL(glEnd)
ist dafür einfach zu langsam ,glDrawArrays müste mindestens 10 mal so schnell sein wenn nicht noch viel schneller .
Leider weis ich nicht wieso die umsetzung der C Beispiele nach XProfan nicht Funktioniert

C Beispiel :
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertex);
glDrawArrays(GL_TRIANGLES, 0, 6);

Ganzer Queltext:
[...] 

MfG
Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
27.05.2007  
 




Andreas
Gaida
Hi!
Kann mir vielleicht jemand sagen wie die Daten des C Arrays in Xprofan ganz genau nachgebildet werden
können(müssen Byte genau die gleiche anordnung im Speicher haben) oder welche Position die einzelnen Teile des C Arrays in einen Bereich einnehmen würden.

Für diese Informationen wäre ich sehr dankbar.

C Array :
GLfloat vertex[4][3]={{-5.0f, 5.0f, 0.0f},
{-5.0f, -5.0f, 0.0f },
{5.0f, -5.0f, 0.0f },
{5.0f, 5.0f, 0.0f }};

MfG
Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
29.05.2007  
 



Na einfach 8 Byte pro Float! 8x4x3
KompilierenMarkierenSeparieren
declare a#
dim a#,96
float a#, 0 =  blub
float a#, 8 =  blub
float a#, 16 =  blub
...
 
29.05.2007  
 




Andreas
Gaida
THX

Auf diese Art habe ich es auch schon versucht

Dim quad_A# ,120000
byt_count& = 0
Float quad_A#, (0 +byt_count&) = 0.0
Float quad_A#, (8 +byt_count&) = 1.0
Float quad_A#, (16+byt_count&) = 1.0
Float quad_A#, (24+byt_count&) = 0.0
Float quad_A#, (32+byt_count&) = 0.0

habe keine ahnung weshalb der glDrawArrays Befehl nicht funktioniert
habe mich bisher an die hoffnung geklammert das ich das Array falsch bestückt habe
aber die ist damit wohl hinfällig.

MfG
Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
30.05.2007  
 



Mach mal ein lauffähiges Minimalbeispiel - aus dem auch ersichtlich ist wie Du das Array übergibst. Und Codes bitte immer mit
KompilierenMarkierenSeparieren[/CODE] kennzeichnen!
 
30.05.2007  
 




Andreas
Gaida
Das erste Programm dieses Treads ist das Beispiel Programm
in der Procedure daten_init werden dem Array die zugehörigen Daten übergeben.
Die Procedure quad zeigt wenn sie aktiviert wird wie es ausehen sollte.
Leider klapt es mit der anderen Methode mit glDrawArrays nicht das gleiche zu zeichnen .
wenn ich den ersten Float wert des Arrays von 0.0 auf 1.0 ändere zeichnet glDrawArrays etwas aber nicht das richtige.
mit diesem Code wird das Array dem glDrawArrays Befehl zur verfügung gestellt:
KompilierenMarkierenSeparieren
Bisher ist es mir nicht gelungen die Daten im Array so anzulegen das ich das gleiche ergebniss bekomme wie mit der quad Procedure.Obwohl ich schon sehr viele verschiedene anordnungen versucht habe weswegen
ich nicht weis ob ich da einen Fehler mache oder der vielleicht in Profan liegt .
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
30.05.2007  
 



Probiere mal mit Doubles statt mit Floats!
 
30.05.2007  
 



Nachtrag ich hatte hier warscheinlich im OGL-Bereich einen OGL-Source gepostet welcher nach diesem Prinzip eine ganze Szene zeichnet in der man sich auch bewegen kann. Sogar mit Spiegelung auf dem Boden etc - schau mal im OGL-Bereich nach Codes von mir - vielleicht hilfts.
 
30.05.2007  
 




Andreas
Gaida
Ok werde nach den Codes schauen
viellen Dank

MfG
Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
30.05.2007  
 




Andreas
Gaida
Problem Gelöst
Vielen Dank IF
der Tip mit den Doubles hat es gebracht habe nicht gewust
das das C float nur 4 Bytes hat und ging von den XProfan 8 Bytes aus das muste ja
Murks geben

MfG
Andreas
 
Athlon X2 4800 , 2GB Ram , GeForce 7800GT
Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b
31.05.2007  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.012 Betrachtungen

Unbenanntvor 0 min.
H.Brill28.05.2023
Sven Bader05.08.2021
HofK28.05.2015
funkheld31.03.2012

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Andreas Gaida (7x)
iF (4x)
Frank Abbing (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie