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

Aktuelle Zeit: Sa Jul 12, 2025 23:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Namensgebung von Header!
BeitragVerfasst: Fr Sep 30, 2005 18:53 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Moin,

atm schreibe ich ja einen "Header", der bestimmte Funktionen Enthalten soll, und einen gewissen Standart hat( VBO's, Texturen, FBO, shader; Davon ist auch schon einiges drin! )!
Das ganze ist natürlich in C# geschrieben, um was es hier allerdings nicht geht.

Ums kurz zu machen:

Ich bekomme zwar alles Mögliche hin( Auch wenn Teilweisse mit biegen und Brechen( Dafür läuft meine VBO Klasse jetzt Super ) ), allerdings habe ich Probleme wie ich die einzellnen Teile benennen soll!

Im Moment sieht das ungefähr von den Namenspaces so aus:
OpenGL.Header ( Lars's Header )
OpenGL.Device
OpenGL.Device.Textures
OpenGL.Device.nVertexBufferObject
OpenGL.Device.nFramebufferObject
OpenGL.Math.Types.Vector

Ich glaube ich brauche garnicht zu sagen warum es mir nicht gefällt!

Z.b. ist die Klasse Device eine Capselung von zahlreichen Klassen, und hat auch eigene Funktionen( z.b. das Rendern wird von dort aus geregelt )! Hat aber mit dem eigentlichen Device nichts zu tun.

Jetzt hoffe ich das ihr mir etwas bei der Namensgebung helfen könnt( Immerhin sollte er ja eigentlich für das SDK o.ä. sein ), dabei geht es mir einfach nur um die Sinvolle nutzung von Namenspaces!

mfg

Speedmaster

Edit: Wer sich den Aktuellen Header mal angucken möchte, er ist im Anhang!
Edit2: Nicht mal ein Titel für den Thread viel mir ein! :mrgreen:


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 30, 2005 19:30 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ich würde die gl Funktionen in dem Namespace OpenGL belassen, weil sie ja OpenGL im direkten Sinne sind. Die ganzen Klassen könnten alle zusammen in die Namespaces OpenGL.Utils und OpenGL.Math, da sie dann von OpenGL abhängen und so der Konvention entsprechen nachdem die Klassen Abhängigkeiten in den übergeordneten Namespace haben sollen.
Einen Namespace für eine Klasse bringt ja keinen Vorteil bei der Ordnung und beim Managed DX hat man ja auch die Klassen aus Direct3D und D3DX in einem Namespace zusammengefaßt.
Desweiteren gibt es noch in der Hilfe .Net Framework SDK\Technical Reference\Design Guidelines for Class Library Developers\Namespace Naming Guidelines


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 30, 2005 21:00 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Hört sich gut an, mir bleiben aber noch ein paar Fragen offen:
- Wie die jetzige "Device" Klasse nennen?
- Soll ich die Vectordefinitionen auch in OpenGL.Math direkt reinschmeissen oder in ein anderen Namenspace?

Zudem denke ich wäre vielleicht noch eine Unterteilung von Extensions, Normalen Routinen( Oder Klassen ) und der Capslung dieser von Vorteil! Was denkst du?

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 30, 2005 21:27 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Die Klasse kann man eigentlich ruhig Device nennen. Wieso nicht. Alternativer Name wäre RenderContext, was sich mehr nach OpenGL anhört. Die ganzen speziellen Vektordefinitionen, würde ich bis auf die grundlegenden Vektoren weglassen und stattdessen jedem erlauben seinen eigenen Vektortype zu definieren. Wenn man dann einen VertexBuffer erstellt wird der Type mittels Reflection untersucht und es werden automatisch die entsprechenden Vertex Arrays eingerichtet. Denn ansonsten sind das zu viele Varianten und um wirklich nützlich zu sein muß jede Klasse Konvertierungen zu anderen und natürlich auch Rechenoperationen unterstützen.
Anstelle der Draw Funktionen kann man auch einen benutzerdefinierten Konvertierungsoperator von dem Vektortype nach float[] definieren, so dass man die Vektoren dann direkt an gl.Vertex3fv() übergeben kann. Die Draw Funktionen sind zu speziell um in jedem Fall nützlich zu sein, zu groß sind die Anwendungsbereiche.

Eine Unterteilung bezüglich Extensions usw.. bringt ja keinen großen Nutzen. Für den Benutzer ist es eigentlich unerheblich wie die intern genutzte Extension heißt, wenn er eine VertexBuffer Klasse haben möchte.

Die Sache mit den Handles(int) ist nicht schön objektorientiert. Hier könnte man direkt bei AddVBO ein VertexBuffer Object und keine ID zurückgeben. Denn dann braucht man immer zwei Dinge, den Manager und die ID um sinnvoll damit arbeiten zu können. Wenn du die Klasse VertexBufferObject nicht herausgeben willst, dann mach ein Interface und gib bei AddVBO nur das Interface mit dem öffentlichen Teil zurück, aber ID's sind nicht praktisch genug.
Der VertexBuffer sollte auch in der Lage sein, seinen Speicher zu verwalten. Man hat ja manchmal mehrere kleinere Objekte und möchte nicht immer einen Vertex Buffer dafür erstellen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 01, 2005 02:02 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Also den Quellcode kann jeder gerne haben! :?
Es ist ja sowie so egal ob ich jetzt den Header jetzt OS mache oder man ihn per Reflector Untersucht( Die Namen abändern geht ja nicht, da man die Assembly dannach nicht mehr benutzen könnte )!

Zum Namen von "Device":

Nun gut, ich könnte es weiterhin so nennen, allerdings ist es wie gesagt kein Context, sondern eine Kapslung!

Zu den VBO's:
Ich denke ich werde dort ein 2 Schneidiges Schwert fahren und dem User 2 Varianten anbieten.
- Einmal eine wo man die Kontrolle über seine VBO's komplett selber übernimmt, der Manager allerdings sich alle ID's Merkt um beim Freigeben sauber zu arbeiten!
- Und einen Manager der die Kontrolle behält, der User aber die Möglichkeit hat die Object-ID über ein property rauszufinden!

Das mit dem übergeben der Vertexdaten funktioniert Super(!!!), man kann mit einer Funktion sämtliche von OpenGL unterstützten Formate in den Speicher Hochladen, hier mal ein Beispielcode:
Code:
  1.  
  2. MainVertexData = new Vertex_C4UB_V3F[6];
  3.  
  4. // Zuweissung der Daten
  5.  
  6. MainVBO = VertexBufferObjectList.AddVBO();
  7. VertexBufferObjectList.BufferData(MainVBO, MainVertexData, gl.C4UB_V3F, Marshal.SizeOf(SizeTest));


Was mich eben wundert ist, das ich garnicht das VertexFormat angeben habe( in <> ), den die Funktion sieht so aus:
Code:
  1. public bool BufferData<VertexFormat>(int index, VertexFormat[] Data, int pFormat, int SizeFormat)

Vermutlich sieht er das das Array dasselbe ist und lässt es einfach weg!

Das mit der Speicherverwaltung würde ich ja gerne so Regeln das man an eine bestimmte Stelle im VBO schreiben kann, unter anderem auch um sich die Arbeit zu ersparen, bei Änderungen jedesmal das Ganze VBO neu hochzuladen!


Über die Vectortypen bin ich mir noch im Unklaren was ich damit mache, ich werde es sehen!

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 03, 2006 16:42 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Damit mal eine Erklärung da ist für die Ständigen Fragen im Forum:

Auch wenns keiner glauben mag, ich Arbeite an dem Header weiter, und inzwischen ist er sogar zimlich Amtlich, besonderst da die investierte Zeit noch nicht so hoch ist, und ich ihn komplett alleine bastel.
Auch wenn es mit der Namensgebung immer noch nicht so funktionieren will wie es sollte.

Hier mal als Anhang die neuste Version.
Ein Beispiel ist auch dabei.

Tatsächlich ist vom alten Header nichts mehr zu sehen.

mfg

Speedmaster


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 06, 2006 11:57 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Etwas Feedback wäre schon nicht schlecht.

EDIT:
Neue Assembly hochgeladen, damit der Code unten Funktioniert.


Hier mal ein Einfacher Beispielcode:
Code:
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using System.Drawing;
  6. using System.Windows.Forms;
  7. using MOGL;
  8. using MOGL.Mathematic;
  9.  
  10. namespace OGLTest
  11. {
  12.     class OGLFormTest : GLExtendetForm
  13.     {
  14.         private VertexBuffer<CustomVertex.PositionNormalTextur> iSphere;
  15.         private Shader iPhongShader;
  16.         private Light iLight;
  17.  
  18.         public OGLFormTest():base(new Size(400,400))
  19.         {
  20.             // Init our Scene
  21.             this.InitScene();
  22.             // Enter Main Loop
  23.             this.Run();
  24.         }
  25.  
  26.         private void InitScene()
  27.         {
  28.             // Setup the Camera
  29.             Camera.Position = new Vector3f(0, 0, 120);
  30.             Camera.FarClipping = 10000;
  31.  
  32.             // Setup OpenGL
  33.             Manager.Culling.Enabled = false;
  34.             Manager.Texturing.Texture2D = true;
  35.             Manager.DepthTest = true;
  36.             Manager.Lighting.Enabled = false;
  37.  
  38.             // Create a Sphere
  39.             iSphere = Geometry.Sphere(new Vector3f(), 40f, 80);
  40.  
  41.             // Load a Phong Shader
  42.             iPhongShader = new Shader("phong.vs", "phong.fp");
  43.             iPhongShader.BindShader();
  44.  
  45.             // Init a Light
  46.             iLight = new Light(Lights.Light0, new ColorValue(1.0f, 1.0f, 1.0f, 1.0f),
  47.                                new ColorValue(0.3f, 0.3f, 0.3f, 1f), new ColorValue(0.2f, 0.4f, 0.2f, 1f),
  48.                                new Vector4f(30f, 0f, 10f, 1f), 50f, new ColorValue(0.4f, 0.4f, 0.4f, 1f),
  49.                                new ColorValue(0.8f, 0.8f, 0.8f, 1f));
  50.  
  51.             Render += new RenderEventHandler(OGLFormTest_Render);
  52.             MoveFrame += new MoveFrameEventHandler(OGLFormTest_MoveFrame);
  53.  
  54.             FormBorderStyle = FormBorderStyle.None;
  55.             // Handle the Keyboard Inputs
  56.             KeyDown += new KeyEventHandler(OGLFormTest_KeyDown);
  57.         }
  58.  
  59.         void OGLFormTest_KeyDown(object sender, KeyEventArgs e)
  60.         {
  61.             switch (e.KeyCode)
  62.             {
  63.                 case Keys.Escape:
  64.                     this.Close();
  65.                     break;
  66.                 default:
  67.                     break;
  68.             }
  69.         }
  70.  
  71.         private Vector3f iPosition = new Vector3f();
  72.  
  73.         void OGLFormTest_MoveFrame(float timespan)
  74.         {
  75.             // Move the Scene here
  76.         }
  77.  
  78.         void OGLFormTest_Render()
  79.         {
  80.             // Render the Scene
  81.  
  82.             // Draw the Sphere
  83.             iSphere.DrawBuffer();
  84.         }
  85.     }
  86. }
  87.  


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 07, 2006 17:28 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
----DELETED-----

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]