DreiDe - 3D Engine basierend auf OpenGL
Übersicht

Gehe zu Seite Zurück 1, 2, 3, 4, 5, 6, 7, 8, 9 Weiter
AngelNox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Leider funktionieren die Links nicht würde ich mir mal gerne ansehen!
http://vertex.art-fx.org/dreide.zip <- neue Version. |
||
MFG
AngelNox |
klepto2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
AngelNox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke! | ||
MFG
AngelNox |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() ![]() Mal schauen, was ich Shadermäßig da noch zaubern kann. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mich als 3D-Nulpe beeindruckt dieses Projekt immer wieder aufs Neue. Nice work. | ||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke ![]() 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 ![]() Layer1.png ![]() 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 ![]() mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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: ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://vertex.art-fx.org/dreide_examples.zip
Ist jetzt ein Bumpmap Beispiel mit dabei! ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meine Fresse, hast du 'ne Ausdauer. Wir sollten einen dicken Code-Award bereitstellen und ihn dir auf den Rücken schnallen ![]() |
||
![]() |
YellowRiderEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Großen Respekt auch von mir. Nur der Fehler von Gestern Abend scheint immernoch dadrin zu sein:
![]() ![]() cya YR |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
YellowRiderEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() edit: ahh, wenn ich Texture.SetClamp(DDD_TEXTURE_CLAMP, DDD_TEXTURE_CLAMP) raus mache gehts. Aber nur mit 3 Farben: ![]() cya |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://vertex.art-fx.org/dreide241.zip
http://vertex.art-fx.org/dreide_examples.zip Mit FragmentProgram-Support und neuem Plastic Example. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
YellowRiderEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Funktioniert einwandfrei... sowohl auf meiner 6600GT auch auf meiner FX5200 ![]() ![]() Aber sonst einfach geil ![]() cya |
||
![]() |
YellowRiderEhemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, ich hab mich mal ein bisschen mit Vertex- und Fragment programs beschäftigt. Dabei ist das rausgekommen:
![]() 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 ![]() edit: Ich hab ein paar kleine Änderungen vollzogen. Über verbesserungsvorschläge würd ich mich auch freuen ![]() cya YR |
||
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schnieke! ![]() |
||
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
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group