DreiDe - 3D Engine basierend auf OpenGL

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7, 8, 9  Weiter

Neue Antwort erstellen

 

AngelNox

BeitragFr, Jul 22, 2005 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider funktionieren die Links nicht würde ich mir mal gerne ansehen!

http://vertex.art-fx.org/dreide.zip <- neue Version.
MFG
AngelNox
 

klepto2

BeitragFr, Jul 22, 2005 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Downloadlink hat sich seit dem erstem Post verändert.

http://vertex.art-fx.org/dreide221.zip

Kleiner Tip: Vielleicht erstmal den ganzen Thread durchlesen Wink
 

AngelNox

BeitragFr, Jul 22, 2005 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!
MFG
AngelNox

Vertex

BeitragDo, Jul 28, 2005 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
http://vertex.art-fx.org/dreide222.zip <- neue Version mit 3DS Loader.

MyEntity.Point(X, Y, Z) geht noch nicht, habe ich vergessen heraus zu nehmen.

Der 3DS Loader kann nun Materialien laden. Dabei werden Ambient-, Diffuse- und Specularcolor sowie Shininess unterstützt. Bei den Texturen wird U/V-Offset sowie U/V-Scale und Rotation mit geladen. Geplant sind noch Smoothinggroups, Bumpmaps, sowie Alphamaps für Alle Texturelayer.

Das Mesh sieht so scheiße aus, weil noch keine Normals berechnet werden können. Das 3DS Format beinhaltet keine Informationen über Vertexnormals, nur über Facenormals und eben über Smoothinggroups.

user posted image

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragMo, Aug 01, 2005 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
http://vertex.art-fx.org/dreide230.zip
- Multitexturing geht nun
- Dot3 Bumpmapping wie es scheint, ebenfalls(muss ich mal nen Example coden)
- Neue Methode SmoothNormals bei TSurface hinzugefügt
- Bug im Materialmodul behoben, hatte nämlich immer die Textur vom zuletzt gerenderten Material benutzt.

Der 3DS Loader benutzt keine SmoothingGroups, das dauert alles zu lange zum Berechnen, die Surfaces werden einfach nur gesmoothed.

So, der Pissvogel sieht nun so aus Smile
user posted image

Mal schauen, was ich Shadermäßig da noch zaubern kann.

mfg olli
vertex.dreamfall.at | GitHub

wunderkind

BeitragMo, Aug 01, 2005 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Mich als 3D-Nulpe beeindruckt dieses Projekt immer wieder aufs Neue. Nice work.

Vertex

BeitragMo, Aug 01, 2005 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Smile

Ich habe mal hier noch ein Beispiel für Multitexturing:
Code: [AUSKLAPPEN]
Strict

Framework Pub.DreiDe
Import Brl.FileSystem
Import Brl.PNGLoader
Import Brl.Pixmap
Import Brl.System

Global Pixmap   : TPixmap
Global Texture  : TTexture[2]
Global Material : TMaterial

Global Mesh    : TMesh
Global Surface : TSurface
Global Camera  : TCamera

TDreiDe.Graphics3D(640, 480, 0, 0, False)

Pixmap = LoadPixmap("Layer0.png")
Texture[0] = New TTexture
Texture[0].SetPixmap(Pixmap)
Texture[0].SetBlendMode(DDD_TEXTURE_REPLACE)

Pixmap = LoadPixmap("Layer1.png")
Texture[1] = New TTexture
Texture[1].SetPixmap(Pixmap)
Texture[1].SetBlendMode(DDD_TEXTURE_ADD)

Pixmap = Null
FlushMem()

Material = New TMaterial
Material.SetTexture(Texture[0], 0)
Material.SetTexture(Texture[1], 1)

Mesh = New TMesh
Surface = Mesh.CreateSurface()

Surface.CreateVertex(-0.5,  0.5, 0.0, 0.0, 0.0)
Surface.CreateVertex( 0.5,  0.5, 0.0, 1.0, 0.0)
Surface.CreateVertex( 0.5, -0.5, 0.0, 1.0, 1.0)
Surface.CreateVertex(-0.5, -0.5, 0.0, 0.0, 1.0)

Surface.CreateTriangle(2, 1, 0)
Surface.CreateTriangle(0, 3, 2)

Surface.UpdateVertices()
Surface.UpdateTriangles()

Surface.SetMaterial(Material)

Camera = New TCamera
Camera.SetPosition(0.0, 0.0, 2.0)

While Not KeyDown(KEY_ESCAPE)
   Texture[0].Turn(0.1)
   Texture[1].Translate(0.001, 0.0)

   Camera.Render()
   TDreiDe.Flip()
   FlushMem()
Wend

TDreiDe.EndGraphics()
End


Layer0.png
user posted image

Layer1.png
user posted image

Bei DDD_TEXTURE_ADD wird das ganze wie folgt berechnet:
Cr = Cp+Cs
Ar = Ap*As

Cr = Color Result, Cp = Color Previous, Cs = Color Source
Ar = Alpha result, Ap = Alpha Previous, Ar = Alpha Source

Hat ein Texel aus Layer 0 nun folgende RGBA Werte:
R1 = 0.5, G1 = 0.2, B1 = 0.8, A1 = 0.5

und ein Texel aus Layer 1 folgende RGBA Werte:
R2 = 0.1, G2 = 0.5, B2 = 0.4, A2 = 0.6

dann wird folgende Farbe angezeigt:
R = R1+R2 = 0.5+0.1 = 0.6
G = G1+G2 = 0.2+0.5 = 0.7
B = B1+B2 = 0.8+0.4 = 1.2 -> 1.0
A = 0.5*0.6 = 0.3

Für euch im RGBA Byte Format:
153, 179, 255, 77

Bei Modulate siehts dann z. B. ao aus:
Cr = Cp*Cs
Ar = Ap*As

Aber soetwas sollte in die Dokumentation Smile

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragDi, Aug 02, 2005 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
So neue Version mit behobenen Bug im 3DS Loader, und neuen Blendmode DDD_TEXTURE_MODULATE2X (Danke hier an Fredborg!)

http://vertex.art-fx.org/dreide231.zip

Das wichtigste ist aber
http://vertex.art-fx.org/dreide_examples.zip

Hier habe ich mal ein paar Beispiele zusammengefasst.
- 3ds loader
- cubemap
- fog
- info
- multitexturing
- parent-child
- spheremap
- surface
Inklusive Media.

Muss mich nochmal mit Cubemaps auseinander setzen, damit man die auch zum schnellen Berechnen von Bumpmaps benutzen kann.

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragDi, Aug 02, 2005 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
http://vertex.art-fx.org/dreide240.zip
http://vertex.art-fx.org/dreide_examples.zip

Dank Fredborg:
- Fixed Multitexturing error (it was in TSurface.Render)
- Fixed DDD_TEXTURE_BLEND error in TTexture.Render()
- Added TTexture.SetCoordset() and TTexture.GetCoordset()

- Max2D Support

Ich selber habe ein neues Modul genannt TVertexProgram hinzugefügt. VertexProgramme sind Vertexshader.

Beispiel-VP: (ist bei den Examples unter toonshading.bmx dabei):
Code: [AUSKLAPPEN]
!!ARBvp1.0

# Toonshader by Oliver Skawronek

# Matrices
PARAM ModelViewInv[4]        = { state.matrix.modelview.invtrans };
PARAM ModelViewProjection[4] = { state.matrix.mvp };

# Temporary variable
TEMP Position, EyeNormal, UVCoords, Cond, Result;

# Transform VertexPosition
DP4 Position.x, ModelViewProjection[0], vertex.position;
DP4 Position.y, ModelViewProjection[1], vertex.position;
DP4 Position.z, ModelViewProjection[2], vertex.position;
DP4 Position.w, ModelViewProjection[3], vertex.position;

# Transform VertexNormal
DP3 EyeNormal.x, ModelViewInv[0], vertex.normal;
DP3 EyeNormal.y, ModelViewInv[1], vertex.normal;
DP3 EyeNormal.z, ModelViewInv[2], vertex.normal;

# Copy VertexTexCoords in to UVCoords
MOV UVCoords, vertex.texcoord;

# U-Coord of Vertex = Dot Product between EyeNormal und LightDirection
DP3 UVCoords.x, EyeNormal, program.local[0];

# If UVCoord.x < 0.0 Then UVCoord.x = 0.0
MOV Cond.x, 0.0;
MOV Cond.y, UVCoords.y;
MOV Cond.z, UVCoords.z;
MOV Cond.w, UVCoords.w;

SGE Result, UVCoords, Cond;
MUL UVCoords, UVCoords, Result;

# Output the result
MOV result.position, Position;
MOV result.texcoord, UVCoords;
MOV result.color, vertex.color;
MOV result.color.w, 1.0;

END


Hier habe ich ein VP für Toonshading entwickelt. Er nimmt die Lichtrichtung als lokaler Parameter 0 entgegen(siehe toonshading.bmx VertexProgram.SetLocalParameter). Er berechnet dann daraus die U-Texturkoordinate was dann praktisch die Position in der Shadingpalette ist.

Screenshot:
user posted image

Tutorial dazu:
http://delphigl.com/script/do_...p;action=2

Werde demnächst noch ein VP für Bumpmapping schreiben.

Es gibt nun für VPs neue Methoden in TSurface. z.B.: MySurface.SetVertexAttributes(Vertex, X, Y, Z, W)

Im VP werden diese dann über vertex.attrib[1] ausgelesen.

FragmentProgram-Support kommt später.

TDreiDe.Flip() wird zu Flip(), TDreiDe.EndGraphics() zu EndGraphics()

Nach TDreiDe.UseMax2D() kann man ganz normal die Max2D Befehle benutzen.

Anmerkung:
- Mit neuen Max2D Support geht bei mir CubeMapping nichtmehr.

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragMi, Aug 03, 2005 3:06
Antworten mit Zitat
Benutzer-Profile anzeigen
http://vertex.art-fx.org/dreide_examples.zip

Ist jetzt ein Bumpmap Beispiel mit dabei!

user posted image

Hier das VP, weiß aber nicht 100% ob er korrekt berechnet:
Code: [AUSKLAPPEN]
!!ARBvp1.0

# Bumpshader by Oliver Skawronek

# Matrices
PARAM ModelViewInv[4]        = { state.matrix.modelview.invtrans };
PARAM ModelViewProjection[4] = { state.matrix.mvp };

# Temporary variable
TEMP Position, EyeNormal, Distance, Dot3, Color;

# TFormPoint
DP4 Position.x, ModelViewProjection[0], vertex.position;
DP4 Position.y, ModelViewProjection[1], vertex.position;
DP4 Position.z, ModelViewProjection[2], vertex.position;
DP4 Position.w, ModelViewProjection[3], vertex.position;

# TFormNormal
DP3 EyeNormal.x, ModelViewInv[0], vertex.normal;
DP3 EyeNormal.y, ModelViewInv[1], vertex.normal;
DP3 EyeNormal.z, ModelViewInv[2], vertex.normal;

# Distance = LightPosition-VertexPosition
SUB Distance, Position, program.local[0];

# Normalize
DP3 Distance.w, Distance, Distance;     # w = x*x+y*y+z*z
RSQ Distance.w, Distance.w;             # w = 1.0/sqrt(w)
MUL Distance.xyz, Distance, Distance.w; # x = x*w, y = y*w, z = z*w

# DotProduct
DP3 Dot3.x, EyeNormal, Distance;

# If DotProduct# < 0.0 Then DotProduct# = 0.0
SGE Dot3.y, Dot3.x, 0.0;
MUL Dot3.x, Dot3.x, Dot3.y;

# Calculate Color
MUL Color.x, Distance.x, Dot3.x;
MUL Color.y, Distance.y, Dot3.x;
MUL Color.z, Distance.z, Dot3.x;
MOV Color.w, vertex.color.w;

ADD Color.x, Color.x, 1.0;
ADD Color.y, Color.y, 1.0;
ADD Color.z, Color.z, 1.0;

MUL Color.x, Color.x, 0.5;
MUL Color.y, Color.y, 0.5;
MUL Color.z, Color.z, 0.5;

# Output the result
MOV result.position, Position;
MOV result.color, Color;
MOV result.texcoord, vertex.texcoord;
MOV result.texcoord[1], vertex.texcoord[1];

END


Meine Fresse, schon um 3 Uhr...

mfg olli
vertex.dreamfall.at | GitHub

wunderkind

BeitragMi, Aug 03, 2005 9:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Fresse, hast du 'ne Ausdauer. Wir sollten einen dicken Code-Award bereitstellen und ihn dir auf den Rücken schnallen Smile!

YellowRider

Ehemaliger Admin

BeitragMi, Aug 03, 2005 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Großen Respekt auch von mir. Nur der Fehler von Gestern Abend scheint immernoch dadrin zu sein:

user posted image

Sad

cya YR

Vertex

BeitragMi, Aug 03, 2005 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Wunderkind: Ja, zum Teil mache ich das auch, damit ich was zum Vorzeigen habe, wenn ich mich fürs nächste Jahr für ein halbjähriges Praktikum bewerben muss, und das sollte möglichst in einer Spieleschmiede sein.

YellowRider: Ich weiß leider nicht, warum der Alpha mit rein macht.
Kannst du mal das hier auskommentieren Code: [AUSKLAPPEN]
Material.SetVertexProgram(VertexProgram)
?

Oder in toon.asm ganz unten vor END noch
Code: [AUSKLAPPEN]
MOV result.color.w, 1.0;
einfügen, und testen?

Geht der bumpmapping.bmx bei dir?

Ansonsten werde ich vllt. einen Abstarkten Type namens TShader einführen, den man dann mit VertexPrograms, FragmentPrograms, glSlang Vertex- und Fragmentshader belegen kann.

glSlang unterstützt leider meine Grafikkarte nicht, aber ich habe auf NVIDIA Seite Cg entdeckt, die denke ich aus einer C änlichen Sprache in die Assembler ARBvp1 kompilieren kann. Mal sehen, was sich daraus basteln lässt.

Event. kann ich heute noch einen B3D Loader vorstellen.

mfg olli
vertex.dreamfall.at | GitHub

YellowRider

Ehemaliger Admin

BeitragMi, Aug 03, 2005 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, bumpmapping.bmx geht bei mir.

wenn ich Material.SetVertexProgram(VertexProgram) auskommentiere, ist das ganze Mesh nicht mehr sichtbar, bei Material.SetTexture(Texture) ist es weiß.
MOV result.color.w, 1.0; bringt keine Änderung. Sad

edit: ahh, wenn ich Texture.SetClamp(DDD_TEXTURE_CLAMP, DDD_TEXTURE_CLAMP) raus mache gehts. Aber nur mit 3 Farben:
user posted image

cya

Vertex

BeitragMi, Aug 03, 2005 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe die Examples erneuert:
http://vertex.art-fx.org/dreide_examples.zip

Danke hier an YellowRider, auf soetwas Schwachsinniges wie Clamping wäre ich nie gekommen.

Der Shader hatte vorher auf U = 0.0 geclampt. Aufgrund des aktiven Texturefilterings wurden die Ränder der Textur verwoschen, anscheinend inkl. Alphakanal.

Habe darauf hin das Clamping im Shader auf 0.01 geändert:
Code: [AUSKLAPPEN]
# If UVCoord.x < 0.0 Then UVCoord.x = 0.01
SGE Result.x, UVCoords.x, 0.0;
MUL UVCoords.x, UVCoords.x, Result.x;

SLT Result.x, UVCoords.x, 0.01;
MUL Result.x, Result.x, 0.01;
ADD UVCoords.x, UVCoords.x, Result.x;


In den Examples lasse ich nun auch das Licht mal um Mickey kreisen. Der Bumpmapping-Shader habe ich aktualisiert, werde denke ich aber auch nur noch die Lichtrichtung übergeben lassen.

Event. wird das Animationssystem mit Bones über VPs ablaufen, ist sicherlich schneller, als die CPU die Vertexpositions transformieren zu lassen.

mfg olli
vertex.dreamfall.at | GitHub

Vertex

BeitragMi, Aug 03, 2005 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
http://vertex.art-fx.org/dreide241.zip
http://vertex.art-fx.org/dreide_examples.zip

Mit FragmentProgram-Support und neuem Plastic Example.

user posted image

Hier der Vergleich meines Plastichshaders links in ARBvp1.0 und ARBfp1.0 und rechts von RenderMonkey-Example in VertexShader 2.0 und PixelShader 2.0.

http://oss.sgi.com/projects/og...rogram.txt

Event. lässt sich das mal als Example umsetzen:
http://www.bonzaisoftware.com/water_tut.html

mfg olli
vertex.dreamfall.at | GitHub

bruZard

BeitragMi, Aug 03, 2005 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das Modul eben mal mit den Examples getestet und kann nur sagen: Meinen aller größten Respekt!!!
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

YellowRider

Ehemaliger Admin

BeitragMi, Aug 03, 2005 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert einwandfrei... sowohl auf meiner 6600GT auch auf meiner FX5200 Smile Nur was ich schade find, dass keine glSlang shader unterstützt werden (Vertexs Karte unterstützt das nicht) Sad

Aber sonst einfach geil Smile

cya

YellowRider

Ehemaliger Admin

BeitragDo, Aug 04, 2005 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich hab mich mal ein bisschen mit Vertex- und Fragment programs beschäftigt. Dabei ist das rausgekommen:

user posted image

Download (389KB)

Wenn beim Starten eine leere Fehlermeldung kommt, unterstützt eure Grafikkarte kein GL_ARB_fragment_program.
Ich werde mich noch weiter damit beschäftigen, damit es hinterher auch mit Cubemaps funktioniert Smile.

edit: Ich hab ein paar kleine Änderungen vollzogen.
Über verbesserungsvorschläge würd ich mich auch freuen Wink.

cya YR

bruZard

BeitragFr, Aug 05, 2005 7:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Schnieke! Smile
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7, 8, 9  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group