petite tête de mickey qui tourne...
4 sphere une lumiere et beaucoup de calcul pour une tete de mickey.
Source / Exemple :
Comment#
Asmik.Asm
94/95
Comment#
;Jumps
.586P
;.387
;Locals @@
Vrais Equ 0
Faux Equ 255
Vector Struc ; 12 Octets de Vecteur;
Vector_1 DD ? ;
Vector_2 DD ? ;
Vector_3 DD ? ;
Vector EndS
Matrice Struc ; 48 Octets de Matrice
Matrice1_1 DD ?
Matrice1_2 DD ?
Matrice1_3 DD ?
Matrice2_1 DD ?
Matrice2_2 DD ?
Matrice2_3 DD ?
Matrice3_1 DD ?
Matrice3_2 DD ?
Matrice3_3 DD ?
Matrice EndS
; Quelque Structure Lourde
V3t Struc ; definition d'une coordonnee 12 Octets
X DD 0
Y DD 0
Z DD 0
V3t Ends
; ; Definition d'un Pigment
Ct Struc ; 12 Octets de pigment;
R DD 0 ; 0.0 -> 1.0
G DD 0
B DD 0
Ct Ends
RayT Struc ; Definition d'un rayon 24 Octets
RP V3t <0,0,0>
RN V3t <0,0,0>
RayT EndS
SphereT Struc ; definition d'une sphere
M V3t <0,0,0> ; coordonnee centre
Sqrr DD 0 ; Rayon Single
SphereT EndS
; Definition d'une Surface
SurfT Struc
SOd Ct <0,0,0>
SOe DD 0 ; Single
SN DD 0 ; Single
SRefl Dw 0 ; Boolean ; reflection
STrans Dw 0 ; Boolean ; Transparence
SSpecC Ct <0,0,0>;
STransC Ct <0,0,0>;
SColProc DW 0 ; Offset Procedure de Couleur
STypProc DW 0 ; Offset Procedure de Typage
SurfT Ends
StartC Segment Para Public Use16 'CODE'
Assume CS:StartC,DS:StartC,SS:StartC
Org 100h
StartHere:
Jmp Demarre
Db ' Pov2Com V1.0 '
Db ' B.Y.O 1995 Pigment '
;Include Pigment.asm ; Liste des Pigments de pov pr?traduite
; Pigment
Gray05 Dd 03D4CCCCDh,03D4CCCCDh,03D4CCCCDh;
Gray10 Dd 03DCCCCCDh,03DCCCCCDh,03DCCCCCDh;
Gray15 Dd 03E19999Ah,03E19999Ah,03E19999Ah;
Gray20 Dd 03E4CCCCDh,03E4CCCCDh,03E4CCCCDh;
Gray25 Dd 03E800000h,03E800000h,03E800000h;
Gray30 Dd 03E99999Ah,03E99999Ah,03E99999Ah;
Gray35 Dd 03EB33333h,03EB33333h,03EB33333h;
Gray40 Dd 03ECCCCCDh,03ECCCCCDh,03ECCCCCDh;
Gray45 Dd 03EE66666h,03EE66666h,03EE66666h;
Gray50 Dd 03F000000h,03F000000h,03F000000h;
Gray55 Dd 03F0CCCCDh,03F0CCCCDh,03F0CCCCDh;
Gray60 Dd 03F19999Ah,03F19999Ah,03F19999Ah;
Gray65 Dd 03F266666h,03F266666h,03F266666h;
Gray70 Dd 03F333333h,03F333333h,03F333333h;
Gray75 Dd 03F400000h,03F400000h,03F400000h;
Gray80 Dd 03F4CCCCDh,03F4CCCCDh,03F4CCCCDh;
Gray85 Dd 03F59999Ah,03F59999Ah,03F59999Ah;
Gray90 Dd 03F666666h,03F666666h,03F666666h;
Gray95 Dd 03F733333h,03F733333h,03F733333h;
DimGray Dd 03EA8A8B1h,03EA8A8B1h,03EA8A8B1h;
DimGrey Dd 03EA8A8B1h,03EA8A8B1h,03EA8A8B1h;
Gray Dd 03F40C0BEh,03F40C0BEh,03F40C0BEh;
Grey Dd 03F40C0BEh,03F40C0BEh,03F40C0BEh;
LightGray Dd 03F28A8B1h,03F28A8B1h,03F28A8B1h;
LightGrey Dd 03F28A8B1h,03F28A8B1h,03F28A8B1h;
VLightGrey Dd 03F4CCCCDh,03F4CCCCDh,03F4CCCCDh;
White Dd 03F800000h,03F800000h,03F800000h;
Red Dd 03F800000h,000000000h,000000000h;
Green Dd 000000000h,03F800000h,000000000h;
Blue Dd 000000000h,000000000h,03F800000h;
Yellow Dd 03F800000h,03F800000h,000000000h;
Cyan Dd 000000000h,03F800000h,03F800000h;
Magenta Dd 03F800000h,03F800000h,03F800000h;
Black Dd 000000000h,000000000h,000000000h;
Aquamarine Dd 03EE0E0EBh,03F5BDBE4h,03F13939Ah;
BlueViolet Dd 03F1F9F02h,03EBEBEBEh,03F1F9F99h;
Brown Dd 03F25A5A9h,03E28A8B1h,03E28A8B1h;
CadetBlue Dd 03EBEBEBEh,03F1F9F99h,03F1F9F99h;
Coral Dd 03F800000h,03EFEFEF8h,000000000h;
CornflowerBlue Dd 03E848494h,03E848494h,03EDEDEDBh;
DarkGreen Dd 03E3CBCCFh,03E9E9EA1h,03E3CBCCFh;
DarkOliveGreen Dd 03E9E9EA1h,03E9E9EA1h,03E3CBCCFh;
DarkOrchid Dd 03F19999Ah,03E48C8ACh,03F4CCCCDh;
DarkSlateBlue Dd 03ED6D6DCh,03E0C8C93h,03F0E8E93h;
DarkSlateGray Dd 03E3CBCCFh,03E9E9EA1h,03E9E9EA1h;
DarkSlateGrey Dd 03E3CBCCFh,03E9E9EA1h,03E9E9EA1h;
DarkTurquoise Dd 03EE0E0EBh,03F13939Ah,03F5BDBE4h;
Firebrick Dd 03F0E8E93h,03E0C8C93h,03E0C8C93h;
ForestGreen Dd 03E0C8C93h,03F0E8E93h,03E0C8C93h;
Gold Dd 03F4CCCCDh,03EFEFEF8h,03E48C8ACh;
Goldenrod Dd 03F5BDBE4h,03F5BDBE4h,03EE0E0EBh;
GreenYellow Dd 03F13939Ah,03F5BDBE4h,03EE0E0EBh;
IndianRed Dd 03E9E9EA1h,03E3CBCCFh,03E3CBCCFh;
Khaki Dd 03F1F9F99h,03F1F9F99h,03EBEBEBEh;
LightBlue Dd 03F3FBFC6h,03F58D8DCh,03F58D8DCh;
LightSteelBlue Dd 03F0F8F8Ah,03F0F8F8Ah,03F3CBCBEh;
LimeGreen Dd 03E48C8ACh,03F4CCCCDh,03E48C8ACh;
Maroon Dd 03F0E8E93h,03E0C8C93h,03ED6D6DCh;
MediumAquamarine Dd 03E48C8ACh,03F4CCCCDh,03F19999Ah;
MediumBlue Dd 03E48C8ACh,03E48C8ACh,03F4CCCCDh;
MediumForestGreen Dd 03ED6D6DCh,03F0E8E93h,03E0C8C93h;
MediumGoldenrod Dd 03F6AEAEAh,03F6AEAEAh,03F2DADA7h;
MediumOrchid Dd 03F13939Ah,03EE0E0EBh,03F5BDBE4h;
MediumSeaGreen Dd 03E848494h,03EDEDEDBh,03E848494h;
MediumSlateBlue Dd 03EFEFEF8h,03F800000h,000000000h;
MediumSpringGreen Dd 03EFEFEF8h,03F800000h,000000000h;
MediumTurquoise Dd 03EE0E0EBh,03F5BDBE4h,03F5BDBE4h;
MediumVioletRed Dd 03F5BDBE4h,03EE0E0EBh,03F13939Ah;
MidnightBlue Dd 03E3CBCCFh,03E3CBCCFh,03E9E9EA1h;
Navy Dd 03E0C8C93h,03E0C8C93h,03F0E8E93h;
NavyBlue Dd 03E0C8C93h,03E0C8C93h,03F0E8E93h;
Orange Dd 03F800000h,03F000000h,000000000h;
OrangeRed Dd 03F800000h,03EFEFEF8h,000000000h;
Orchid Dd 03F5BDBE4h,03EE0E0EBh,03F5BDBE4h;
PaleGreen Dd 03F0F8F8Ah,03F3CBCBEh,03F0F8F8Ah;
Pink Dd 03F3CBCBEh,03F0F8F8Ah,03F0F8F8Ah;
Plum Dd 03F6AEAEAh,03F2DADA7h,03F6AEAEAh;
Salmon Dd 03EDEDEDBh,03E848494h,03E848494h;
SeaGreen Dd 03E0C8C93h,03F0E8E93h,03ED6D6DCh;
Sienna Dd 03F0E8E93h,03ED6D6DCh,03E0C8C93h;
SkyBlue Dd 03E48C8ACh,03F19999Ah,03F4CCCCDh;
SlateBlue Dd 000000000h,03EFEFEF8h,03F800000h;
SpringGreen Dd 000000000h,03F800000h,03EFEFEF8h;
SteelBlue Dd 03E0C8C93h,03ED6D6DCh,03F0E8E93h;
Tan Dd 03F5BDBE4h,03F13939Ah,03EE0E0EBh;
Thistle Dd 03F58D8DCh,03F3FBFC6h,03F58D8DCh;
Turquoise Dd 03F2DADA7h,03F6AEAEAh,03F6AEAEAh;
Violet Dd 03E9E9EA1h,03E3CBCCFh,03E9E9EA1h;
VioletRed Dd 03F4CCCCDh,03E48C8ACh,03F19999Ah;
Wheat Dd 03F58D8DCh,03F58D8DCh,03F3FBFC6h;
YellowGreen Dd 03F19999Ah,03F4CCCCDh,03E48C8ACh;
SummerSky Dd 03E6147AEh,03F30A3D7h,03F5EB852h;
RichBlue Dd 03EB33333h,03EB33333h,03F2B851Fh;
Brass Dd 03F35C28Fh,03F266666h,03E851EB8h;
Copper Dd 03F3851ECh,03EE66666h,03E4CCCCDh;
Bronze Dd 03F0CCCCDh,03EF0A3D7h,03E0F5C29h;
Bronze2 Dd 03F266666h,03EFAE148h,03E75C28Fh;
Silver Dd 03F666666h,03F68F5C3h,03F7AE148h;
BrightGold Dd 03F59999Ah,03F59999Ah,03DCCCCCDh;
OldGold Dd 03F4F5C29h,03F35C28Fh,03E6B851Fh;
Feldspar Dd 03F51EB85h,03F11EB85h,03EEB851Fh;
Quartz Dd 03F59999Ah,03F59999Ah,03F733333h;
NeonPink Dd 03F800000h,03EDC28F6h,03F47AE14h;
DarkPurple Dd 03F07AE14h,03DF5C28Fh,03EF0A3D7h;
NeonBlue Dd 03E99999Ah,03E99999Ah,03F800000h;
CoolCopper Dd 03F59999Ah,03F07AE14h,03DCCCCCDh;
MandarinOrange Dd 03F63D70Ah,03EF0A3D7h,03E4CCCCDh;
LightWood Dd 03F68F5C3h,03F428F5Ch,03F266666h;
MediumWood Dd 03F266666h,03F000000h,03EC7AE14h;
DarkWood Dd 03F051EB8h,03EBD70A4h,03E851EB8h;
SpicyPink Dd 03F800000h,03DE147AEh,03F2E147Bh;
SemiSweetChoc Dd 03ED70A3Dh,03E851EB8h,03E19999Ah;
BakersChoc Dd 03EB851ECh,03E4CCCCDh,03DB851ECh;
Flesh Dd 03F75C28Fh,03F4CCCCDh,03F30A3D7h;
NewTan Dd 03F6B851Fh,03F47AE14h,03F1EB852h;
NewMidnightBlue Dd 000000000h,000000000h,03F1C28F6h;
VeryDarkBrown Dd 03EB33333h,03E23D70Ah,03E0F5C29h;
DarkBrown Dd 03EB851ECh,03E800000h,03E4CCCCDh;
DarkTan Dd 03F170A3Dh,03ED1EB85h,03E9EB852h;
GreenCopper Dd 03EA3D70Ah,03EFAE148h,03EEB851Fh;
DkGreenCopper Dd 03E947AE1h,03EEB851Fh,03EDC28F6h;
DustyRose Dd 03F051EB8h,03EC7AE14h,03EC7AE14h;
HuntersGreen Dd 03E051EB8h,03EBD70A4h,03E9EB852h;
Scarlet Dd 03F0CCCCDh,03DB851ECh,03DB851ECh;
; Nom Associe au pigment
_Gray05 Db 'Gray05',0
_Gray10 Db 'Gray10',0
_Gray15 Db 'Gray15',0
_Gray20 Db 'Gray20',0
_Gray25 Db 'Gray25',0
_Gray30 Db 'Gray30',0
_Gray35 Db 'Gray35',0
_Gray40 Db 'Gray40',0
_Gray45 Db 'Gray45',0
_Gray50 Db 'Gray50',0
_Gray55 Db 'Gray55',0
_Gray60 Db 'Gray60',0
_Gray65 Db 'Gray65',0
_Gray70 Db 'Gray70',0
_Gray75 Db 'Gray75',0
_Gray80 Db 'Gray80',0
_Gray85 Db 'Gray85',0
_Gray90 Db 'Gray90',0
_Gray95 Db 'Gray95',0
_DimGray Db 'DimGray',0
_DimGrey Db 'DimGrey',0
_Gray Db 'Gray',0
_Grey Db 'Grey',0
_LightGray Db 'LightGray',0
_LightGrey Db 'LightGrey',0
_VLightGrey Db 'VLightGrey',0
_White Db 'White',0
_Red Db 'Red',0
_Green Db 'Green',0
_Blue Db 'Blue',0
_Yellow Db 'Yellow',0
_Cyan Db 'Cyan',0
_Magenta Db 'Magenta',0
_Black Db 'Black',0
_Aquamarine Db 'Aquamarine',0
_BlueViolet Db 'BlueViolet',0
_Brown Db 'Brown',0
_CadetBlue Db 'CadetBlue',0
_Coral Db 'Coral',0
_CornflowerBlue Db 'CornflowerBlue',0
_DarkGreen Db 'DarkGreen',0
_DarkOliveGreen Db 'DarkOliveGreen',0
_DarkOrchid Db 'DarkOrchid',0
_DarkSlateBlue Db 'DarkSlateBlue',0
_DarkSlateGray Db 'DarkSlateGray',0
_DarkSlateGrey Db 'DarkSlateGrey',0
_DarkTurquoise Db 'DarkTurquoise',0
_Firebrick Db 'Firebrick',0
_ForestGreen Db 'ForestGreen',0
_Gold Db 'Gold',0
_Goldenrod Db 'Goldenrod',0
_GreenYellow Db 'GreenYellow',0
_IndianRed Db 'IndianRed',0
_Khaki Db 'Khaki',0
_LightBlue Db 'LightBlue',0
_LightSteelBlue Db 'LightSteelBlue',0
_LimeGreen Db 'LimeGreen',0
_Maroon Db 'Maroon',0
_MediumAquamarine Db 'MediumAquamarine',0
_MediumBlue Db 'MediumBlue',0
_MediumForestGreen Db 'MediumForestGreen',0
_MediumGoldenrod Db 'MediumGoldenrod',0
_MediumOrchid Db 'MediumOrchid',0
_MediumSeaGreen Db 'MediumSeaGreen',0
_MediumSlateBlue Db 'MediumSlateBlue',0
_MediumSpringGreen Db 'MediumSpringGreen',0
_MediumTurquoise Db 'MediumTurquoise',0
_MediumVioletRed Db 'MediumVioletRed',0
_MidnightBlue Db 'MidnightBlue',0
_Navy Db 'Navy',0
_NavyBlue Db 'NavyBlue',0
_Orange Db 'Orange',0
_OrangeRed Db 'OrangeRed',0
_Orchid Db 'Orchid',0
_PaleGreen Db 'PaleGreen',0
_Pink Db 'Pink',0
_Plum Db 'Plum',0
_Salmon Db 'Salmon',0
_SeaGreen Db 'SeaGreen',0
_Sienna Db 'Sienna',0
_SkyBlue Db 'SkyBlue',0
_SlateBlue Db 'SlateBlue',0
_SpringGreen Db 'SpringGreen',0
_SteelBlue Db 'SteelBlue',0
_Tan Db 'Tan',0
_Thistle Db 'Thistle',0
_Turquoise Db 'Turquoise',0
_Violet Db 'Violet',0
_VioletRed Db 'VioletRed',0
_Wheat Db 'Wheat',0
_YellowGreen Db 'YellowGreen',0
_SummerSky Db 'SummerSky',0
_RichBlue Db 'RichBlue',0
_Brass Db 'Brass',0
_Copper Db 'Copper',0
_Bronze Db 'Bronze',0
_Bronze2 Db 'Bronze2',0
_Silver Db 'Silver',0
_BrightGold Db 'BrightGold',0
_OldGold Db 'OldGold',0
_Feldspar Db 'Feldspar',0
_Quartz Db 'Quartz',0
_NeonPink Db 'NeonPink',0
_DarkPurple Db 'DarkPurple',0
_NeonBlue Db 'NeonBlue',0
_CoolCopper Db 'CoolCopper',0
_MandarinOrange Db 'MandarinOrange',0
_LightWood Db 'LightWood',0
_MediumWood Db 'MediumWood',0
_DarkWood Db 'DarkWood',0
_SpicyPink Db 'SpicyPink',0
_SemiSweetChoc Db 'SemiSweetChoc',0
_BakersChoc Db 'BakersChoc',0
_Flesh Db 'Flesh',0
_NewTan Db 'NewTan',0
_NewMidnightBlue Db 'NewMidnightBlue',0
_VeryDarkBrown Db 'VeryDarkBrown',0
_DarkBrown Db 'DarkBrown',0
_DarkTan Db 'DarkTan',0
_GreenCopper Db 'GreenCopper',0
_DkGreenCopper Db 'DkGreenCopper',0
_DustyRose Db 'DustyRose',0
_HuntersGreen Db 'HuntersGreen',0
_Scarlet Db 'Scarlet',0
; Table des Couleurs
PigmentTab:
Dw Offset Gray05 , Offset _Gray05
Dw Offset Gray10 , Offset _Gray10
Dw Offset Gray15 , Offset _Gray15
Dw Offset Gray20 , Offset _Gray20
Dw Offset Gray25 , Offset _Gray25
Dw Offset Gray30 , Offset _Gray30
Dw Offset Gray35 , Offset _Gray35
Dw Offset Gray40 , Offset _Gray40
Dw Offset Gray45 , Offset _Gray45
Dw Offset Gray50 , Offset _Gray50
Dw Offset Gray55 , Offset _Gray55
Dw Offset Gray60 , Offset _Gray60
Dw Offset Gray65 , Offset _Gray65
Dw Offset Gray70 , Offset _Gray70
Dw Offset Gray75 , Offset _Gray75
Dw Offset Gray80 , Offset _Gray80
Dw Offset Gray85 , Offset _Gray85
Dw Offset Gray90 , Offset _Gray90
Dw Offset Gray95 , Offset _Gray95
Dw Offset DimGray , Offset _DimGray
Dw Offset DimGrey , Offset _DimGrey
Dw Offset Gray , Offset _Gray
Dw Offset Grey , Offset _Grey
Dw Offset LightGray , Offset _LightGray
Dw Offset LightGrey , Offset _LightGrey
Dw Offset VLightGrey , Offset _VLightGrey
Dw Offset White , Offset _White
Dw Offset Red , Offset _Red
Dw Offset Green , Offset _Green
Dw Offset Blue , Offset _Blue
Dw Offset Yellow , Offset _Yellow
Dw Offset Cyan , Offset _Cyan
Dw Offset Magenta , Offset _Magenta
Dw Offset Black , Offset _Black
Dw Offset Aquamarine , Offset _Aquamarine
Dw Offset BlueViolet , Offset _BlueViolet
Dw Offset Brown , Offset _Brown
Dw Offset CadetBlue , Offset _CadetBlue
Dw Offset Coral , Offset _Coral
Dw Offset CornflowerBlue , Offset _CornflowerBlue
Dw Offset DarkGreen , Offset _DarkGreen
Dw Offset DarkOliveGreen , Offset _DarkOliveGreen
Dw Offset DarkOrchid , Offset _DarkOrchid
Dw Offset DarkSlateBlue , Offset _DarkSlateBlue
Dw Offset DarkSlateGray , Offset _DarkSlateGray
Dw Offset DarkSlateGrey , Offset _DarkSlateGrey
Dw Offset DarkTurquoise , Offset _DarkTurquoise
Dw Offset Firebrick , Offset _Firebrick
Dw Offset ForestGreen , Offset _ForestGreen
Dw Offset Gold , Offset _Gold
Dw Offset Goldenrod , Offset _Goldenrod
Dw Offset GreenYellow , Offset _GreenYellow
Dw Offset IndianRed , Offset _IndianRed
Dw Offset Khaki , Offset _Khaki
Dw Offset LightBlue , Offset _LightBlue
Dw Offset LightSteelBlue , Offset _LightSteelBlue
Dw Offset LimeGreen , Offset _LimeGreen
Dw Offset Maroon , Offset _Maroon
Dw Offset MediumAquamarine , Offset _MediumAquamarine
Dw Offset MediumBlue , Offset _MediumBlue
Dw Offset MediumForestGreen, Offset _MediumForestGreen
Dw Offset MediumGoldenrod , Offset _MediumGoldenrod
Dw Offset MediumOrchid , Offset _MediumOrchid
Dw Offset MediumSeaGreen , Offset _MediumSeaGreen
Dw Offset MediumSlateBlue , Offset _MediumSlateBlue
Dw Offset MediumSpringGreen, Offset _MediumSpringGreen
Dw Offset MediumTurquoise , Offset _MediumTurquoise
Dw Offset MediumVioletRed , Offset _MediumVioletRed
Dw Offset MidnightBlue , Offset _MidnightBlue
Dw Offset Navy , Offset _Navy
Dw Offset NavyBlue , Offset _NavyBlue
Dw Offset Orange , Offset _Orange
Dw Offset OrangeRed , Offset _OrangeRed
Dw Offset Orchid , Offset _Orchid
Dw Offset PaleGreen , Offset _PaleGreen
Dw Offset Pink , Offset _Pink
Dw Offset Plum , Offset _Plum
Dw Offset Salmon , Offset _Salmon
Dw Offset SeaGreen , Offset _SeaGreen
Dw Offset Sienna , Offset _Sienna
Dw Offset SkyBlue , Offset _SkyBlue
Dw Offset SlateBlue , Offset _SlateBlue
Dw Offset SpringGreen , Offset _SpringGreen
Dw Offset SteelBlue , Offset _SteelBlue
Dw Offset Tan , Offset _Tan
Dw Offset Thistle , Offset _Thistle
Dw Offset Turquoise , Offset _Turquoise
Dw Offset Violet , Offset _Violet
Dw Offset VioletRed , Offset _VioletRed
Dw Offset Wheat , Offset _Wheat
Dw Offset YellowGreen , Offset _YellowGreen
Dw Offset SummerSky , Offset _SummerSky
Dw Offset RichBlue , Offset _RichBlue
Dw Offset Brass , Offset _Brass
Dw Offset Copper , Offset _Copper
Dw Offset Bronze , Offset _Bronze
Dw Offset Bronze2 , Offset _Bronze2
Dw Offset Silver , Offset _Silver
Dw Offset BrightGold , Offset _BrightGold
Dw Offset OldGold , Offset _OldGold
Dw Offset Feldspar , Offset _Feldspar
Dw Offset Quartz , Offset _Quartz
Dw Offset NeonPink , Offset _NeonPink
Dw Offset DarkPurple , Offset _DarkPurple
Dw Offset NeonBlue , Offset _NeonBlue
Dw Offset CoolCopper , Offset _CoolCopper
Dw Offset MandarinOrange , Offset _MandarinOrange
Dw Offset LightWood , Offset _LightWood
Dw Offset MediumWood , Offset _MediumWood
Dw Offset DarkWood , Offset _DarkWood
Dw Offset SpicyPink , Offset _SpicyPink
Dw Offset SemiSweetChoc , Offset _SemiSweetChoc
Dw Offset BakersChoc , Offset _BakersChoc
Dw Offset Flesh , Offset _Flesh
Dw Offset NewTan , Offset _NewTan
Dw Offset NewMidnightBlue , Offset _NewMidnightBlue
Dw Offset VeryDarkBrown , Offset _VeryDarkBrown
Dw Offset DarkBrown , Offset _DarkBrown
Dw Offset DarkTan , Offset _DarkTan
Dw Offset GreenCopper , Offset _GreenCopper
Dw Offset DkGreenCopper , Offset _DkGreenCopper
Dw Offset DustyRose , Offset _DustyRose
Dw Offset HuntersGreen , Offset _HuntersGreen
Dw Offset Scarlet , Offset _Scarlet
Dw -1 , -1
Align 16
; les constantes de Mik.Pas
GradBase DD 90
Xmax DD 159 ;319
Ymax DD 119 ;239
Xmax2 DD 159 ;319
Ymax2 DD 119 ;239
PicSizeWc DD 10.0
PixRat DD 1.0
Half1 DD 0.5
Quater DD 0.25
aQuater DD -2
Is1 DD 1.0
IsZero DD 0.0
Mul255 DD 255
Infinity DD 060AD78ECh ; 10E20
Epsilon DD 02EDBE6FFh ; 10E-10
Pow10S DD -10.0
MaxRekDep Equ 5
AttenEps DD 0.01
Abank_R DW 0
DestSeg DW 0A000h
Xrotate DD 0.0 ; Rotation sur l'axe des z !!
DD 0.0
DD 1.0
Eye DD 0.0 ; V3t.X
DD -20.0 ; V3t.Y
DD 0.1 ; V3t.Z
LightV DD -20.0 ; V3t.X
DD -20.0 ; V3t.Y
DD 10.0 ; V3t.Z
LightC DD 1.0 ; Ct.R
DD 1.0 ; Ct.G
DD 1.0 ; Ct.B
AmbC DD 0.15 ; Ct.R
DD 0.15 ; Ct.G
DD 0.15 ; Ct.B
; Base a y = -1.0 pour rotation visuelle autour du point 0,0,0
; Les Trois Spheres representant le Mickey
K1 DD 0.0 ; SphereT.m.X
DD -1.0 ; SphereT.m.Y
DD 0.0 ; SphereT.m.Z
DD 4.0 ; SphereT.Sqrr
K2 DD -1.50 ; SphereT.m.X
DD -1.00 ; SphereT.m.Y
DD 1.50 ; SphereT.m.Z
DD 1.00 ; SphereT.Sqrr
K3 DD +1.50 ; SphereT.m.X
DD -1.00 ; SphereT.m.Y
DD 1.50 ; SphereT.m.Z
DD 1.00 ; SphereT.Sqrr
K4 DD 0.0 ; SphereT.m.X
DD -2.625; SphereT.m.Y
DD 0.0 ; SphereT.m.Z
DD 0.25 ; SphereT.Sqrr
ObnrMax Dw 4
ObnrIs Dw Offset K1 ; Equ 1 ; Quatre Sphere = un Mickey
Dw Offset K2 ; Equ 2 ;
Dw Offset K3 ; Equ 3 ;
Dw Offset K4 ; Equ 4 ;
K1Surf DD 1.0 ;Ct <1.0,1.0,1.0>
DD 0.5
DD 1.0
DD 100.0
DD 1.0
Dw Faux
Dw Faux
DD 0.5 ;Ct < 0.5,0.5,0.5 >
DD 0.5
DD 0.5
DD 1.0 ;Ct < 1.0,1.0,1.0 >
DD 1.0
DD 1.0
Dw Offset EqOdProc
Dw Offset EqNrmProc
K2Surf DD 0.5 ;Ct <0.5,0.6,0.7>
DD 0.6
DD 0.7
DD 100.0
DD 1.0
Dw Faux
Dw Faux
DD 0.5 ;Ct < 0.5,0.5,0.5 >
DD 0.5
DD 0.5
DD 1.0 ;Ct < 1.0,1.0,1.0 >
DD 1.0
DD 1.0
Dw Offset EqOdProc
Dw Offset EqNrmProc
K3Surf: ;Ct <0,0,0>
DD 0.2
DD 0.3
DD 0.4
DD 100.0
DD 1.0
Dw Faux
Dw Faux
DD 0.5 ;Ct < 0.5,0.5,0.5 >
DD 0.5
DD 0.5
DD 1.0 ;Ct < 1.0,1.0,1.0 >
DD 1.0
DD 1.0
Dw Offset EqOdProc
Dw Offset EqNrmProc
K4Surf: ;Ct <1.0,1.0,1.0>
DD 0.9
DD 0.8
DD 0.7
DD 100.0
DD 1.0
Dw Faux
Dw Faux
DD 0.5 ;Ct < 0.5,0.5,0.5 >
DD 0.5
DD 0.5
DD 1.0 ;Ct < 1.0,1.0,1.0 >
DD 1.0
DD 1.0
Dw Offset EqOdProc
Dw Offset EqNrmProc
SurfIs Dw Offset K1Surf
Dw Offset K2Surf
Dw Offset K3Surf
Dw Offset K4Surf
; Les Data en valorisations au demarrage
Ra RayT <>
Vh V3t <>
Vr V3t <>
Hv V3t <>
Nh V3t <>
Cct Ct <>
KeyStop Dw Faux
; Quelque Macros debilisante
CoordCopy Macro De,Vers
Mov Eax,Dword Ptr Cs:[De.X]
Mov Dword Ptr Cs:[Vers.X],Eax
Mov Eax,Dword Ptr Cs:[De.Y]
Mov Dword Ptr Cs:[Vers.Y],Eax
Mov Eax,Dword Ptr Cs:[De.Z]
Mov Dword Ptr Cs:[Vers.Z],Eax
EndM
ColorCopy Macro De,Vers
Mov Eax,Dword Ptr Cs:[De.R]
Mov Dword Ptr Cs:[Vers.R],Eax
Mov Eax,Dword Ptr Cs:[De.G]
Mov Dword Ptr Cs:[Vers.G],Eax
Mov Eax,Dword Ptr Cs:[De.B]
Mov Dword Ptr Cs:[Vers.B],Eax
EndM
; Additif pour avoir un rotation de vecteur !
; Variable Rattache a DefineMatrix
MatriceE Matrice <>
Grad DD 0
GradSin DD 0
GradCos DD 0
GradCosNeg DD 0
Theta DD 0
DefineMatrix Proc Near
Mov Dword Ptr Theta,Eax
; Calcul le Sinus & le Cosinus de Grad
Finit
Nop
FLD Dword Ptr Theta
FSinCos
Fwait
Nop
FSTP DWORD Ptr GradCos ; Depile St(0) Dans GradCos
FSTP DWORD Ptr GradSin ; Depile St(0) Dans GradSin
; Calcul 1-GradCos
FLD Dword Ptr GradCos
FLD1
FSub St(0),St(1)
FST Dword Ptr GradCosNeg ; Stoque St(0)
Fwait
Nop
FLD (Vector Ptr ES:[SI]).Vector_1 ; Charge Vecteur X
FSQRT ; Calcul Racine Carre de Vecteur X
FMUL St(0),ST(1) ; Multiplie sqrt(VecteurX) * 1-GradCos
FLD Dword Ptr GradCos ; Charge GradCos
FADD St(0),St(1) ; Addition St(0),St(1);
FSTP (Matrice Ptr DS:[DI]).Matrice1_1
Fwait
Nop
Fld Dword Ptr GradCosNeg
Fld (Vector Ptr ES:[SI]).Vector_2
FSQRT ; Calcul Racine Carre de Vecteur X
FMUL St(0),ST(1) ; Multiplie sqrt(VecteurX) * 1-GradCos
FLD Dword Ptr GradCos ; Charge GradCos
FADD St(0),St(1) ; Addition St(0),St(1);
FSTP (Matrice Ptr DS:[DI]).Matrice2_2
Fwait
Nop
Fld Dword Ptr GradCosNeg
Fld (Vector Ptr ES:[SI]).Vector_3
FSQRT ; Calcul Racine Carre de Vecteur X
FMUL St(0),ST(1) ; Multiplie sqrt(VecteurX) * 1-GradCos
FLD Dword Ptr GradCos ; Charge GradCos
FADD St(0),St(1) ; Addition St(0),St(1);
FSTP (Matrice Ptr DS:[DI]).Matrice3_3
Fwait
Nop
Finit
Nop
FLD Dword Ptr GradSin
FLD (Vector Ptr ES:[SI]).Vector_3
FMul St(0),St(1)
FSTP (Matrice Ptr DS:[DI]).Matrice1_2
FLD (Vector Ptr ES:[SI]).Vector_2
FMul St(0),St(1)
Fstp (Matrice Ptr DS:[DI]).Matrice1_3
FLD (Vector Ptr ES:[SI]).Vector_1
FMul St(0),St(1)
Fstp (Matrice Ptr DS:[DI]).Matrice2_3
Fwait
Nop
Finit
Nop
FLD Dword Ptr GradCosNeg
FLD (Vector Ptr ES:[SI]).Vector_1
Fmul St(0),St(1)
FLD (Vector Ptr ES:[SI]).Vector_2
Fmul st(0),St(1)
FLD (Matrice Ptr DS:[DI]).Matrice1_2
FLDZ
FADD St(0),St(2)
FSUB St(0),St(1)
FSTP (Matrice Ptr DS:[DI]).Matrice2_1
FXCH St(1)
FADD St(0),St(1)
FSTP (Matrice Ptr DS:[DI]).Matrice1_2
FLD (Vector Ptr ES:[SI]).Vector_3
Fmul St(0),St(2)
FldZ
Fadd St(0),St(1)
Fld (Matrice Ptr DS:[DI]).Matrice2_3
FXCH St(1)
Fsub St(0),St(1)
FSTP (Matrice Ptr DS:[DI]).Matrice3_1 ;
Fadd St(0),St(1)
FSTP (Matrice Ptr DS:[DI]).Matrice1_3
FLD (Matrice Ptr DS:[DI]).Matrice2_3
FLD (Vector Ptr ES:[SI]).Vector_2
Fmul St(0),St(5)
Fld (Vector Ptr ES:[SI]).Vector_3
Fmul St(0),St(1)
FldZ
Fadd St(0),St(1)
Fsub St(0),St(3)
FSTP (Matrice Ptr DS:[DI]).Matrice3_2 ;
Fadd St(0),St(2)
FSTP (Matrice Ptr DS:[DI]).Matrice2_3 ;
Finit
Fwait
Nop
RetN
DefineMatrix EndP
NouvRot Vector <?>
Rotation Proc Near
Finit
Nop
FLD (Matrice Ptr DS:[DI]).Matrice1_1
FLD (Vector Ptr ES:[SI]).Vector_1
Fmul St(0),St(1)
Fld (Matrice Ptr DS:[DI]).Matrice1_2
Fld (Vector Ptr ES:[SI]).Vector_2
Fmul St(0),St(1)
Fadd St(0),St(2);
Fld (Matrice Ptr DS:[DI]).Matrice1_3
Fld (Vector Ptr ES:[SI]).Vector_3
Fmul St(0),St(1)
Fadd St(0),St(2);
Fstp Dword Ptr NouvRot.Vector_1
Finit
Nop
FLD (Matrice Ptr DS:[DI]).Matrice2_1
FLD (Vector Ptr ES:[SI]).Vector_1
Fmul St(0),St(1)
Fld (Matrice Ptr DS:[DI]).Matrice2_2
Fld (Vector Ptr ES:[SI]).Vector_2
Fmul St(0),St(1)
Fadd St(0),St(2);
Fld (Matrice Ptr DS:[DI]).Matrice2_3
Fld (Vector Ptr ES:[SI]).Vector_3
Fmul St(0),St(1)
Fadd St(0),St(2);
Fstp Dword Ptr NouvRot.Vector_2
Finit
Nop
FLD (Matrice Ptr DS:[DI]).Matrice3_1
FLD (Vector Ptr ES:[SI]).Vector_1
Fmul St(0),St(1)
Fld (Matrice Ptr DS:[DI]).Matrice3_2
Fld (Vector Ptr ES:[SI]).Vector_2
Fmul St(0),St(1)
Fadd St(0),St(2);
Fld (Matrice Ptr DS:[DI]).Matrice3_3
Fld (Vector Ptr ES:[SI]).Vector_3
Fmul St(0),St(1)
Fadd St(0),St(2);
Fstp Dword Ptr NouvRot.Vector_3
Mov Eax,Dword Ptr NouvRot.Vector_1
Mov (Vector Ptr ES:[SI]).Vector_1,Eax
Mov Eax,Dword Ptr NouvRot.Vector_2
Mov (Vector Ptr ES:[SI]).Vector_2,Eax
Mov Eax,Dword Ptr NouvRot.Vector_3
Mov (Vector Ptr ES:[SI]).Vector_3,Eax
RetN
Rotation EndP
CopyColor Proc Near
Mov Cx,3
enHaut:
Mov Eax,Dword Ptr Cs:[Si]
Mov Dword Ptr Cs:[Di],Eax
Add Di,4
Add Si,4
Dec Cx
Jnz enHaut
RetN
CopyColor EndP
;þþ
EqOdProc proc Near
RetN
EqOdProc Endp
EqNrmProc proc Near
Retn
EqNrmProc Endp
;þþ Validation
Align 16
Norm Proc ; DS:DI pointe sur V V3t ; ES:BX Pointe sur Single en Sortie
FLD (V3t Ptr DS:[DI]).X ; û(xý+yý+zý)
FMul St,St(0) ;
FLD (V3t Ptr DS:[DI]).Y ;
FMul St,St(0) ;
FADD ;
FLD (V3t Ptr DS:[DI]).Z ;
FMul St,St(0) ;
FADD
FSQRT
FSTP Dword Ptr CS:[BX]
RetN
Norm EndP
;þþ Validation
Align 16
NormSphere Proc ; DS:DI pointe sur V V3t ; ES:BX Pointe sur Single en Sortie
FLD (V3t Ptr DS:[DI]).X ; (xý+yý+zý)
FMul St,St(0) ;
FLD (V3t Ptr DS:[DI]).Y ;
FMul St,St(0) ;
FAdd ;
FLD (V3t Ptr DS:[DI]).Z ;
FMul St,St(0) ;
FAdd ;
FSTP Dword Ptr CS:[BX] ;
RetN
NormSphere EndP
;þþ Validation
Align 16
NormCylY Proc ; DS:DI pointe sur V V3t ; ES:BX Pointe sur Single en Sortie
FLD (V3t Ptr DS:[DI]).X ; (xý+zý)
FMul St,St(0) ;
FLD (V3t Ptr DS:[DI]).Z ;
FMul St,St(0) ;
FADD
FSTP Dword Ptr CS:[BX]
RetN
NormCylY EndP
;þþ Validation
Align 16
Norm_ Proc ; DS:DI pointe sur V V3t ; St(0) = Resultat
FLD (V3t Ptr DS:[DI]).X ; û(xý+yý+zý)
FMul St,St(0) ;
FLD (V3t Ptr DS:[DI]).Y ;
FMul St,St(0)
FADD
FLD (V3t Ptr DS:[DI]).Z
FMul St,St(0)
FADD
FSQRT
RetN
Norm_ EndP
;þþ Validation
Align 16
NormSphere_ Proc ; DS:DI pointe sur V V3t ; St(0) = Resultat
FLD (V3t Ptr DS:[DI]).X ; û(xý+yý+zý)
FMul St,St(0) ;
FLD (V3t Ptr DS:[DI]).Y ;
FMul St,St(0)
FADD
FLD (V3t Ptr DS:[DI]).Z
FMul St,St(0)
FADD
FSQRT
RetN
NormSphere_ EndP
;þþ Validation
Align 16
Normalize Proc ; Assume DS:[DI] Pointe sur V3t
Enter 4,0
Call Norm_
FST Dword Ptr Cs:[Bp-4]
Call ErrEps
FLD (V3t Ptr CS:[DI]).X
FLD Dword Ptr Cs:[Bp-4]
FDIV
FSTP (V3t Ptr CS:[DI]).X
FLD (V3t Ptr CS:[DI]).Y
FLD Dword Ptr Cs:[Bp-4]
FDIV
FSTP (V3t Ptr CS:[DI]).Y
FLD (V3t Ptr CS:[DI]).Z
FLD Dword Ptr Cs:[Bp-4]
FDIV
FSTP (V3t Ptr CS:[DI]).Z
Leave
RetN
Normalize EndP
Even
Vsum Proc Near ; Assume ES:[SI] Valeur en Sortie
; DS:DI a:V3t Ds:Bx b:V3t
FLD (V3t Ptr CS:[DI]).X ; ( a+b )
FLD (V3t Ptr CS:[BX]).X ;
FAdd ;
Fstp (V3t Ptr CS:[SI]).X ;
FLD (V3t Ptr CS:[DI]).Y
FLD (V3t Ptr CS:[BX]).Y
FAdd
Fstp (V3t Ptr CS:[SI]).Y
FLD (V3t Ptr CS:[DI]).Z
FLD (V3t Ptr CS:[BX]).Z
FAdd
Fstp (V3t Ptr CS:[SI]).Z
RetN
Vsum EndP
; Retour de Procedure copro status normal
Vdif Proc Near ; Assume ES:[SI] Valeur en Sortie
; DS:DI a:V3t Ds:Bx b:V3t
FLD (V3t Ptr CS:[DI]).X ; ( a-b )
FLD (V3t Ptr CS:[BX]).X ;
FSub ;
Fstp (V3t Ptr CS:[SI]).X ;
FLD (V3t Ptr CS:[DI]).Y
FLD (V3t Ptr CS:[BX]).Y
FSub
Fstp (V3t Ptr CS:[SI]).Y
FLD (V3t Ptr CS:[DI]).Z
FLD (V3t Ptr CS:[BX]).Z
FSub
Fstp (V3t Ptr CS:[SI]).Z
RetN
Vdif EndP
Comment#
TraceVdif Proc Near
FLD Dword Ptr Cs:[Eye].X ; ( a-b )
FLD Dword Ptr Cs:[Trace_p].X ;
FSub ;
Fstp Dword Ptr Cs:[Trace_Ve].X ;
FLD Dword Ptr Cs:[Eye].Y
FLD Dword Ptr Cs:[Trace_P].Y
FSub
Fstp Dword Ptr Cs:[Trace_Ve].Y
FLD Dword Ptr Ds:[Eye].Z
FLD (V3t Ptr DS:[Trace_p]).Z
FSub
Fstp Dword Ptr Es:[Trace_ve].Z
RetN
TraceVdif EndP
Comment#
GetNrmVdif Proc Near
FLD (V3t Ptr DS:[DI]).X ;
FLD (V3t Ptr DS:)[Trace_p].X ; ( a-b )
FSub ;
Fstp (V3t Ptr ES:[Trace_n]).X ;
FLD (V3t Ptr DS:[DI]).Y
FLD (V3t Ptr DS:[Trace_p]).Y
FSub
Fstp (V3t Ptr ES:[Trace_n]).Y
FLD (V3t Ptr DS:[DI]).Z
FLD (V3t Ptr DS:[Trace_p]).Z
FSub
Fstp (V3t Ptr ES:[Trace_n]).Z
RetN
GetNrmVdif EndP
Kmul Proc Near; Es:[Si] V3t En Modification ; Cs:Bx Offset Single
; DS:[Di] V3t En Multiplication
FLD Dword Ptr Cs:[Bx]
FLD (V3t Ptr DS:[DI]).X
Fmul
FSTP Dword Ptr Es:[Si].X
FLD Dword Ptr Cs:[Bx]
FLD (V3t Ptr DS:[DI]).Y
Fmul
FSTP Dword Ptr Es:[Si].Y
FLD Dword Ptr Cs:[Bx]
FLD (V3t Ptr DS:[DI]).Z
Fmul
FSTP Dword Ptr Es:[Si].Z
RetN
Kmul EndP
Smul Proc Near; Assume Ds:[DI] Equ A [Bx] Equ B result Es:[Si]
FLD (V3t Ptr DS:[DI]).X
FLD (V3t Ptr DS:[BX]).X
Fmul
FLD (V3t Ptr DS:[DI]).Y
FLD (V3t Ptr DS:[BX]).Y
Fmul
Fadd
FLD (V3t Ptr DS:[DI]).Z
FLD (V3t Ptr DS:[BX]).Z
Fmul
Fadd
FSTP Dword Ptr ES:[SI]
RetN
Smul EndP
Smul_ Proc Near; Assume Ds:[DI] Equ A [Bx] Equ B result St(0)
FLD (V3t Ptr DS:[DI]).X
FLD (V3t Ptr DS:[BX]).X
Fmul
FLD (V3t Ptr DS:[DI]).Y
FLD (V3t Ptr DS:[BX]).Y
Fmul
Fadd
FLD (V3t Ptr DS:[DI]).Z
FLD (V3t Ptr DS:[BX]).Z
Fmul
Fadd
RetN
Smul_ EndP
Smulxz_ Proc Near; Assume Ds:[DI] Equ A [Bx] Equ B result St(0)
FLD (V3t Ptr DS:[DI]).X
FLD (V3t Ptr DS:[BX]).X
Fmul
FLD (V3t Ptr DS:[DI]).Z
FLD (V3t Ptr DS:[BX]).Z
Fmul
Fadd
RetN
Smulxz_ EndP
ErrEps Proc Near ; Assume St(0) = single s
Fabs
Fld Dword Ptr Epsilon
Fxch
Fcompp
Fwait
Fstsw Ax
Test Ah,1
Jne @@RunErrEps
Clc
RetN
@@RunErrEps:
Mov Sp,0FFFEh
Mov Ax,03h ; Fin de Programme Erreur Epsilon
Int 10h
Int 20h
ErrEps EndP
OldCw DW 0
NewCw DW 0
; utilise par Pow
ExpX Proc Near ; St(0) = X
Enter 4,0
fldl2e ; load log2(10)
fmulp st(1),st(0) ; log2(10) * argument
fld st(0) ; duplicate product
fstcw Word Ptr Cs:[Bp-4] ;oldcw; get old control word
fwait ; wait till it arrives
mov ax,Word Ptr Cs:[Bp-4];oldcw; change rounding mode
and ax,0f3ffh ; field to "round down"
or ax,0400h
mov Word Ptr Cs:[Bp-2],Ax ;newcw,ax
fldcw Word Ptr Cs:[Bp-2];newcw; force rounding mode
frndint ; get int part of product
fldcw Word Ptr Cs:[Bp-4];oldcw; restore old rounding mode
fld st(0) ; duplicate integer part
fxch st(2) ; get original product
fsubrp st(1),st(0) ; find fractional part
fld1
fchs
fxch st(1) ; scale fractional part
fscale
fstp st(1) ; discard coprocessor junk
f2xm1 ; raise 2 to power-1
fld1
faddp st(1),st(0) ; correct for the -1
fmul st(0),st(0) ; square result
fscale ; scale by int part
fstp st(1) ; discard coprocessor junk
Leave
RetN
ExpX EndP
Pow Proc Near ; x = St(0) y= St(1) retour st(0)
FldlN2
Fxch
Fyl2X
Fmul st(0),st(1)
FSTP St(1)
Fld Dword Ptr Pow10S
FCOMP
FWAIT
FSTSW AX
Test AH,1
Jne @@Suite
Fstp St(0)
FldZ
RetN
@@Suite:
Call ExpX ; St(0) = X
RetN
Pow EndP
SqrSolve3 Proc Near
Fld St(0)
Fmul St,St(0) ; sqr(p)
Fild Dword Ptr Cs:[aQuater]
Fxch
Fscale
Fstp St(1)
; Fmulp ;st(0) sqr(p)*0.25
; Fxch st(2)
Fsub St,St(2)
Fstp St(2) ; q elimin? !
Fchs ; Ici on change le signe de p
Fxch
Ftst
FSTSW AX
SAHF
JB @@LamInfinity
; St(0) = d
; st(1) = p
Fsqrt ; st(0) = ûd
Fld Dword Ptr Cs:[Half1]
Fmul st(1) st(2)
;
FTST ; On teste h et 0
FSTSW AX
SAHF
JB @@TryL1
FLD St(1)
FLD St(1)
Fsub
Fld Dword Ptr Cs:[Epsilon]
@@SolveEpsilonL2:
FUCOM
FSTSW AX
SAHF
JA @@TurnToL1 ; Epsilon le plus grand
Fstp St(0);
Fstp St(2);
Fstp St(0);
Jmp @@RealChoice
@@TurnToL1:
FSTP St(0)
FSTP St(0)
; Jmp @@TryL1
@@TryL1:
Fadd
Fld Dword Ptr Cs:[Epsilon]
; Jmp @@SolveEpsilonL1
; @@SolveEpsilonL1:
FUCOM
FSTSW AX
SAHF
JA @@LamInfinity ; Epsilon le plus grand
Fstp St(0);
Jmp @@RealChoice
@@LamInfinity:
Fstp St(0)
Fstp St(0)
FLD Dword Ptr Cs:[Infinity]
@@RealChoice:
Retn
SqrSolve3 EndP
Comment#
; Modifier pour ne pas avoir de passage de paramettre !
TraceRayToPoint Proc Near ;DI,r BX,l SI,p
FLD Dword Ptr Cs:[Trace_RA.RN.X]
Fmul Dword Ptr Cs:[Trace_Lmin]
Fadd Dword Ptr Cs:[Trace_RA.RP.X]
FSTP DWord Ptr Cs:[Trace_P.X]
FLD Dword Ptr Cs:[Trace_RA.RN.Y]
Fmul Dword Ptr Cs:[Trace_Lmin]
Fadd Dword Ptr Cs:[Trace_RA.RP.Y]
FSTP DWord Ptr Cs:[Trace_P.Y]
FLD Dword Ptr Cs:[Trace_RA.RN.Z]
Fmul Dword Ptr Cs:[Trace_Lmin]
Fadd Dword Ptr Cs:[Trace_RA.RP.Z]
FSTP DWord Ptr Cs:[Trace_P.Z]
RetN
TraceRayToPoint EndP
Comment#
ReflV_W DD 0
Reflv_V DD 0,0,0 ; Equ V3t
ReflV Proc Near
Xchg Bx,Di
; Mov Bx, ; ve ; Valorise a l'inverse
; Mov Di, ; n ;
Call Smul_
Fadd St,St(0)
Xchg Bx,Di
; St(0) = W
FSTP Dword Ptr Cs:[ReflV_W]
Mov Ax,Di ; Ax = Ve
Mov Cx,Si ; Cx = Vr
Mov Di,Bx ; Ici di = n
Mov Bx,Offset ReflV_W
; Mov Di,n
Mov Si,Offset ReflV_V
Call Kmul
; Mov Bx,Offset ReflV_V
; Mov Di,Ax ;ve
Mov Bx,Ax
Mov Di,Offset ReflV_V
Mov Si,Cx ;vr
Call Vdif
Retn
ReflV EndP
Comment#
TransV_P DD ?
TransV_Q DD ?
Proc TransV ; Ve = Di, n = Bx , Dx pos d1,d2 , Si : Vt
FLD (V3t Ptr DS:[DI]).X
FLD (V3t Ptr DS:[BX]).X
Fmul
FLD (V3t Ptr DS:[DI]).Y
FLD (V3t Ptr DS:[BX]).Y
Fmul
Fadd
FLD (V3t Ptr DS:[DI]).Z
FLD (V3t Ptr DS:[BX]).Z
Fmul
Fadd
Fabs
Fld
Fmul St,St(0)
Fld1
Fsub St(0),St(1)
Push Bx ; Car Modifie
Mov Bx,Dx
FLD Dword Ptr Ds:[Bx]
Add Bx,4
FLD Dword Ptr Ds:[Bx]
FDIV
Pop Bx
Fld
Fmul St,St(0)
Fmul st(0),st(2)
Fld1
Fsub St(0),St(1)
FTST
FSTSW AX
SAHF
JP @@Erreur1
JA @@D_P0 ;> P.Z > 0.0
JB @@Suite ;> P.Z < 0.0
@@Erreur1:
@@D_P0:
FSQRT
Fld St(1)
Fmul st(0),St(3)
Fsub st(0),st(1)
FSTP Dword Ptr Cs:TransV_Q
FSTP Dword Ptr Cs:TransV_P
Mov Dx,Si
Mov Si,Di
Mov Cx,Bx
Mov Bx,Offset TransV_P
Call Kmul
Mov Bx,Offset TransV_Q
Xchg Si,CX
Mov Di,Si
Call Kmul
Mov Di,Cx
Mov BX,Si
Mov Si,Dx
Call Vsum
; Plus Rien en Pile Normalement
Clc
RetN
@@Suite:
Fstp St(0)
Fstp St(0)
Fstp St(0)
STC
RetN
TransV EndP
Comment#
Align 16
LnX Proc Near ; St(0) = X
FldlN2
Fxch
Fyl2X ; St(0) = Ln(X)
RetN
LnX EndP
Align 16
SphereInter Proc Near
; Pile Interne a SphereInter
@@Si_SavDx Equ [Bp-2]
@@Si_P Equ [Bp-6]
@@Si_Q Equ [Bp-10]
@@Si_L Equ [Bp-14]
@@Si_PMmNrm Equ [Bp-18]
@@Si_pMm Equ [Bp-30]
; Pile Externe a SphereInter
@@Si_Obrn Equ [Bp+8];Bx = Trace.Obnr ; Pas le Mettre Ici En Fait !
@@Si_Lmin Equ [Bp+4];Si = Trace.Lmin ;
@@Si_R Equ [Bp+6];Di = Trace.r ;
Enter 36,0
Mov Word Ptr Cs:@@Si_SavDx,Dx
Dec Dx
Shl Dx,1
Add Dx,Offset ObnrIs
; vdif(r.p,Sphe.m,pMm);
Mov Si,Bp
Sub Si,30 ; Si Devient Si_pMm
Mov Bx,Dx
Mov Bx,Word Ptr Cs:[Bx] ; Bx Devient Sphere K1 ou autre
Mov Di,Word Ptr Cs:@@Si_R.RP
Call Vdif
; pMmNrm := Norm (pMm);
Mov Bx,Bp
Sub Bx,18 ; Bx devient pMmNrm
Mov Di,Bp
Sub Di,30 ; Di Devient pMm
Call NormSphere
; p := 2* smul(pMm,r.n);
Mov Di,Bp
Sub Di,30 ; pMp
Mov Bx,Word Ptr Cs:@@Si_R
Add Bx,Rn
Call Smul_
Fld St(0)
Fadd
Fstp Dword Ptr Cs:@@Si_P
; q := sqr(pMmNrm)-Sphe.sqrr;
Fld Dword Ptr Cs:@@Si_pMmNrm
;Fmul st,st(0)
Mov Bx,Dx
Mov Bx,Word Ptr Cs:[Bx]
Fld Dword Ptr Cs:[Bx.Sqrr]
Fsub
;Fstp Dword Ptr Cs:@@Si_Q
; sqrSolve ( p,q,l);
;Fld Dword Ptr Cs:@@Si_Q
Fld Dword Ptr Cs:@@Si_P
Call SqrSolve3
Fst Dword Ptr Cs:@@Si_L
Mov Di,Word Ptr Cs:@@Si_Lmin
Fld Dword Ptr Cs:[Di]
FUCOMPP
FSTSW AX
SAHF
; if l < lmin then
JBE @@NoChange
; lmin := l;
Mov Dx,Word Ptr Cs:@@Si_SavDx
Mov Bx,Word Ptr Cs:@@Si_Obrn
Mov Ax,Word Ptr Cs:[Bx]
;Test Ax,0
;Je @@Normal
;Fld1
;Fchs
;Fld Dword Ptr Cs:@@Si_L
;Fld Dword Ptr Cs:[Di]
;Faddp
;Fscale
;Fstp Dword Ptr Cs:[Di]
;Fstp St(0)
;Mov Word Ptr Cs:[Bx],Dx
;Jmp @@NoChange
;;Leave
;RetN
@@Normal:
Mov Eax,Dword Ptr Cs:@@Si_L
Mov Dword Ptr Cs:[Di],Eax
; Obnr := test;
Mov Dx,Word Ptr Cs:@@Si_SavDx
Mov Bx,Word Ptr Cs:@@Si_Obrn
Mov Word Ptr Cs:[Bx],Dx
@@NoChange:
Leave
RetN
SphereInter EndP
Align 16
InterSect Proc Near ; Bx = Trace.Obnr
; Di = Trace.r
; Si = Trace.Lmin
Enter 6,0
Mov Word Ptr Cs:[Bp-2],Bx
Mov Word Ptr Cs:[Bp-4],Di
Mov Word Ptr Cs:[Bp-6],Si
; Normalize(r.n); ;
Add Di,12 ;
Call Normalize ; ;
Mov Si,Word Ptr Cs:[Bp-6]
Mov Di,Word Ptr Cs:[Bp-4]
Fld Dword Ptr Cs:[Infinity]
Fstp Dword Ptr Cs:[Si]
Mov Word Ptr Cs:[Bx],0
Comment#
; If r.n.y > 0 then
FLD Dword Ptr Cs:[Di.Rn.Y]
FTST
FSTSW AX
FSTP St(0)
SAHF
JA @@C1True
Jmp @@C1False
; Begin
@@C1True:
; if r.p.y > 0 then
Fld Dword Ptr Cs:[Di.Rp.Y]
FTST
FSTSW AX
FSTP St(0)
SAHF
JA @@C11True
Jmp @@C11False
@@C11True:
; Obnr := 5
Mov Word Ptr Cs:[Bx],5
; Jmp @@AfterC
Jmp @@IsObnr5
@@C11False:
; Obnr:=0;
Mov Word Ptr Cs:[Bx],0
; Jmp @@AfterC
Jmp @@Continue5
; End
; Else
; Begin
@@C1False:
; If r.p.y < 0 then
FLD Dword Ptr Cs:[Di.Rp.Y]
FTST
FSTSW AX
FSTP St(0)
SAHF
JB @@C12True
Jmp @@C12False
@@C12True:
; Obnr := 0
Mov Word Ptr Cs:[Bx],0
; Jmp @@AfterC
Jmp @@Continue5
@@C12False:
; Obnr := 5;
Mov Word Ptr Cs:[Bx],5
; Jmp @@AfterC
Jmp @@IsObnr5
@@AfterC:
Cmp Word Ptr Cs:[Bx],5
Jne @@Continue5
; if Obnr = 5 Then
; begin
@@IsObnr5:
; lmin:=-r.p.y/r.n.y;
FLD Dword Ptr Cs:[DI.Rp.Y]
FCHS
FLD Dword Ptr Cs:[Di.Rn.Y]
FDIVP
FST Dword Ptr Cs:[Si] ; Sauvegarde de Lmin
FTST
FSTSW AX
FSTP St(0)
SAHF
; if lmin<0 then
JB @@Continue5
Jmp @@OkLmin
@@Continue5:
; lmin:=Infinity;
Mov Eax,Dword Ptr Cs:[Infinity]
Mov Dword Ptr Cs:[Si],Eax
@@OkLmin:
Comment#
; Bp Contient les Parametres deja passe a Intersect
Push Bx
Push Di
Push Si
Mov Dx,4 ; Numero de Sphere a tester !
Call SphereInter
Mov Dx,2
Call SphereInter
Mov Dx,3
Call SphereInter
Mov Dx,1
Call SphereInter
Pop Si
Pop Di
Pop Bx
; Mov Bx,Ax
Leave
RetN ; Elimine 6 Octets de La Pile
InterSect EndP
; ToRefl:=GetNrm(ObNr,p,ve,n);
Align 16
GetMnrTable Dw Offset CaseK0 ; Fond
Dw Offset CaseK1 ; Boule
Dw Offset CaseK2 ;
Dw Offset CaseK3 ;
Dw Offset CaseK4 ;
Dw Offset CaseK5 ; Sol
Align 16
GetNrm Proc Near
Mov Bx,Word Ptr Cs:[Trace_Obnr]
Shl Bx,1
Add Bx,Offset GetMnrTable
Mov Bx,Word Ptr Cs:[Bx]
Call Bx
Jmp AfterCaseK0
CaseK1:
Mov Di,Offset K1
Call GetNrmVdif
Mov Di,Bp
Sub Di,42
Call Normalize
RetN
CaseK2:
Mov Di,Offset K2
Call GetNrmVdif
Mov Di,Bp
Sub Di,42
Call Normalize
RetN
CaseK3:
Mov Di,Offset K3
Call GetNrmVdif
Mov Di,Bp
Sub Di,42
Call Normalize
RetN
CaseK4:
Mov Di,Offset K4
Call GetNrmVdif
Mov Di,Bp
Sub Di,42
Call Normalize
RetN
CaseK5:
FLDZ
FST Dword Ptr Cs:[Trace_N.X]
FSTP Dword Ptr Cs:[Trace_N.Z]
FLD1
FSTP Dword Ptr Cs:[Trace_N.Y]
RetN
CaseK0:
RetN
AfterCaseK0:
; Effectue Smul Ve,n resultat St(0)
FLD Dword Ptr Cs:[Trace_Ve].X
FLD Dword Ptr Cs:[Trace_n].X
Fmul
FLD Dword Ptr Cs:[Trace_Ve].Y
FLD Dword Ptr Cs:[Trace_n].Y
Fmul
Fadd
FLD Dword Ptr Cs:[Trace_ve].Z
FLD Dword Ptr Cs:[Trace_n].Z
Fmul
Fadd
Ftst
FSTSW AX
Fstp St(0)
SAHF
JP @@GetNrmC1 ;Erreur1
; If Smul(ve,n) < 0 Then
JAE @@GetNrmC1 ;>= 0.0
@@Erreur1:
; kmul(-1,n,n); { remplace par un Changement de signe ca }
Fld Dword Ptr Cs:[Trace_n].x
Fchs
Fstp Dword Ptr Cs:[Trace_n].x
Fld Dword Ptr Cs:[Trace_n].y
Fchs
Fstp Dword Ptr Cs:[Trace_n].y
Fld Dword Ptr Cs:[Trace_n].z
Fchs
Fstp Dword Ptr Cs:[Trace_n].z
Jmp @@GetNrmC2
@@GetNrmC1:
; Fstp St(0)
@@GetNrmC2:
; nn:=n; Copy simple ; Elimine pas de reflextion
; appel de NrmProc paramettre p et n
Mov Di,Bp ; Normalize(n)
Sub Di,42 ;
Call Normalize ;
; ?limine car pas de gestion reflexion !
;Ax = Vrais si
; (sMul(ve,n)>0) and (smul(nn,n)>0);
;Ax = Faux sinon
;
Retn
GetNrm EndP
Ins_Obnr Dw 0
Even
Ins_R DD 0,0,0,0,0,0
Ins_Lmin DD 0.001
Ins_Dummy DD 0
Even
Comment#
Function InShadow(p:v3T):boolean;
var r:rayT; ShdNr:integer; dummy:single;
begin
r.p:=p; r.n:=LightV; RayToPoint(r,0.001,r.p);
intersect(r,Shdnr,dummy); InShadow:=Shdnr>1;
end;
Comment#
InShadow Proc Near
; Mov Si,Offset Ins_R.RP
; Mov Cx,3
; @@InS_Mov1:
; Mov Eax,Dword Ptr Cs:[Di]
; Mov Dword Ptr Cs:[Si],Eax
; Add Di,4
; Add Si,4
; Dec Cx
; Jnz @@InS_Mov1 ; Delocalise dans le specifique RayToPoint
Mov Bx,Offset LightV
Mov Si,Offset Ins_R.RN
Mov Cx,3
@@InS_Mov2:
Mov Eax,Dword Ptr Cs:[Bx]
Mov Dword Ptr Cs:[Si],Eax
Add Bx,4
Add Si,4
Dec Cx
Jnz @@InS_Mov2
; Equ RayToPoint Specifique
FLD Dword Ptr Cs:[Ins_R.RN.X]
Fmul Dword Ptr Cs:[Ins_LMin]
; Fadd Dword Ptr Cs:[Ins_R.RP.X]
Fadd Dword Ptr Cs:[DI.X]
FSTP DWord Ptr Cs:[Ins_R.RP.X]
FLD Dword Ptr Cs:[Ins_R.RN.Y]
Fmul Dword Ptr Cs:[Ins_Lmin]
; Fadd Dword Ptr Cs:[Ins_R.RP.Y]
Fadd Dword Ptr Cs:[DI.Y]
FSTP DWord Ptr Cs:[Ins_R.RP.Y]
FLD Dword Ptr Cs:[Ins_R.RN.Z]
Fmul Dword Ptr Cs:[Ins_Lmin]
; Fadd Dword Ptr Cs:[Ins_R.RP.Z]
Fadd Dword Ptr Cs:[DI.Z]
FSTP DWord Ptr Cs:[Ins_R.RP.Z]
; Faire Intersect(r,Shdnr,Dummy);
Mov Word Ptr Cs:[Ins_Obnr],0
Mov Di,Offset Ins_R
Mov Bx,Offset Ins_Obnr
Mov Si,Offset Ins_Dummy
Call InterSect
Mov Bx,Offset Ins_Obnr
RetN
InShadow EndP
; Attention Ici Pour Beneficier de L'appel Direct au paramettre contenue
; dans Trace il Faut Recalcul l'ajout sur BP
; Apres Introduction dans la routine
Light_Cd Equ [Bp-2] ; Position
Light_Cs Equ [Bp-14] ; Position
Light_W2 Equ [Bp-18] ; Position
Light_Spec Equ [Bp-22] ; Position
Light_W1 Equ [Bp-26] ; Position
Align 16
Light Proc Near
Enter 26,0 ; Ajout pour variable de Trace !
Mov Bx,Word Ptr Cs:[Trace_Obnr][134]; A voir !
Dec Bx
Shl Bx,1
Add Bx,Offset SurfIs
Mov Bx,Word Ptr Cs:[Bx]
Mov Word Ptr Cs:[Light_Cd],Bx ; Position sur Surface!
; w1:=smul(Lightv,n);
Mov Di,Offset LightV
Mov Bx,Bp
Add Bx,92;(-42)+134
Call Smul_
; St(0) Equ W1
; If (w1>0)
FTST
FSTSW AX
FSTP Dword Ptr CS:[Light_W1]
SAHF
JP @@Erreur1
JB @@LightEndCase
@@Erreur1:
; Call InShadow p sur pile !! ; Elimine sans Consequence !
; And (not InShadow(p)) Then
; ; test (Not InShadow(p)) Vrais
; Begin
Mov Di,Bp
Add Di,-30+134
Call InShadow
Cmp Bx,1
Jl @@LightEndCase
Mov Di,Word Ptr Cs:[Light_Cd]
;c.r:=(LightC.r*w1+AmbC.r)*cd.r;
FLD Dword Ptr Cs:[LightC.R]
Fmul Dword Ptr Cs:[Light_W1]
Fadd Dword Ptr Cs:[AmbC.R]
Fmul Dword Ptr Cs:[Di.R]
Fstp Dword Ptr Cs:[Cct.R]
;c.g:=(LightC.g*w1+AmbC.g)*cd.g;
FLD Dword Ptr Cs:[LightC.G]
Fmul Dword Ptr Cs:[Light_W1]
Fadd Dword Ptr Cs:[AmbC.G]
Fmul Dword Ptr Cs:[Di.G]
Fstp Dword Ptr Cs:[Cct.G]
;c.b:=(LightC.b*w1+AmbC.b)*cd.b;
FLD Dword Ptr Cs:[LightC.B]
Fmul Dword Ptr Cs:[Light_W1]
Fadd Dword Ptr Cs:[AmbC.B]
Fmul Dword Ptr Cs:[Di.B]
Fstp Dword Ptr Cs:[Cct.B]
; w2:=smul(Vr,Lightv);
Mov Bx,Bp
Add Bx,68;(-66)+134 ; Vr
Mov Di,Offset Lightv
Call Smul_
FTST
FSTSW AX
FSTP Dword Ptr CS:[Light_W2]
SAHF
; JP @@LightEnd;Erreur2
; If w2>0 Then
JB @@LightEnd
@@Erreur2:
; Pow Comment Ca Marche Huhu
; spec:=pow(w2,ObArr[ObNr].Oe);
Mov Di,Word Ptr Cs:[Light_Cd]
Fld Dword Ptr Cs:[Di].SurfT.SOe
Fld Dword Ptr Cs:[Light_W2]
Call Pow
Fst Dword Ptr Cs:[Light_Spec]
Ftst
FSTSW AX
FSTP St(0)
SAHF
JZ @@NoSpec ; si Spec = 0 pas besoin de calcul
; cs:=ObArr[ObNr].specC;
Mov Di,Word Ptr Cs:[Light_Cd]
; c.r:=c.r+spec*cs.r;
Fld Dword Ptr Cs:[Di].SurfT.SSpecC.R
Fmul Dword Ptr Cs:[Light_Spec]
Fadd Dword Ptr Cs:[Cct.R]
Fstp Dword Ptr Cs:[Cct.R]
; c.g:=c.g+spec*cs.g;
Fld Dword Ptr Cs:[Di].SurfT.SSpecC.G
Fmul Dword Ptr Cs:[Light_Spec]
Fadd Dword Ptr Cs:[Cct.G]
Fstp Dword Ptr Cs:[Cct.G]
; c.b:=c.b+spec*cs.b;
Fld Dword Ptr Cs:[Di].SurfT.SSpecC.B
Fmul Dword Ptr Cs:[Light_Spec]
Fadd Dword Ptr Cs:[Cct.B]
Fstp Dword Ptr Cs:[Cct.B]
@@NoSpec:
Jmp @@LightEnd
@@LightEndCase:
Mov Di,Word Ptr Cs:[Light_Cd]
; c.r:=AmbC.r*cd.r;
FLD Dword Ptr Cs:[AmbC.r]
Fmul Dword Ptr Cs:[DI.r]
Fstp Dword Ptr Cs:[Cct.R]
; c.g:=AmbC.g*cd.g;
FLD Dword Ptr Cs:[AmbC.g]
Fmul Dword Ptr Cs:[DI.g]
Fstp Dword Ptr Cs:[Cct.G]
; c.b:=AmbC.b*cd.b;
FLD Dword Ptr Cs:[AmbC.b]
Fmul Dword Ptr Cs:[DI.b]
Fstp Dword Ptr Cs:[Cct.b]
@@LightEnd:
Leave
RetN
Light EndP
Align 16
Trace Proc Near
; Les Variables Transmise a Trace
Trace_RekDep Equ [Bp+16] ; Word ; Correspond!
Trace_R Equ [Bp+14] ; Word addresse de ra
Trace_c Equ [Bp+12] ; Word
Trace_N1 Equ [Bp+08] ; Dword
Trace_Atten Equ [Bp+04] ; Dword
; Les Variables Interne a
Trace_Obnr Equ [BP-2]
Trace_Lmin Equ [BP-6]
Trace_N2 Equ [BP-10]
Trace_As Equ [BP-14]
Trace_At Equ [BP-18]
Trace_P Equ [BP-30]
Trace_N Equ [BP-42]
Trace_VE Equ [BP-54]
Trace_VR Equ [BP-66]
Trace_VT Equ [BP-78]
Trace_CI Equ [BP-90]
Trace_CS Equ [BP-102]
Trace_ToRefl Equ [BP-104]
Trace_ToTrans Equ [BP-106]
Trace_Ra Equ [Bp-130] ; Zone de stockage Ra
Enter 130,0 ; Une Zone de Data de 130 Octets
Mov Si,Word Ptr Cs:[Trace_R]; Chargement d'un Rayon passe en paramettre
Mov Di,Bp ; sur la pile interne a Proc_Trace
Sub Di,130 ;
Mov Cx,6 ; 6 Dword en Copie !
@@Duplique:
Mov Eax,Dword Ptr Cs:[Si]
Mov Dword Ptr Cs:[Di],Eax
Add Si,4
Add Di,4
Dec Cx
Jnz @@Duplique
Mov Ax,Word Ptr Cs:[Trace_RekDep]
Cmp Ax,Word Ptr Cs:[MaxRekDep]
Jg @@TestAtten
@@SetC:
Mov Bx,Word Ptr Cs:[Trace_c]
Mov Eax,Dword Ptr Cs:[IsZero]
Mov Dword Ptr Cs:[Bx.R],Eax
Mov Dword Ptr Cs:[Bx.G],Eax
Mov Dword Ptr Cs:[Bx.B],Eax
Jmp @@OutOfTrace
@@TestAtten:
FLD Dword Ptr Cs:Trace_Atten
FLD Dword Ptr Cs:AttenEps
FUCOMPP
FSTSW AX
SAHF
JA @@SetC
; Subterfuge
; On Peu Elimine la passation de parametre vers Intersect
; A Condition de Permettre a Intersect de Taper dans la structure
; de pile de Trace !!!
;intersect(r,obNr,lMin);
Mov Di,Bp
Sub Di,130 ;Mov Di, Trace_Ra
Mov Bx,Bp
Sub Bx,2 ;Mov Bx, Trace_Obnr
Mov Si,Bp
Sub Si,6 ;Mov Si, Trace_Lmin
Call Intersect
Mov Bx,Cs:[Trace_Obnr] ; Recupere Bx Valorise par Intersect
Cmp Bx,0
Je @@K0
; Fld Dword Ptr Cs:[Trace_Lmin]
; Fstp St(0);
; RayToPoint(r,lMin,p);
; Call TraceRayToPoint ; Specifique
; remplace en Dur ; Les Parametres Sont Acquis !!
FLD Dword Ptr Cs:[Trace_RA.RN.X]
Fmul Dword Ptr Cs:[Trace_Lmin]
Fadd Dword Ptr Cs:[Trace_RA.RP.X]
FSTP DWord Ptr Cs:[Trace_P.X]
FLD Dword Ptr Cs:[Trace_RA.RN.Y]
Fmul Dword Ptr Cs:[Trace_Lmin]
Fadd Dword Ptr Cs:[Trace_RA.RP.Y]
FSTP DWord Ptr Cs:[Trace_P.Y]
FLD Dword Ptr Cs:[Trace_RA.RN.Z]
Fmul Dword Ptr Cs:[Trace_Lmin]
Fadd Dword Ptr Cs:[Trace_RA.RP.Z]
FSTP DWord Ptr Cs:[Trace_P.Z]
; vDif(eye,p,ve);
; Call TraceVdif ; Specifique
; Remplace en Dur ; Les Parametres Sont Acquis !!
FLD Dword Ptr Cs:[Eye].X ; ( a-b )
FLD Dword Ptr Cs:[Trace_p].X ;
FSub ;
Fstp Dword Ptr Cs:[Trace_Ve].X ;
FLD Dword Ptr Cs:[Eye].Y
FLD Dword Ptr Cs:[Trace_P].Y
FSub
Fstp Dword Ptr Cs:[Trace_Ve].Y
FLD Dword Ptr Ds:[Eye].Z
FLD (V3t Ptr DS:[Trace_p]).Z
FSub
Fstp Dword Ptr Es:[Trace_ve].Z
; normalize(ve);
Mov Di,Bp
Sub Di,54
Call Normalize
Mov Di,Bp
Sub Di,30
; ToRefl:=GetNrm(ObNr,p,ve,n);
Call GetNrm
; ReflV(ve,n,vr);
Mov Di,Bp ; ve;n
Sub Di,54
Mov Bx,Bp ; n;Ve
Sub Bx,42
Mov Si,Bp ; Vr
Sub Si,66
Call ReflV
; Light(Obnr,p,n,ve,vr,c);
Call Light
Jmp @@OutOfTrace
@@K0:
Mov Si,Offset Black;MediumVioletRed
Mov Di,Offset Cct
Call CopyColor
Jmp @@OutOfTrace
@@LastChoice:
@@OutOfTrace:
Leave
RetN 14
Trace EndP
; ce Pset Correspond a 16m couleur pour ma Tseng !
Even
PsetX DD ?
PsetY DD ?
Bu DD 0
Gr DD 0
Rd DD 0
Even
Pset Proc Near
Push Es
Push Word Ptr Cs:[DestSeg]
Pop Es
Mov Dword Ptr Cs:[PsetX],Ecx
Mov Dword Ptr Cs:[PsetY],Ebx
Mov Eax,Ecx
Shl Ecx,1
Add Ecx,Eax
Mov Eax,Ebx
Mov Ebx,640*3
Mul Bx
Add Ax,Cx
Adc Dx,0
Mov Di,Ax
Mov Ax,Dx
Cmp Dx,Word Ptr Cs:[ABank_R]
Je @@NextB
Mov Word Ptr Cs:[Abank_R],Dx
Mov Ah,Al
Shl Ah,4
Or Al,Ah
Mov Dx,3CDh
Out Dx,Al
@@NextB:
Mov Al,Byte Ptr Cs:[Bu]
StoSb
Mov Ecx,Dword Ptr Cs:[PsetX]
Mov Eax,Ecx
Shl Ecx,1
Add Ecx,Eax
Inc Ecx
Mov Eax,Dword Ptr Cs:[PsetY]
Mov Ebx,640*3
Mul Bx
Add Ax,Cx
Adc Dx,0
Mov Di,Ax
Mov Ax,Dx
Cmp Dx,Word Ptr Cs:[ABank_R]
Je @@NextG
Mov Word Ptr Cs:[Abank_R],Dx
Mov Ah,Al
Shl Ah,4
Or Al,Ah
Mov Dx,3CDh
Out Dx,Al
@@NextG:
Mov Al,Byte Ptr Cs:[Gr]
StoSb
Mov Ecx,Dword Ptr Cs:[PsetX]
Mov Eax,Ecx
Shl Ecx,1
Add Ecx,Eax
Add Ecx,2
Mov Eax,Dword Ptr Cs:[PsetY]
Mov Ebx,640*3
Mul Bx
Add Ax,Cx
Adc Dx,0
Mov Di,Ax
Mov Ax,Dx
Cmp Dx,Word Ptr Cs:[ABank_R]
Je @@NextR
Mov Word Ptr Cs:[Abank_R],Dx
Mov Ah,Al
Shl Ah,4
Or Al,Ah
Mov Dx,3CDh
Out Dx,Al
@@NextR:
Mov Al,Byte Ptr Cs:[Rd]
StoSb
Pop Es
RetN
Pset EndP
Even
Pset64K Proc Near
Push Es
Push Word Ptr Cs:[DestSeg]
Pop Es
Mov Dword Ptr Cs:[PsetX],Ecx
Mov Dword Ptr Cs:[PsetY],Ebx
Mov Eax,Ecx
Add Ecx,Eax
Mov Eax,Ebx
Mov Ebx,640*2
Mul Bx
Add Ax,Cx
Adc Dx,0
Mov Di,Ax
Mov Ax,Dx
Cmp Dx,Word Ptr Cs:[ABank_R]
Je @@NextB
Mov Word Ptr Cs:[Abank_R],Dx
; Xor Dx,Dx
; Mov Ah,Al
; Shl Ah,4
; Or Al,Ah
; Mov Dl,Al
Mov Ax,4F05h
Xor Bx,Bx
Int 10h
; Mov Dx,3CDh
; Out Dx,Al
@@NextB:
Xor Ax,Ax
Mov Al,Byte Ptr Cs:[Rd]
Shr Al,3
Shl Ax,11
Mov Al,Byte Ptr Cs:[Bu]
Shr Al,3
Xor Bx,Bx
Mov Bl,Byte Ptr Cs:[Gr]
Shr Bl,2
Shl Bx,5
Add Ax,Bx
StoSw
Pop Es
RetN
Pset64K EndP
AddX DD 0
AddY DD 0
BaseX DD 0
BaseY DD 0
RunM_X DD 0
RunM_Y DD 0
H DD 0
V DD 0
HelpCompute1 DD 0
RunMickey1 Proc Near
Fld Dword Ptr Cs:[PicSizeWc] ; Aide au calcul de h
Fld Dword Ptr Cs:[PixRat] ;
Fmul ;
Fild Dword Ptr Cs:[Ymax] ;
Fild Dword Ptr Cs:[Xmax] ; Valorisation de HelpCompute
Fdiv ;
Fmul
Fstp Dword Ptr Cs:[HelpCompute1]
Mov Eax,DWord Ptr Cs:[BaseY]
Mov DWord Ptr Cs:[RunM_Y],Eax
;While ((Y <= Ymax) And (KeyStop=False)) Do
@@W1Test:
Mov Eax,DWord Ptr Cs:[Ymax2]
Cmp Dword Ptr Cs:[RunM_Y],Eax
Jle @@W1C0Vrais
Jmp @@W1False
@@W1C0Vrais:
Cmp Word Ptr Cs:[KeyStop],Faux
Je @@W1C1Vrais
Jmp @@W1False
@@W1C1Vrais:
; Remettre Ici Equ 0.21
; h:=(-y/ymax+0.5)*ymax/xmax*PicSiZeWC*PixRat;
FiLD Dword Ptr Cs:[RunM_Y]
FCHS
Fild Dword Ptr Cs:[Ymax]
Fdiv
Fld Dword Ptr Cs:Half1
Fadd
Fld Dword Ptr Cs:HelpCompute1
Fmul
Fstp Dword Ptr Cs:[h]
; kMUl(h,Vh,hv);
Mov Bx,Offset h
Mov Di,Offset Vh
Mov Si,Offset Hv
Call Kmul
; X:=BaseX;
Mov Eax,Dword Ptr Cs:[BaseX]
Mov Dword Ptr Cs:[RunM_X],EaX
;While ((X <= Xmax) And (KeyStop=False))Do
@@W2Test:
Mov Eax,Dword Ptr Cs:[Xmax2]
Cmp Dword Ptr Cs:[RunM_X],Eax
Jle @@W2C0Vrais
Jmp @@W2False
@@W2C0Vrais:
Cmp Word Ptr Cs:[KeyStop],Faux
Je @@W2C1Vrais
Jmp @@W2False
@@W2C1Vrais:
; v:=(x/xmax-0.5)*PicSizeWC;
Fild Dword Ptr Cs:[RunM_X]
Fild Dword Ptr Cs:[Xmax]
FdivP St(1),St(0)
Fld Dword Ptr Cs:[Half1]
Fsubr
Fld Dword Ptr Cs:[PicSizeWc]
Fmul
Fstp Dword Ptr Cs:[V]
; kMul(v,vr,nh);
Mov Bx,Offset v
Mov Di,Offset Vr
Mov Si,Offset Nh
Call Kmul
; vSum(hv,nh,nh);
Mov Di,Offset Hv
Mov Bx,Offset Nh
Mov Si,Offset Nh
Call Vsum
; Vdif(nh,eye,r.n);
Mov Di,Offset Nh
Mov Bx,Offset Eye
Mov Si,Offset Ra.Rn
Call Vdif
; Trace(r,0,1,1,c);
Push Word Ptr 0000 ; Correspond a RekDep !!
Push Offset Ra ; Trace doit faire une copie en pile
Push Offset Cct ;
Push Dword Ptr Cs:Is1 ;
Push Dword Ptr Cs:Is1 ;
Call Trace
;
FLD Dword Ptr Cs:[Cct.R] ; þþþþþþ
FLD1 ; þþþþ
FUCOMPP ; þþ
FSTSW AX ; þþ
SAHF ; þþ La Chromatique Rouge est
JA @@NoRChg ; þþ compare a 1.0 et est mise a 1.0
Mov Byte Ptr Cs:[Rd],255 ; þþ Arrondit Automatique
Jmp @@DoGreen ; þþ
Even ; þþ
@@NoRChg: ; þþ
FLD Dword Ptr Cs:[Cct.R] ; þþ
Fild Dword Ptr Cs:[Mul255] ; þþ
Fmul ; þþ Ici On Arrondie les Couleurs
Fistp Dword Ptr Cs:[Rd] ; þþ Avant Mise en place du point
@@DoGreen: ; þþ
FLD Dword Ptr Cs:[Cct.G] ; þþ
FLD1 ; þþ
FUCOMPP ; þþ
FSTSW AX ; þþ
SAHF ; þþ La Chromatique Verte est
JA @@NoGChg ; þþ compare a 1.0 et est mise a 1.0
Mov Byte Ptr Cs:[Gr],255 ; þþ
Jmp @@DoBlue ; þþ
Even ; þþ
@@NoGChg: ; þþ
FLD Dword Ptr Cs:[Cct.G] ; þþ
Fild Dword Ptr Cs:[Mul255] ; þþ
Fmul ; þþ
Fistp Dword Ptr Cs:[Gr] ; þþ
@@DoBlue: ; þþ
FLD Dword Ptr Cs:[Cct.B] ; þþ
FLD1 ; þþ
FUCOMPP ; þþ
FSTSW AX ; þþ La Chromatique Bleu est
SAHF ; þþ compare a 1.0 et est mise a 1.0
JA @@NoBChg ; þþ Si et Seulement Si la Chromatique
; Mov Eax,Dword Ptr Cs:[Is1] ; þþ de d?part est superieure a 1.0
; Mov Dword Ptr Cs:[C.B],Eax ; þþþþ
Mov Byte Ptr Cs:[Bu],255 ; þþ
Jmp @@DoPset ; þþ
Even ; þþ
@@NoBChg: ; þþ
FLD Dword Ptr Cs:[Cct.B] ; þþ
Fild Dword Ptr Cs:[Mul255] ; þþ
Fmul ; þþþþ
Fistp Dword Ptr Cs:[Bu] ; þþþþþþ
@@DoPset:
; setzePixel(AddX+x,AddY+y,round(c.r*255),round(c.g*255) ,round(c.b*255) );
Mov Ecx,Dword Ptr Cs:[Addx] ; Positionnement du Demarrage
Add Ecx,Dword Ptr Cs:[RunM_X] ; Premier Point Haut Gauche
Mov Ebx,Dword Ptr Cs:[Addy] ;
Add Ebx,Dword Ptr Cs:[RunM_Y] ;
Call Pset64K
In Al,60h ; Test Clavier pour
Dec Al ; Interruption
Jz @@StopIt ; et sortie dans l'espace
Inc Dword Ptr Cs:[RunM_X] ; Ajoute 2 au tramage X
Jmp @@W2Test
@@W2False:
Inc Dword Ptr Cs:[RunM_Y] ; Ajoute 2 au tramage Y
Jmp @@W1Test
@@W1False:; Fin du While
@@StopIt:
RetN
RunMickey1 EndP
Mov Word Ptr Cs:[Abank_R],65535 ; Generation d'un Mickey en
Call RunMickey1 ; Lancement du remap en Question
Demarre: ; Ici D?marre le programme
; Juste Pour Etre Tranquille
Mov Ax,Cs
Mov Ds,Ax
Mov Es,Ax
Finit ; Necessaire
; þþþþþþ
; þþþþþþþþþþþþ Valorisation de Demarrage
; þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ
; R.p := Eye; ; þþþþþþþ
CoordCopy Eye Ra.Rp ; þþþþþ
; ErrEps(Eye.z); ; þþþ
FLD Dword Ptr Cs:Ra.RP.z ; þþþ
Call ErrEps ; þþþ
; Normalize(LightV) ; þþþ
Mov Ax,Cs ; þþþ
Mov Ds,Ax ; þþþ
Mov Di,Offset LightV ; þþþ
Call Normalize ; þþþ
;vh.x:=-x; ; þþþ
FLD Dword Ptr Cs:[Eye.x] ; þþþ
FCHS ; þþþ
FSTP Dword Ptr Cs:[Vh.x] ; þþþ
;vh.y:=-y; ; þþþ
FLD Dword Ptr Cs:[Eye.y] ; þþþ
FCHS ; þþþ
FSTP Dword Ptr Cs:[Vh.y] ; þþþ
;vh.z:=(sqr(x)+sqr(y)+sqr(z))/z; ; þþþ
FLD Dword Ptr Cs:[Eye.x] ; þþþ
FMul st,St(0) ; þþþ
Fld Dword Ptr Cs:[Eye.y] ; þþþ
FMul st,St(0) ; þþþ
Fadd ; þþþ
Fld Dword Ptr Cs:[Eye.z] ; þþþ
FMul st,St(0) ; þþþ
Fadd ; þþþ
Fld Dword Ptr Cs:[Eye.z] ; þþþ
Fdiv ; þþþ
Fstp Dword Ptr Cs:[Vh.z] ; þþþ
;normalize(vh); ; þþþ
Mov Ax,Cs ; þþþ
Mov Ds,Ax ; þþþ
Mov Di,Offset Vh ; þþþ
Call Normalize ; þþþ
;if z<0 then ; þþþ
Fld Dword Ptr Cs:[Eye.z] ; þþþ
FTST ; Test St(0) & 0.0 ; þþþ
FSTSW AX ; þþþ
SAHF ; Valorise Flags ; þþþ
JAE @@NoMul ; þþþ
;kMUl(-1,vh,vh); ; þþþ
Int 20; ; þþþ
Fld Dword Ptr Cs:[Vh.X] ; þþþ
Fchs ; þþþ
Fstp Dword Ptr Cs:[Vh.X] ; þþþ
Fld Dword Ptr Cs:[Vh.Y] ; þþþ
Fchs ; þþþ
Fstp Dword Ptr Cs:[Vh.Y] ; þþþ
Fld Dword Ptr Cs:[Vh.Z] ; þþþ
Fchs ; þþþ
Fstp Dword Ptr Cs:[Vh.Z] ; þþþ
@@NoMul: ; þþþ
;vr.x:=vh.y*z-vh.z*y; ; þþþ
Fld Dword Ptr Cs:[Vh.z] ; þþþ
Fld Dword Ptr Cs:[Eye.y] ; þþþ
Fmul ; þþþ
Fld Dword Ptr Cs:[Vh.y] ; þþþ
Fld Dword Ptr Cs:[Eye.z] ; þþþ
Fmul ; þþþ
Fsub ; þþþ
Fstp Dword Ptr Cs:[Vr.x] ; þþþ
;vr.y:=vh.z*x-vh.x*z; ; þþþ
Fld Dword Ptr Cs:[Vh.x] ; þþþ
Fld Dword Ptr Cs:[Eye.z] ; þþþ
Fmul ; þþþ
Fld Dword Ptr Cs:[Vh.z] ; þþþ
Fld Dword Ptr Cs:[Eye.x] ; þþþ
Fmul ; þþþ
Fsub ; þþþ
Fstp Dword Ptr Cs:[Vr.y] ; þþþ
;vr.z:=vh.x*y-vh.y*x; ; þþþ
Fld Dword Ptr Cs:[Vh.y] ; þþþ
Fld Dword Ptr Cs:[Eye.x] ; þþþ
Fmul ; þþþ
Fld Dword Ptr Cs:[Vh.x] ; þþþ
Fld Dword Ptr Cs:[Eye.y] ; þþþ
Fmul ; þþþ
Fsub ; þþþ
Fstp Dword Ptr Cs:[Vr.z] ; þþþ
Fstp St(0) ; þþþ
;normalize(vr); ; þþþ
Mov Ax,Cs ; þþþ
Mov Ds,Ax ; þþþ
Mov Di,Offset Vr ; þþþþþ
Call Normalize ; þþþþþþþ
; þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ
; þþþþþþþþþþþþ Valorisation de Demarrage Termine
; þþþþþþ
; Fabrication d'un degre
FLDPI
FILD Dword Ptr GradBase
Fdiv
Fstp Dword Ptr Grad
Mov Eax,Dword Ptr Grad ; Eax Definit le degre de modif
Mov Si,Offset Xrotate ; le vecteur applique
Mov Di,Offset MatriceE ; la Matrice genere
Call DefineMatrix ;
Mov Sp,16384;+1024;+512 ; Permet un Gain de Temps !
Mov Ax,4F02h ;þþþ Changement de mode video
Mov Bx,0111h ;þþ 112 Mode 640*480 16m Pset <- Et4000W32p
Int 10h ;þþþ 111 Mode 640*480 64k Pset64K <- Vesa
Mov Si,Offset PaleGreen ; þþþþþþ
Mov Di,Offset K1Surf ; þþþþ
Call CopyColor ; þþ Valorisation des pigments
Mov Si,Offset MediumVioletRed ; þþ pour chacune des spheres
Mov Di,Offset K2Surf ; þþ composant le Mickey
Call CopyColor ; þþ
Mov Si,Offset MediumVioletRed ; þþ
Mov Di,Offset K3Surf ; þþ
Call CopyColor ; þþ
Mov Si,Offset Red;MediumVioletRed ; þþ
Mov Di,Offset K4Surf ; þþþþ
Call CopyColor ; þþþþþþ
Mov Dword Ptr Cs:[AddX] , 0 ; Centrage sur ecran
Mov Dword Ptr Cs:[AddY] , 0 ; 640*480
Xor Ecx,Ecx
Again: ; Attente touche escape
Push Ecx
Mov Dword Ptr Cs:[BaseX], 0 ; Base de Remap d'un Mickey
Mov Dword Ptr Cs:[BaseY], 0
Mov Word Ptr Cs:[Abank_R],65535 ; Generation d'un Mickey en
Call RunMickey1 ; Lancement du remap en Question
Mov Di,Offset MatriceE ; On Effectue la rotation de chacun des points
Mov Si,Offset K4 ;
Call Rotation ;
; Mov Di,Offset MatriceE ;
Mov Si,Offset K1 ;
Call Rotation ;
; Mov Di,Offset MatriceE ;
Mov Si,Offset K3 ;
Call Rotation ;
; Mov Di,Offset MatriceE ;
Mov Si,Offset K2 ;
Call Rotation ;
Add Word Ptr Cs:[AddX], 160
Cmp Word Ptr Cs:[AddX],640
Jl @@NoIncBase
Mov Word Ptr Cs:[AddX],0
Add Word Ptr Cs:[AddY],120
Cmp Word Ptr Cs:[AddY],480
Jl @@NoIncBase
Mov Word Ptr Cs:[AddX],0
Mov Word Ptr Cs:[AddY],0
@@NoIncBase:
Pop Ecx ;
inc Cx
Cmp Cx,180
Jg CestFinit
In Al,60h
Dec Al
Jnz Again
CestFinit:
Mov Ax,03h ; Retour en Mode Texte
Int 10h
Mov Sp,0FFFEh ; Validation Stack pour retour
Int 20h
StartC EndS
End StartC ; Fin de Programme
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.