Autor Beitrag
Blackbird
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Do 12.09.02 16:05 
Hi Leute...folgendes Problem habe ich:

Ich möchte einfach nix weiter tun als ein Dreieck zu zeichnen und dieses mit gltranslatef etwas "nach hinten" auf der Z-Achse verschieben.
Dazu folgender Code:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadidentity();
glbegin(gl_triangles);
glvertex3f(0.0,0.0,0.0);
glvertex3f(0.5,1.0,0.0);
glvertex3f(1.0,0.0,0.0);
glend;


So...bis hier klappt noch alles gut...aber wenn ich dann glTranslate hinzufüge gibs n schwarzen Bildschirm. Das ganze sieht dann so aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadidentity();
gltranslatef(0.0,0.0,-6.0);
glbegin(gl_triangles);
glvertex3f(0.0,0.0,0.0);
glvertex3f(0.5,1.0,0.0);
glvertex3f(1.0,0.0,0.0);
glend;


Obwohl ich GLenable(GL_Depth_Test) verwendet habe.
Diese Zeichnung steht übrigens in der FormPaint Prozedur.

Ich versteh' nicht wo der Fehler liegt, in anderen Demos gehts ja auch.

Bis dann...
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: Fr 13.09.02 10:20 
Bist du sicher, dass -6 überhaupt sichtbar ist? Probier' doch mal 6 aus...
Desweiteren (und wenn ich drüber nachdenke, viel wichtiger) solltest du die beiden letzten glVertex3f-Aufrufe vertauschen - standardmäßig musst du Vertices nämlich im Uhrzeigersinn angeben ;c)

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
Blackbird Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54



BeitragVerfasst: Fr 13.09.02 14:30 
Ja -6 muss es sein, sonst befindet sich das ganze ja hinter der Kamera.
Außerdem, sind die Vertices nicht doch im Urhzeigersinn gezeichnet ? -links, oben,rechts ?

Außerdem ist mir aufgefallen das es mit glTranslate functioniert, allerdings nur wenn ich glloadidentity; weg lasse.
Hier einfach mal der ganze Code(und hey: auch wenn simpel is und vielleicht ein wenig merkwürdig geschrieben - aber ich bin ja erst OpenGL Anfänger)

Der folgende Quellcode gibs das erwünschte Ergebnis:

ausblenden volle Höhe 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:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,opengl12, ExtCtrls;

type
  TForm1 = class(TForm)
    MainTimer: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);

    procedure draw;
    procedure FormResize(Sender: TObject);
  private
    fdc: HDC;
    frc: HGLRC;
    an: TGLFloat;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.FormCreate(Sender: TObject);
var dummy: Hpalette;
begin

if not initopengl then raise exception.Create('Fehler beim Initialisieren!');

fdc := Getdc(handle);
frc:= Createrenderingcontext(fdc,[opdoublebuffered],32,0,0,0,0,dummy);

ActivateRenderingContext(fdc,frc);
glClearColor(0.0, 0.0, 0.0, 0.0);      // Black Background
  glShadeModel(GL_SMOOTH);                 // Enables Smooth Color Shading
  glClearDepth(1.0);                       // Depth Buffer Setup
  glEnable(GL_DEPTH_TEST);                 // Enable Depth Testing

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DeactivateRenderingContext();
DestroyrenderingContext(frc);
closeopengl;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin

draw;

end;

procedure TForm1.draw;
begin

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer

gltranslatef(0,0,-6);
glbegin(gl_triangles);
glvertex3f(0.0,0.0,0.0);
glvertex3f(0.5,1.0,0.0);
glvertex3f(1.0,0.0,0.0);
glend;
swapbuffers(fdc);
end;


procedure TForm1.FormResize(Sender: TObject);
begin
    glViewport(0, 0, Width, Height);
    glMatrixMode(GL_PROJECTION);
      glLoadIdentity;
    gluPerspective(35, Width / Height, 1, 100);
end;

end.



muss ich gluPerspective(35, Width / Height, 1, 100); und so nach jedem Object wieder aufrufen ???