Tout dépend de ce que vous entendez par logiciel 3D. Normalement, j'aurais supposé que vous parliez de logiciels faisant des graphiques 3D, comme les jeux vidéo et les logiciels de modélisation/conception 3D. Mais vous avez également ajouté "l'impression 3D" comme sujet. C'est une catégorie d'application complètement différente. Mais prenons'les un par un.
Les logiciels graphiques sont spéciaux en ce sens qu'ils ne fonctionnent pas, habituellement, sur le CPU général de votre ordinateur. Des parties considérables du calcul sont déchargées sur le GPU ou unité de traitement graphique, qui fait partie de votre carte vidéo. Si votre ordinateur a l'air de ne pas avoir de carte vidéo, c'est parce qu'elle est intégrée à la carte "principale" ou "mère", celle qui contient le CPU et la RAM, mais cela n'a en fait que très peu d'importance pour l'architecture globale des choses.
Il existe deux interfaces principales que les programmeurs utilisent pour piloter un GPU : OpenGL et DirectX. DirectX est favorisé par Microsoft et OpenGL par tous les autres, en gros. Parfois, les gens utiliseront des bibliothèques de plus haut niveau, mais si ce que vous faites est du graphisme et non une sorte de tentative de faire du crunching de chiffres non graphique sur un GPU, vous'allez avoir OpenGL ou DirectX à un certain niveau dans votre pile.
En général, si vous cherchez à apprendre l'un ou l'autre, je recommanderais OpenGL, car il'est plus largement supporté, mais je'ne suis pas trop familier avec l'un ou l'autre, donc vous'devriez attendre que des personnes plus compétentes répondent à cette question, ou poser des questions plus spécifiques pour établir quelle bibliothèque correspond le mieux à vos besoins.
Une fois que vous avez choisi la bibliothèque, en principe vous pouvez utiliser n'importe quel langage pour lequel des liaisons OpenGL (ou DirectX) existent. Parce que les logiciels 3D sont souvent intensifs en calcul et que les gens veulent être en mesure d'extraire chaque bit de performance du matériel sans avoir un modèle de calcul trop abstrait entre eux et les puces, ils choisissent souvent d'utiliser un langage comme C ou C++ qui a un modèle de machine abstrait correspondant étroitement à la machine physique sous-jacente réelle et vous donne donc un contrôle plus fin sur ce qui'se passe réellement.
J'ai'vu des logiciels graphiques 3D parfaitement bons écrits dans des langages de plus haut niveau, cependant. En fait, l'une des premières plateformes à supporter de bons graphiques 3D accélérés par le matériel était la machine Lisp, qui était entièrement programmée dans un dialecte Lisp très similaire au Common Lisp ; et ça'c'est un langage de très haut niveau !
Maintenant, passons aux imprimantes 3D. Contrairement aux graphiques 3D, où il faut rendre une image suffisamment de fois par seconde pour donner l'illusion d'un mouvement continu à l'œil humain, les imprimantes 3D vont plutôt lentement. Les piloter n'est pas une tâche très exigeante en temps réel. Il peut y avoir un traitement plus intensif en calcul pour traduire des modèles 3D de plus haut niveau en instructions d'impression couche par couche, mais même cela n'a rien à voir avec le rendu d'un jeu vidéo moderne, car cela ne doit pas se produire en temps réel.
Les logiciels pour piloter les imprimantes 3D peuvent être écrits dans une grande variété de langages. J'en choisirais un avec lequel je suis à l'aise, qui dispose d'un bon support de bibliothèque pour toute fonctionnalité dont je prévois d'avoir besoin, et qui fournit un niveau d'abstraction suffisamment élevé pour garder une grande base de code bien organisée. Mais c'est à peu près un conseil générique pour tout projet logiciel.