Autor Beitrag
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 23.12.07 13:39 
Hi,

im Anhang habe ich ein Beispiel für das Problem. Ich habe auch im Internet ein Programm gefunden, bei dem es richtig aussah, aber im Code hab ich keine Unterschiede gefunden.


ausblenden Initialisierung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TOpenGLWorks.InitDraw;
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, VPanel.Width/VPanel.Height, NearClipping, FarClipping);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;

  glTranslatef(-CenterMoveX/Scaler,-CenterMoveY/Scaler,-CenterMoveZ/Scaler);

  glRotatef(RotateZ,0,0,1);
  glRotatef(RotateY,1,0,0);
  glRotatef(RotateX,0,1,0);

  glTranslatef(-FreeMoveX/Scaler,-FreeMoveY/Scaler,-FreeMoveZ/Scaler);

  LightsCount:=0;

  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @light_model_ambient[0]);
end;


ausblenden Initialisierung des Quadrics
1:
2:
3:
4:
5:
6:
7:
procedure TOpenGLWorks.InitQObj0;
begin
  qobj0:=gluNewQuadric;
  gluQuadricDrawStyle(qobj0, GLU_FILL);
  gluQuadricNormals(qobj0, GLU_SMOOTH);
  gluQuadricTexture(qobj0,True);
end;


ausblenden Initialisierung des Lichts
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TOpenGLWorks.InstallLight(Color: array of Single);
var    light_position : Array[0..3] of GlFloat;  F:TFont;
begin
    light_position[0]:=0;
    light_position[1]:=0;
    light_position[2]:=0;
    light_position[3]:=1;

    [...]

    glLightf(GL_LIGHT0+LightsCount, GL_CONSTANT_ATTENUATION, 100.0/1e9*Scaler);
    glLightf(GL_LIGHT0+LightsCount, GL_LINEAR_ATTENUATION, 0.0000000005/1e9*Scaler);
    glLightf(GL_LIGHT0+LightsCount, GL_QUADRATIC_ATTENUATION, 0.0000000005/1e9*Scaler);

    glLightfv(GL_LIGHT0+LightsCount, GL_SPECULAR, @Color[0]);
    glLightfv(GL_LIGHT0+LightsCount, GL_AMBIENT,  @light_ambient[0]);
    glLightfv(GL_LIGHT0+LightsCount, GL_DIFFUSE,  @Color[0]);
    glLightfv(GL_LIGHT0+LightsCount, GL_POSITION, @light_position[0]);

    glEnable(GL_LIGHT0+LightsCount);

    LightsCount:=LightsCount+1;
end;


kann auch noch mehr Code zeigen, wenn ich nur wüsste, was ;)

Xion
Einloggen, um Attachments anzusehen!
_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: So 23.12.07 14:10 
glEnable(GL_NORMALIZE);

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 23.12.07 14:32 
hmmm, hat leider nichts gebracht...

ausblenden Initialisierung von OpenGL
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:
function TOpenGLWorks.InitializeOpenGL(Panel: TWinControl):boolean;
begin
  DC:= GetDC(Panel.Handle); {Give OpenGL the DC of the Form}

  Result:=InitOpenGL;

  RC:= CreateRenderingContext( DC,
                               [opDoubleBuffered],
                               32,
                               24,
                               0,0,0,
                               0);

  ActivateRenderingContext(DC, RC);

  VPanel:=Panel;


  glClearColor(0, 0, 0, 0); //Hintergrundfarbe
  glDepthFunc(GL_LEQUAL);
  glEnable(GL_DEPTH_TEST);  //Tiefentest aktivieren
  glEnable(GL_CULL_FACE);   //Backface Culling aktivieren
  glEnable(GL_LINE_SMOOTH); //Anit-Aliasing
  glEnable(GL_NORMALIZE);
  glShadeModel(GL_SMOOTH);
                
  InitQObj0;

  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
end;

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Jerk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 251

Vista Ultimate, Ubuntu
Turbo Delphi 2006
BeitragVerfasst: Fr 28.12.07 22:32 
Versuchs mal mit
glDepthFunc(GL_ALWAYS);
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 04.01.08 16:09 
das führt dazu, dass der Ring vom Saturn nicht mehr durch den Saturn verdeckt wird. Ich hab bei einem Kumpel gesehen, dass es bei ihm richtig aussieht, nur bei mir siehts schlecht auf, und zwar auf Hauptrechner und Notebook

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 04.01.08 17:29 
user profile iconXion hat folgendes geschrieben:

ausblenden Initialisierung von OpenGL
1:
2:
  glShadeModel(GL_SMOOTH);
end;

Hm. Eventuell macht deine Hardware ja hier Fehler..

Was hast du für Grafikkarten und Treiber? Und was hat dein Tester?

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 04.01.08 17:55 
ich hab eine Radeon X1600 Pro. Die wurde erst vor kurzem eingebaut und neue Treiber installiert. Weiß nicht, was mein Kumpel hat...mal sehen, wann er antwortet...

//Edit:
er hat eine
maggistro hat folgendes geschrieben:
7950 gt

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Fr 04.01.08 18:31 
Und wie malst du denn die "Murmel" ?

ausblenden Delphi-Quelltext
1:
2:
// ...
gluSphere(qobj0, ????????);


Oder hänge einfach mal das Prg. an. (aber bitte keine 1,0815 MB) ;)
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 04.01.08 18:39 
hmm, anhängen ist nicht so einfach, da das Programm relativ groß ist. Auch der Code is nicht wenig ;)

ausblenden Kugel malen
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TOpenGLWorks.PaintBall(R: real; Parts: integer; i: real; TexID: integer; Rot: real);
begin
  if TexID<>-1 then
    begin
      glEnable(GL_TEXTURE_2D);
      Textures[TexID].Bind;
    end;
  glRotatef(90,1,0,0);
  glRotatef(i,0,1,0);
  glRotatef(-Rot,0,0,1);   
  gluSphere(qobj0, R/Scaler, Parts, Parts);
  glRotatef(Rot,0,0,1);
  glRotatef(-i,0,1,0);
  glRotatef(-90,1,0,0);
  glDisable(GL_TEXTURE_2D);

end;


wenn das nichts bringt, dann kann ich mal die ganze Unit anhängen...

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 04.01.08 18:48 
Die Karte (also die von deinem Tester) hab ich auch... würde also wenig bringen.

Wobei das mit deiner ATI schon sein kann. Ich weiß schon warum ich den Verein nicht mag :roll:

Mach doch vllt mal ein Testprojekt. Nur Quadric, Licht und Textur. Verhält es sich da auch so? Wenn ja, kannst du ja die mal hochladen...

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Fr 04.01.08 19:18 
Wie sind die Werte von Parts & Parts ? Nicht zu niedrig ? Z.B. Eine Kugel mit 16 x 16
verursacht so etwas kommt noch hinzu wie gross der Radius ist.

Je grösser die Kugel ist um so mehr Slices, Stacks muss sie beinhalten.
Je mehr Quad also Vierecke um so besser die Schattendarstellung aber auch
die Rechenleistung wird höher.

Kannst du dir gern mal am Schneeman anschauen (siehe Prg. im Anhang).
Einloggen, um Attachments anzusehen!
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 04.01.08 22:07 
Die Kugel hat 20x20 Slices. Wie man auf dem Bild erkennen kann, liegt es wohl an meiner Hardware...

//Edit: das Bild ist nicht sehr gut, aber auf jeden Fall sind die Kanten wieder zu sehen...
Einloggen, um Attachments anzusehen!
_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Sa 05.01.08 00:04 
Nein, es liegt nicht an deiner Karte. Es liegt an OpenGl und deiner Kugel.
Eine Kugel mit dem Radius von zB. 100 Pixeln und 20 Slices sowie Stacks
und einem Betrachtungsabstand von 400 Pixeln erzeugt nun einmal sichtmare
Raster. Entweder du erhöst die Slices & Stacks (bei dir Parts) oder den
Betrachtungsabstand. Nun kannst du zwar die Anzahl der Slices 6 Stacks
erhöhen (zB. auf 64) um den Schatteneffect besser geltend zu machen
aber wenn nu nun den Betrachtungsabstand verringerst kommt das selbe
"Problem" zum Vorschein.

OpenGL (sowie DirectX) rendert nun mal keine echten Schatten sonder simuliert ihn.
Dabei wird einfach die Dreiecksaufteilung in einem Viereck verwendet.
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 05.01.08 10:22 
und warum ging es dann bei meinem Tester so gut? Find ich irgendwie unlogisch :gruebel:

auch bei 64 ist der effekt exakt der selbe, nur dass die Kanten noch schärfer und kleiner sind. Und es ruckelt ohne Ende XD

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Sa 05.01.08 10:44 
Es kommt auf die OpenGL-Version und die verwendete Graka. an.
Kann auch am Antialiasing liegen wie das auf der jew. Graka. eingestellt ist.
MAch doch bitte noch mal ein Bild mit einem grösseren Ausschnit und erhöten
Slices & Stacks. Dass das Prog. dann ruckeln könnte sagte ich dir ja schon.

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 05.01.08 10:52 
hier das Bild
Einloggen, um Attachments anzusehen!
_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Sa 05.01.08 11:17 
Hm, das sieht wirklich komisch aus. Die Lichtquellen sin alle initialisiert und
angeschaltet ?

Klammer mal den Teil bei dir aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
//Initialisierung des Lichts
glLightf(GL_LIGHT0+LightsCount, GL_CONSTANT_ATTENUATION, 100.0/1e9*Scaler);
    glLightf(GL_LIGHT0+LightsCount, GL_LINEAR_ATTENUATION, 0.0000000005/1e9*Scaler);
    glLightf(GL_LIGHT0+LightsCount, GL_QUADRATIC_ATTENUATION, 0.0000000005/1e9*Scaler);



ausblenden Delphi-Quelltext
1:
2:
//anzeigen  Initialisierung
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @light_model_ambient[0]);


Wie schaut es denn dan aus ?

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 05.01.08 11:22 
keine Veränderung...die Kanten sind nach wie vor da...

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
turboPASCAL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP / Vischda
D6 PE / D2005 PE
BeitragVerfasst: Sa 05.01.08 11:37 
...und nun noch folgende Änderung zu der obigen:

ausblenden volle Höhe Delphi-Quelltext
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:
function TOpenGLWorks.InitializeOpenGL(Panel: TWinControl):boolean;
begin
  DC:= GetDC(Panel.Handle); {Give OpenGL the DC of the Form}

  Result:=InitOpenGL;

  RC:= CreateRenderingContext( DC,
                               [opDoubleBuffered],
                               32,
                               24,
                               0,0,0,
                               0);

  ActivateRenderingContext(DC, RC);

  VPanel:=Panel;

  glClearColor(0, 0, 0, 0);   // Bildschirm löschen
  glClearDepth(1.0);          // Depth Buffer Setup
  // glEnable(GL_TEXTURE_2D); // Aktiviert Texture Mapping (optional)
  glShadeModel(GL_SMOOTH);    // Aktiviert weiches Shading
  glDepthFunc(GL_LESS);       // Bestimmt den Typ des Depth Testing
  glEnable(GL_DEPTH_TEST);    // Aktiviert Depth Testing
  glEnable(GL_NORMALIZE);     // Normalen berechnen
  glEnable(GL_LINE_SMOOTH);   // Anit-Aliasing für Linien
  // glEnable(GL_ALPHA_TEST);    // Texturen / Objecte auf Alphabl. testen (optional)

  // für die Qualitativ bessere Koordinaten Interpolation:
  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 

  glEnable(GL_LIGHTING);        // Lichtquellen einschalten u. verwenden

                
  InitQObj0;

  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
end;


Dann hätte ich gern noch ein Bildchen. ;)

_________________
Nein, ich bin nicht der turboPASCAL aus der DP, ich seh nur so aus... :P
Xion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 05.01.08 11:59 
hmm, also ich sehe keinen unterschied...ah doch, es ist mehr Umgebunglicht da.
Einloggen, um Attachments anzusehen!
_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)