La programmation graphique en assembleur?
J'ai développé une course Super Mario Sprite à l'aide de Visual C++ 6.0 et DirectX. Mais ce n'est pas très satisfaisant pour moi (pour le viol d'une 3D-Multimédia-cadre pour l'affichage d'un sprite 2D seulement), donc je voudrais être capable de programmer une animation de sprite en utilisant le C et l'assembleur.
Ainsi, lors de la recherche de vieux jeux (Wolfenstein, par exemple), il semble que la plupart du jeu est écrit en C et, à chaque fois, il s'agit de graphiques de sortie, il est l'utilisation de l'assembleur.
Malheureusement, lorsque j'essaie d'utiliser ce vieux code assembleur il y a toujours le message d'erreur "NTVDM.exe a trouvé une instruction non valide" donc, ce genre de choses ne semblent pas fonctionner de nos jours.
Est-il un tutoriel sur le graphisme de programmation en assembleur qui est encore utile?
(Je ne veux pas utiliser tout gonflé des cadres ou des bibliothèques, j'ai juste envie de tout développer sur mon propre. WinAPI serait OK pour la création d'une fenêtre plein écran et pour la capture de la saisie de l'utilisateur, mais pas pour les graphismes, car j'ai lu GDI est trop lent à rapide, graphiques.)
Je suis sous WindowsXP et MASM ou l'A86.
OriginalL'auteur | 2009-03-03
Vous devez vous connecter pour publier un commentaire.
Il semble que vous utilisez uniquement de l'Assembleur, car vous semblez penser que cela est nécessaire. Ce n'est pas le cas. Si vous n'avez pas d'autre raison à cela (c'est à dire vouloir l'apprendre), ne pas utiliser de l'Assembleur ici, sauf si vous savez exactement ce que vous faites.
Pour la moyenne de votre moteur graphique, programmation Assembleur est complètement inutile. Surtout quand il s'agit d'un Super Mario 2D style sprite moteur. Même “lent”, langages de script comme Python est assez rapide pour que de telles choses de nos jours.
Ajoutant à cela, si vous ne savez pas exactement ce que vous faites, monteur pas être plus vite que C (en fait, les chances sont qu'il sera plus lent parce que vous allez re-mise en œuvre des fonctions C moins efficace).
OriginalL'auteur Konrad Rudolph
Je suis totalement d'accord avec samcl
La principale raison pour ne pas utiliser de l'assembleur, c'est que vous ne pouvez pas accéder à la Videomemory plus. Retour dans les premiers jours (vous avez mentionné Castle Wolfenstein), il y a une vidéo de ce mode de 0x13h où votre graphique était juste un bloc de mémoire(chaque pixel a une palette coloer allant de 0 à 255<--1 Octet) Vous avez été en mesure d'accéder à cette mémoire grâce à cette vidéo, mode, cependant, aujourd'hui, les choses sont beaucoup plus compliquées
Aujourd'hui, vous avez très rapide Videomemory et l'utilisation de votre CPU pour accéder il suffit d'abattre toutes les performances, comme vous le PROCESSEUR est connecté par l'intermédiaire de PCI-Express ou AGP/PCI/VESA-LOCALBUS/ISA (<- se souvenir de quelqu'un!?)
Graphicsprogramming est souvent beaucoup de lire et d'écrire des accès(lecture pixel, vérifier si elle est transparente, se multiplient avec alpha, écrire pixel, etc.)
La mémoire moderne, les Interfaces sont beaucoup plus lent que l'accès direct à à l'intérieur de la carte graphique. C'est pourquoi vous devriez vraiment utiliser les shaders, comme Robert Gould suggère. De cette façon, vous pouvez écrire plus vite et plus facile à comprendre le code et il ne se bloque pas votre GFX-Mémoire.
SI vous êtes plus intéressé dans GFX de Programmation, vous pouvez mouiller votre appétit avec shadertoy, une communauté dédiée à shaderbased effets complet avec WebGLbased Shadercode exécution.
Également votre débutant code assembleur sera assez boiteux. dans la qualité que dans la performance. Faites-moi confiance. Il faut beaucoup de temps pour l'optimisation de ces primitives code. Si votre compilé en Code C/C++ sera mieux votre manuscrite asm facilement.
Si vous êtes initerested en Assembleur, essayez de code quelque chose comme diskaccess. C'est là que vous pouvez gagner beaucoup de performance.
OriginalL'auteur Peter Parker
Je suppose que si vous êtes déjà à l'aide de C avec DirectX, la vitesse n'est pas la question, et que ce n'est plus un exercice d'apprentissage. Pour la 2D sous Windows, C et DirectX va être très rapide en effet, et comme Konrad Rudolph points, main une manivelle assembleur est rare d'être plus rapide qu'une très optimisé SDK.
De purement d'un point de vue éducatif, il est intéressant de l'activité, mais assez complexe. Retour dans les premiers jours de la maison, les ordinateurs et les premiers PC, l'écran graphique est apparu à peu près comme un bloc de mémoire, où octets correspond à un ou plusieurs pixels de couleur. En changeant la valeur de la mémoire d'écran, vous pouvez tracer des points, et donc les lignes, et sur les sprites, etc... Sur les Pc modernes, ce qui tend à ne pas être une option, que vous pouvez programmer une carte graphique, généralement par l'intermédiaire d'un SDK, pour faire le même travail. La carte, alors le travail dur, et vous sont fournis avec un niveau beaucoup plus élevé d'abstraction. Si tu voulais vraiment avoir une idée de ce que c'était que de retour dans la journée, je vous recommande un émulateur. Pour un jeu moderne, le bâton avec votre Sdk.
OriginalL'auteur SmacL
Il est possible de programmer votre propre moteur 2D dans une version récente de Directx, si vous souhaitez étudier cette avenue. Vous pouvez créer un "espace à l'écran" alignés polygone, sans correction de la perspective, dont l'une est la texture plaquée. Vous pouvez ensuite tracer vos sprites sur un pixel par pixel sur cette texture.
comme pour le mode 13h (Peter Parker), ça rappelle quelques souvenirs!
J'aurais tendance à éviter les assembler avec un pôle barge, il peut être particulièrement difficile à déboguer et à maintenir; cependant, si vous souhaitez explorer ce sujet plus en détail, je peux vous recommander Michael Abrash de Programmation Graphique Livre Noir. C'est un peu vieux, mais une bonne lecture et vous donnera un aperçu graphique des techniques de programmation avant de matériel 3D.
OriginalL'auteur Phill
Assembleur pour les graphiques est parce que, à l'époque, la plupart des personnes n'avaient pas de carte graphique avec support de la 3d, de sorte qu'il devait être fait sur le CPU, pas plus. Aujourd'hui, il est à propos de shader de programmation. Shader langues vous permettent de vous blottir avec le métal nu. Donc, si quelque chose vous devriez essayer de votre code 2d graphiques shadered de base, de cette façon, l'expérience aura la valeur d'une carrière de compétences.
Essayer CUDA pour un démarreur.
oui, nvidia cuda est seulement
OriginalL'auteur Robert Gould
Ma recommandation est d'expérimenter. Prenez votre sprite code et écrire dans un certain nombre de formes, en commençant par C/GDI et C++/DirectDraw. Ne vous inquiétez pas à propos de l'assembleur encore.
DirectX est votre meilleur pari pour l'action rapide des graphiques. Apprendre, puis de comprendre comment les micro-optimiser avec l'assembleur. En général, l'assembleur n'est pas en allant faire vos appels d'API plus rapide. Il va ouvrir la flexibilité pour accélérer le calcul pour des choses comme la rotation 3D, mapping de texture, de l'ombrage, etc.
Commencer avec DirectDraw. Voici un FAQ. Techniquement, DirectDraw est obsolète après DirectX 7, mais vous pouvez toujours l'utiliser et en tirer des leçons. Il va vous permettre de vous direct framebuffer de modification, qui est ce que vous êtes probablement à la recherche pour.
Il y a quelques tutoriels et forums, à TripleBuffer Logiciel.
Également envisager la mise à niveau de votre compilateur pour Visual C++ 2008 Express. VC++ 6 est un buggy compilateur qui peut être problématique avec en essayant de compiler certaines bibliothèques C++.
OriginalL'auteur spoulson