Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 16:52

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: gluTessCallBack - combineCallback
BeitragVerfasst: So Jun 04, 2006 11:05 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Hallo,

kann mir von euch jemad helfen, den combinecallback in Delphi richtig zu nutzen?
Ich benötige ihn, da ich ein paar sich schneidende Polygone habe.

Anbei dei Definition, wie sie in C ist. Da ich aber leider von C keine ahnung habe, würde mich interessieren, wie das in delphi aussehen müßte. Inbesondere in bezug auf die Typen.

Code:
  1.  
  2. void combineCallback(GLdouble coords[3],
  3.                      GLdouble *vertex_data[4],
  4.                      GLfloat weight[4], GLdouble **dataOut )
  5. {
  6.    GLdouble *vertex;
  7.    int i;
  8.  
  9.    vertex = (GLdouble *) malloc(6 * sizeof(GLdouble));
  10.    vertex[0] = coords[0];
  11.    vertex[1] = coords[1];
  12.    vertex[2] = coords[2];
  13.    for (i = 3; i < 7; i++)
  14.       vertex[i] = weight[0] * vertex_data[0][i]
  15.                   + weight[1] * vertex_data[1][i]
  16.                   + weight[2] * vertex_data[2][i]
  17.                   + weight[3] * vertex_data[3][i];
  18.    *dataOut = vertex;
  19. }
  20.  


Danke
User69
//edit: Cpp highlightning


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 04, 2006 12:55 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Code:
  1. type TccVertex = Array[0..6] of GLdouble;
  2.  
  3. procedure combineCallback(coords: Array[0..2] of GLdouble;
  4.                           vertex_data: Array[0..3] of PGLdouble;
  5.                           weight: Array[0..3] of GLfloat;
  6.                           dataOut: Pointer); //<-eigentlich ein Pointer auf einen Pointer von Typ PGLdouble
  7. var
  8.   vertex: ^TccVertex;
  9.   i: Integer;
  10. begin
  11.   new(vertex);
  12.  
  13.   (vertex^)[0] := coords[0]; //<-funktioniert hoffentlich
  14.   (vertex^)[1] := coords[1];
  15.   (vertex^)[2] := coords[2];
  16.  
  17.   for i:= 3 to 6 do
  18.     (vertex^)[i] := weight[0] * (vertex_data[0]+i)^ //soll vertex_data[0][i] sein, Umsetzung ist wohl falsch. Man muss das i-te GLdouble nach vertex_data[0]^ bekommen
  19.                   + weight[1] * (vertex_data[1]+i)^
  20.                   + weight[2] * (vertex_data[2]+i)^
  21.                   + weight[3] * (vertex_data[3]+i)^;
  22.  
  23.   dataOut := vertex;
  24. end;


Achte auf die Kommentare, denn vertex_data[0]+i wird so nicht gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 04, 2006 13:37 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Besten dank so funktiononiert es (zumindest fast).

Ich habe noch
dataOut: Pointer in var dataOut: Pointer
geändert

und stdcall; eingefügt

den 2. teil mit der Auswertung von weight brauche ich nicht, also habe ich ihn hier nicht getestet.

Hier der funkionierende code:
Code:
  1.  
  2. type
  3.   TTessCoords= array[0..2] of GLdouble;
  4.   TTessVertex_data= array[0..3] of PGLdouble;  //evtl auch float (kommt drauf an, welchen typ man beim Tesslate benutzt)
  5.   TTessWeight= array[0..3] of GLFloat;
  6.   TTessDataOut= Pointer;
  7.  
  8. procedure gtCombine(coords: TTessCoords; vertex_data: TTessVertex_data; weight: TTessWeight; var DataOut: TTessDataOut); stdcall;
  9.   var fVertex: pVertex;
  10.   begin
  11.     new(fVertex);
  12.     fVertex^.Vertex[1]:= coords[0];
  13.     fVertex^.Vertex[2]:= coords[1];
  14.     fVertex^.Vertex[3]:= coords[2];
  15.     DataOut:= fVertex;
  16.   end;
  17.  


diesen code kötte ja jemand auch mit ins wiki stellen.

Grüße
User69


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]