Tout cela au programme de ma nouvelle video avec le code associé sur Github
https://github.com/tothpaul/Delphi/tree/master/3D
Tout cela au programme de ma nouvelle video avec le code associé sur Github
https://github.com/tothpaul/Delphi/tree/master/3D
SI tu veux j'ai a peu près la même chose avec des Objets TMesh
Salut, ben c'est ce que je fais dans la démo FMX non ?
https://github.com/tothpaul/Delphi/t...Torus/FMXDemo1
Bonjour Paul,
tout simplement excellent. Je suis retombé dans ma jeunesse avec la 3d software en modeX et tp7.
Ta classe de parallélisation est vraiment excellente et très simple d'utilisation. Je vais essayer de voir si c'est portable avec Lazarus: A priori je pense que oui
Ton tuto est pile-poil dans le but que je me suis fixé pour un de mes "gros" projet avec Lazarus. J'adhère à fond.
Pour la manipulation des vecteurs j'ai codé une bibliothèque en assembleur utilisant les SIMD (sse1 à 3, le sse4 n'apportant rien en terme de performances. Et un début avec AVX ). Elle contient également une unité optimisée pour la trigonométrie et un début d'unité sur le raymarching provenant d'un des gurus dans ce domaine Inigo Quilez. Cette bibliothèque est réalisé sous Lazarus et est disponible sur mon github. Pour l'instant je suis concentré sur le code pour 64bits (le 32 bits est pris en charge mais non synchronisé avec les procédures en 64bits). Crois-tu que ma bibliothèque pourrait-être portée sous Delphi avec la version CE, sans trop de difficultés ?
Merci de ta réponse.
En attendant voici 2 vidéos de mes démos que je suis content de partager avec vous tous.
Le rendu est entièrement en software avec une solution personnelle de gestion des bitmaps (optimisée à l'ancienne comme pour le modeX). J'utilise bien sûr ma bibliothèque sur les vecteurs pour les calculs. Le moteur de rendu lui, est similaire à shadertoy ou GLSL Sandbox. Ce qui permet de recréer des shaders GLSL entièrement en pascal en moins rapide bien évidemment.
Le 1er effet est du 100% raymarching : une simple sphère qui se déforme avec éclairage en phong + un plan à damier pour le sol
Le 2eme effet, un simple ensemble de Mandelbrot
Le 3eme effet un petit shader simplifié provenant de GLSL Sandox pour comparer
Le 4eme effet une simple déformation planaire style "tunnel mapping"
Désolé d'avance pour la qualité des vidéos qui n'est pas au top. (faudrait que je change d'outil de capture vidéo)
La deuxième vidéo, un petit clin d’œil à une de tes démos sur le "voxel alla Commanche"
PS : Mes sources ne sont pas encore disponibles, mais le seront dans un avenir proche. J'ai encore pas mal de petites choses à fignoler
A bientôt
- "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
- "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
- "La simplicité est la sophistication suprême" - Léonard De Vinci
- "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei
Mes projets sur Github - Blog - Site DVP
Salut, excellent
je ne sais pas si FreePascal a finalement adopté les noms composés pour les unités (Execute.Parallelization), la dernière fois que j'ai tenté un portage je suis tombé directement sur ce point (c'est le cas de le dire).
et j'utilise de plus en plus des Record avec méthodes, voir des type dans des types et de temps en temps des generic...
je ne sais pas si tu as vu, mais il existe maintenant une version Community Edition de Delphi, c'est un version Pro gratuite qui est accessible à toute personne dont l'activité pour laquelle elle l'utilise ne lui rapporte pas plus de 5.000€ par an. C'est parfait pour faire des projets OpenSource sur son temps libre même si c'est plus éloigné du concept GPL que FreePascal je te l'accorde.
Paul
Salut
Merci, oui j'ai vu et j'ai installé cet version de Delphi Community Edition. Ce que je me demandais surtout par rapport a ma bibliothèque sur les vecteurs et matrices c'etait si le code assembleur au niveau des accès des registres est le même et surtout est ce que Delphi aligne les données, ou si non existe-t-il des commandes préprocesseurs code comme dans FPC genre {$CODEALIGN RECORDMIN=16}. L'alignement est primordiale pour obtenir les meilleurs performances.
Dans freepascal il y a également une option qui permet d'obtenir un fichier .S. Ce fichier contient toutes les informations du code compilé c'est à dire les registres utilisés et permet de voir si les paramètres se trouvent dans la pile ou si ils "débordent"
Exemple de fichier S sur un Vecteur 4D en single avec les opérations d'addition et de soustraction
Si ce genre de fichier est généré avec Delphi cela serait d'une grande aide, pour connaitre les registres utilisés
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 .section .text.n_glzvectormath$_$tglzvector4f_$__$$_plus$tglzvector4f$tglzvector4f$$tglzvector4f,"x" .balign 16,0x90 .globl GLZVECTORMATH$_$TGLZVECTOR4F_$__$$_plus$TGLZVECTOR4F$TGLZVECTOR4F$$TGLZVECTOR4F GLZVECTORMATH$_$TGLZVECTOR4F_$__$$_plus$TGLZVECTOR4F$TGLZVECTOR4F$$TGLZVECTOR4F: # Var A located in register rdx # Var B located in register r8 # Var $result located in register rcx # [vectormath_vector4f_win64_sse_imp.inc] # [4] asm # Register rax,rcx,rdx,r8,r9,r10,r11 allocated # [5] movaps xmm0,[A] movaps (%rdx),%xmm0 # [10] addps xmm0, XMMWORD PTR [B] //xmm1 addps (%r8),%xmm0 # [12] movaps [RESULT], xmm0 movaps %xmm0,(%rcx) # Register rax,rcx,rdx,r8,r9,r10,r11 released # [13] end; ret .section .text.n_glzvectormath$_$tglzvector4f_$__$$_minus$tglzvector4f$tglzvector4f$$tglzvector4f,"x" .balign 16,0x90 .globl GLZVECTORMATH$_$TGLZVECTOR4F_$__$$_minus$TGLZVECTOR4F$TGLZVECTOR4F$$TGLZVECTOR4F GLZVECTORMATH$_$TGLZVECTOR4F_$__$$_minus$TGLZVECTOR4F$TGLZVECTOR4F$$TGLZVECTOR4F: # Var A located in register rdx # Var B located in register r8 # Var $result located in register rcx # [16] asm # Register rax,rcx,rdx,r8,r9,r10,r11 allocated # [17] movaps xmm0,[A] movaps (%rdx),%xmm0 # [22] subps xmm0, XMMWORD PTR [B] //xmm1 subps (%r8),%xmm0 # [24] movaps [RESULT], xmm0 movaps %xmm0,(%rcx) # Register rax,rcx,rdx,r8,r9,r10,r11 released # [25] end; ret
Je vais faire quelques tests pour voir.
Merci d'avance
A bientôt
- "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
- "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
- "La simplicité est la sophistication suprême" - Léonard De Vinci
- "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei
Mes projets sur Github - Blog - Site DVP
BeanzMaster: J'aime bien celui-là qui est gratuit
Merci Papy je vais testé
- "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
- "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
- "La simplicité est la sophistication suprême" - Léonard De Vinci
- "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei
Mes projets sur Github - Blog - Site DVP
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager